3

I tried internal and external DTD's both with a name different than the root element name , it still Works!.

Its about the value of "Name" in the tag below -

<DOCTYPE Name SYSTEM "Couple.dtd">

What's the use of this "Name" then?

1)Internal DTD

<!DOCTYPE  SampleDocType[
<!ELEMENT Neighbours (Couple, Couple) >
<!ELEMENT Couple (Name, Name) >
<!ELEMENT Name ( Vorname, Nachname, Geschlecht) >
<!ELEMENT Vorname (#PCDATA) >
<!ELEMENT Nachname (#PCDATA) >
<!ELEMENT Geschlecht (#PCDATA) >
]>

<Couple>

    <Name>

        <Vorname>Marie</Vorname>

        <Nachname>M&#252;ller</Nachname>

        <Geschlecht>&#61;</Geschlecht>

    </Name>

    <Name>


        <Vorname>Klaus</Vorname>

        <Nachname>M&#xfc;ller</Nachname>

        <Geschlecht>♂&lt;/Geschlecht>

    </Name>

</Couple>

2)External DTD

<!DOCTYPE SampleDocType SYSTEM "Couple.dtd" >

<Couple>

<Name>

 <Vorname>Marie</Vorname>

 <Nachname>M&#252;ller</Nachname>

 <Geschlecht>&#61;</Geschlecht>

</Name>

<Name>


 <Vorname>Klaus</Vorname>

 <Nachname>M&#xfc;ller</Nachname>

 <Geschlecht>♂&lt;/Geschlecht>

</Name>

</Couple>

external DTD file

<!ELEMENT Neighbours ( Couple, Couple) >
<!ELEMENT Couple (Name, Name) >
<!ELEMENT Name ( Vorname, Nachname, Geschlecht) >
<!ELEMENT Vorname (#PCDATA) >
<!ELEMENT Nachname (#PCDATA) >
<!ELEMENT Geschlecht (#PCDATA) >

Note - I am using XMLtools plugin in Notepad++ for validation.

4

2 回答 2

2

根据规范(1.01.1):

文档类型声明中的名称必须与根元素的元素类型匹配。

如果您的工具没有将此报告为错误,我认为这是该工具的错误。

于 2013-10-30T02:31:46.920 回答
2

您问...中的“名称”有什么用<!DOCTYPE Name SYSTEM "Couple.dtd">

像所有有意的冗余一样,XML 文档类型声明中的 Name 允许进行一致性检查。在 SGML(XML 继承声明的语法)中,检查可能更重要,因为文档类型声明和文档最外层元素的开始标记可能位于不同的文件或实体中。由于 XML 要求文档类型声明(如果存在)与文档最外层元素的标记位于同一数据流中,因此 XML 中的冗余需求不太明显,并且可以说保留名称是为了与 SGML 兼容。

于 2013-11-05T02:39:27.310 回答