如何在没有严格元素顺序的情况下定义DTD?

ang*_*guy 9 xml dtd

作为XML"noob",我在创建针对DTD验证的XML流/文件时发现了元素顺序的重要性.是否可以定义不依赖于元素的DTD?如果,那么请提供语法示例.

Ern*_*ill 20

你使用(垂直管道)并重复(星号:)

<!ELEMENT eltype1 ( eltype2 | eltype3)*>
Run Code Online (Sandbox Code Playgroud)

这意味着eltype1可以包含任意数量的重复eltype2eltype3.


Dan*_*ley 13

当前接受的答案唯一的问题是它不会以任何顺序强制每个元素中的一个.例如,您可以有2个eltype2元素而没有eltype3元素.

如果您需要确保两个元素都存在且每个元素只出现一次,这是一个更精确的元素声明:

<!ELEMENT eltype1 ((eltype2, eltype3)|(eltype3, eltype2))>
Run Code Online (Sandbox Code Playgroud)

内部子集中的示例:

<!DOCTYPE eltype1 [
<!ELEMENT eltype1 ((eltype2, eltype3)|(eltype3, eltype2))>
<!ELEMENT eltype2 (#PCDATA)>
<!ELEMENT eltype3 (#PCDATA)>
]>
<eltype1>
  <eltype3>element three</eltype3>
  <eltype2>element two</eltype2>
</eltype1>
Run Code Online (Sandbox Code Playgroud)