这是我的大脑所以我有一个XML文档,其中有一个名为family
的节点<family>
<parents>
<name>Bob</name>
<init>R</init>
<surname>Johnson</surename>
</parents>
<kids>
<name>Lucy</name>
<surname>Johnson</surname>
</kids>
</family>
inital是可选的,所以我为此创建了DTD,它最终看起来像
<!ELEMENT parent (name, initial?, surname)>
<!ELEMENT kid (name, initial?, surname)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT initial (#PCDATA)>
<!ELEMENT surname (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT initial (#PCDATA)>
<!ELEMENT surname (#PCDATA)>
但我一直得到这个错误的有效性错误:元素名称的重新定义^ /tmp/tmp.dtd:26:有效性错误:元素初始化的重新定义^ /tmp/tmp.dtd:27:有效性错误:元素姓氏的重新定义^
即使我将DTD更改为这样。
<!ELEMENT parent (name, initial?, surname)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT initial (#PCDATA)>
<!ELEMENT surname (#PCDATA)>
<!ELEMENT kid (name, initial?, surname)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT initial (#PCDATA)>
<!ELEMENT surname (#PCDATA)>
相同的错误..这实际上是我使用xml的第二天,从我读过的教程中我似乎无法看到我做错了..
答案 0 :(得分:3)
您无需声明name
,initial
和surname
两次,只需尝试
<!ELEMENT parent (name, initial?, surname)>
<!ELEMENT kid (name, initial?, surname)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT initial (#PCDATA)>
<!ELEMENT surname (#PCDATA)>
parent
和kid
对其三个(或两个)子元素共享相同的定义。给出了
<!ELEMENT family (parent*, kid*)>
这将验证以下内容(根据您在问题中包含的文档进行更正)
<family>
<parent>
<name>Bob</name>
<initial>R</initial>
<surname>Johnson</surname>
</parent>
<kid>
<name>Lucy</name>
<surname>Johnson</surname>
</kid>
</family>