我正在尝试建立一个类似于“序列”的架构,其中所有子元素都是可选的,但是至少必须存在一个元素,,并且可能存在多个元素。
我尝试执行以下操作,但是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>
这样做,您可以强制选择第一个元素,然后其余部分是可选的,第二个元素是可选的,其余部分是可选的,第三个元素。
我希望这应该做您想要的。
当然,您可以将子序列分成几组,以避免在错过每个序列时重复每个元素。
关于xml - “any one or more of these elements but must be at least one”的XML模式构造,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/100228/