在XML中的Doctype声明中使用Name

时间:2013-10-30 00:06:45

标签: xml dtd xml-dtd

我尝试使用名称与根元素名称不同的内部和外部DTD,它仍然可以工作!

关于下面标签中“名称”的值 -

<DOCTYPE Name SYSTEM "Couple.dtd">

那么“名字”有什么用呢?

1)内部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>♂</Geschlecht>

    </Name>

</Couple>

2)外部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>♂</Geschlecht>

</Name>

</Couple>

外部DTD文件

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

注意 - 我在Notepad ++中使用XMLtools插件进行验证。

2 个答案:

答案 0 :(得分:2)

根据规范(1.01.1):

  

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

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

答案 1 :(得分:1)

你问 ...... <!DOCTYPE Name SYSTEM "Couple.dtd">中“姓名”的用途是什么?

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