Как определить DTD без строгого порядка элементов? - PullRequest
9 голосов
/ 13 апреля 2011

Как «новичок» XML, я обнаружил важность порядка элементов при создании потока / файла XML, который проверяется на соответствие DTD.Можно ли определить DTD, который не зависит от порядка элементов?Если да, пожалуйста, предоставьте синтаксический пример.

Ответы [ 2 ]

20 голосов
/ 13 апреля 2011

Вы используете или (вертикальная труба) и повтор (звездочка:)

<!ELEMENT eltype1 ( eltype2 | eltype3)*>

Это означает, что eltype1 может содержать любое количество повторений eltype2 или eltype3.

13 голосов
/ 07 июня 2011

Единственная проблема с принятым в настоящее время ответом состоит в том, что он не заставляет использовать только один элемент в любом порядке.Например, вы можете иметь 2 eltype2 элементов и не eltype3 элементов.

Если вам необходимо убедиться, что оба элемента присутствуют и каждый из них встречается только один раз, это более точное объявление элемента:

<!ELEMENT eltype1 ((eltype2, eltype3)|(eltype3, eltype2))>

Пример во внутреннем подмножестве:

<!DOCTYPE eltype1 [
<!ELEMENT eltype1 ((eltype2, eltype3)|(eltype3, eltype2))>
<!ELEMENT eltype2 (#PCDATA)>
<!ELEMENT eltype3 (#PCDATA)>
]>
<eltype1>
  <eltype3>element three</eltype3>
  <eltype2>element two</eltype2>
</eltype1>
...