Как определить одноименные элементы в DTD, имеющие разные родительские элементы? - PullRequest
4 голосов
/ 02 июня 2011

Допустим, у меня есть следующий 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>

В моем DTD, как бы я учел тот факт, что элемент "name" используется как для авторов, так и для книг и может иметь разные дочерние элементы - как это?

<!ELEMENT name (#PCDATA|first_name,last_name)>

1 Ответ

5 голосов
/ 02 июня 2011

Поскольку ваш элемент name является смешанным содержимым (оба дочерних элемента или #PCDATA), вам придется изменить объявление элемента на следующее:

<!ELEMENT name (#PCDATA|first_name|last_name)*>

Это означает, что вам придется использовать что-то отличное от DTD, чтобы принудительно установить, что name содержит #PCDATA или один first_name, за которым следует один last_name.

...