我正在研究不应该强制执行元素顺序的 XSD 模式。换句话说,元素可以以任何顺序出现。有些元素是可选的,有些是必需的。据我所知, xs:sequence 适合这种情况,但由于 xs:sequence 强制执行元素顺序,所以我只剩下 xs:choice ,这在强制执行时非常轻松。例如,考虑一个例子:
<p>
<c1>can appear 0 to infinite # of times</c1>
<c2>must appear exactly once</c2>
<c1>here the optional element appears again</c1>
</p>
我的 XSD 看起来像这样:
<xs:element name="p">
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:element name="c1" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="c2" minOccurs="1" maxOccurs="1" />
</xs:choice>
</xs:complexType>
但是,上面的 XSD 并不强制元素“c2”只出现一次。元素“c2”可以完全不存在或出现多次,并且 XML 仍然被认为是有效的。
我真的有什么办法可以允许:
- 任何顺序的元素和
- 在 xs:choice 中混合可选和必需元素?