我目前正在编写一个围绕相当古老且复杂的 xml 标准的 SDK。有一个 xml 模式,但我对这个构造感到困惑:
<xs:complexType>
<xs:choice maxOccurs="unbounded">
<xs:choice>
<xs:element ref="A" minOccurs="0" />
<xs:element ref="B" />
</xs:choice>
<xs:element ref="C" minOccurs="0" maxOccurs="unbounded" />
<xs:element ref="D" minOccurs="0" maxOccurs="unbounded" />
</xs:choice>
</xs:complexType>
我不知道该如何理解这一点……尤其是内部选择。所以选择意味着从列出的元素中只取一个元素,对吗?但是 B 没有最小值或最大值,所以它默认为 1。所以 B 中正好需要 1 个元素。那么如何选择 A?
我认为内部选择基本上是无意义的。内容模型允许任意数量的元素,每个元素可以是 A、B、C 或 D,并且可以按任意顺序排列。有更简单的方法来表达这一点。
正如 Michael 所说,您可以将其简化为如下所示的结构,它将验证相同的结构。
如果您希望强制执行至少一个元素,请将选择的 minOccurs 设置为 1。
注意:我已将元素内联定义为字符串而不是引用,因为您没有提供架构的这一部分。
除了使用,
choice
您还可以使用sequence
,然后您实际上必须将元素设为minOccurs
0,而使用choice