1

这引起了我的注意,所以我有一个 XML 文档,其中有一个名为 family 的节点

<family>
  <parents>
    <name>Bob</name>
    <init>R</init>
    <surname>Johnson</surename>
  </parents>
  <kids>
    <name>Lucy</name>
    <surname>Johnson</surname>
  </kids>
</family>

初始是可选的,所以我为此创建了 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 的第二天,从我读过的教程中,我似乎看不出我做错了什么..

4

1 回答 1

3

您不需要声明name,initialsurname两次,只需尝试

<!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>
于 2013-01-21T15:08:39.350 回答