Определение дубликатов дочерних элементов в DTD - PullRequest
1 голос
/ 11 июня 2009

Я пытаюсь сгенерировать DTD, и мне было интересно, как разрешить дочерним элементам содержать элементы, которые уже были объявлены в DTD. Вы должны объявить их снова? Как пример:

<code><?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE document [
  <!ELEMENT document (author,title,body)>
  <!ELEMENT author (#PCDATA)>
  <!ELEMENT title (#PCDATA)>
  <!ELEMENT body (br*,hr*,img*,table*)>
  <!ELEMENT br EMPTY>
  <!ELEMENT hr EMPTY>
  <!ELEMENT img EMPTY>
  <!ELEMENT table (tr+)>
  <!ELEMENT tr (td+)>
  <!ELEMENT td (#PCDATA)></p>

<p><!--hr element-->
  <!ATTLIST hr width CDATA "0"></p>

<p><!--img element-->
  <!ATTLIST img height CDATA "0">
  <!ATTLIST img src CDATA #REQUIRED>
  <!ATTLIST img width CDATA "0"></p>

<p><!--td element-->
  <!ATTLIST td width CDATA "0">
]>
<document>
  <author>My Author</author>
  <title>My Title Test</title>
  <body>
    <hr />
    <table>
      <tr>
        <td>Would like elements here</td>
      </tr>
    </table>
  </body>
</document>

В приведенном выше XML-коде я хотел бы, например, разрешить использование тегов br, hr, img и table в теге td. Должен ли я переопределить эти элементы в DTD?

Я ценю любую помощь и заранее благодарю.

1 Ответ

2 голосов
/ 11 июня 2009

вы должны ссылаться на них в <!ELEMENT td> определении

редактировать: если вы хотите сохранить проанализированные символьные данные в элементе td вместе с новыми тегами, вы можете определить смешанный элемент содержимого. Пример:

<!ELEMENT td (#PCDATA | br? | hr? | img?)>

см. объявления элементов на w3.org

...