我正在尝试设置类似于“序列”的模式的一部分,其中所有子元素都是可选的,但至少有一个元素必须存在,并且可能还有更多比其中之一。
我尝试执行以下操作,但 XMLSpy 提示“内容模型包含无法唯一确定的元素
<xs:choice>
<xs:sequence>
<xs:element name="DateConstant"/>
<xs:element name="TimeConstant"/>
</xs:sequence>
<xs:element name="DateConstant"/>
<xs:element name="TimeConstant"/>
</xs:choice>
这可以做到吗(如果可以,怎么做)?
一些说明: 我只想允许同名的每个元素之一。可以有一个“DateConstant”和/或一个“TimeConstant”,但不能有两个。 Gizmo 的答案符合我的要求,但对于大量元素来说是不切实际的。 赫斯特的回答允许两个或多个同名元素,这是我不想要的。
最佳答案
试试这个:
<xs:choice>
<xs:sequence>
<xs:element name="Elem1" />
<xs:element name="Elem2" minOccurs="0" />
<xs:element name="Elem3" minOccurs="0" />
</xs:sequence>
<xs:sequence>
<xs:element name="Elem2" />
<xs:element name="Elem3" minOccurs="0" />
</xs:sequence>
<xs:element name="Elem3" />
</xs:choice>
这样做,你强制要么选择第一个元素,然后其余的元素是可选的,要么是第二个元素,其余的是可选的,要么是第三个元素。
我希望这应该可以满足您的要求。
当然,您可以将子序列分组,以避免在您意识到遗漏一个元素时在每个序列中重复一个元素。
关于 "any one or more of these elements but must be at least one"的 XML 架构构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/100228/