具有相同子项的XML DTD元素

时间:2013-01-21 14:55:39

标签: xml dtd

这是我的大脑所以我有一个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的第二天,从我读过的教程中我似乎无法看到我做错了..

1 个答案:

答案 0 :(得分:3)

您无需声明nameinitialsurname两次,只需尝试

<!ELEMENT parent (name, initial?, surname)>
<!ELEMENT kid (name, initial?, surname)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT initial (#PCDATA)>
<!ELEMENT surname (#PCDATA)>

parentkid对其三个(或两个)子元素共享相同的定义。给出了

的附加定义
<!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>