如何在具有不同父元素的DTD中定义同名元素?

Cha*_*son 4 xml dtd

假设我有以下XML:

<data>
  <authors>
    <author>
      <name>
        <first_name>Stephen</first_name>
        <last_name>Baxter</last_name>
      </name>
    </author>
    <author>
      <name>
        <first_name>Joe</first_name>
        <last_name>Haldeman</last_name>
      </name>
    <author>
  </authors>
  <books>
    <book>
      <name>The Time Ships</name>
    </book>
    <book>
      <name>The Forever War</name>
    <book>
  </books>
</data>
Run Code Online (Sandbox Code Playgroud)

在我的DTD中,我如何解释"name"元素用于作者和书籍的事实,并且可以有不同的子元素 - 像这样?

<!ELEMENT name (#PCDATA|first_name,last_name)>
Run Code Online (Sandbox Code Playgroud)

Dan*_*ley 5

由于您的name元素是混合内容(子元素或#PCDATA),因此您必须将元素声明更改为:

<!ELEMENT name (#PCDATA|first_name|last_name)*>
Run Code Online (Sandbox Code Playgroud)

这意味着您将不得不使用除DTD之外的其他内容来强制执行name包含#PCDATA 一个first_name后跟一个last_name.