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

时间:2011-04-13 02:24:58

标签: xml dtd

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

2 个答案:

答案 0 :(得分:20)

您使用(垂直管道)和重复(星号:)

<!ELEMENT eltype1 ( eltype2 | eltype3)*>

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

答案 1 :(得分:13)

当前接受的答案的唯一问题是它不会强制任何顺序中的每个元素中的一个。例如,您可以拥有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>