我试图建立一个模式,它就像一个“序”里所有的子元素都是可选的一部分,但元件中的至少一个必须存在,而且有可能成为他们中的不止一个。
我试图执行以下操作,但XMLSpy的抱怨“的内容模型包含的元素<元素名称=” DateConstant“>和<元素名称=” DateConstant“>不能被唯一地确定。”:
<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”,而不是两个任。 小发明的答案符合我的要求,但它是不切实际的元素更大的数字。 赫斯特的回答让相同的名字,这是我不希望的两个或多个元素。
试试这个:
<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>
这样做,你强迫或者选择的第一要素,然后剩下的是可选的,或者第二个元素,其余是可选的,无论是第三个元素。
这应该做你想要什么,我希望。
当然,你可以放置子序列分成组,以避免如果你意识到你错过了一个复制的元素各列中。
根据MSDN上的技术文章,题为了解XML架构在http://msdn.microsoft.com/en-us/library/aa468557.aspx#understandxsd_topic5您可以利用的约束,如在选择定义(复合) 的minOccurs本身:
“上的合成器使用现约束适用于整个组作为一个整体”
(请参阅使用嵌套复杂类型和AuthorType示例的更复杂的例子)
你说根据您的要求“的元素中的至少一个必须存在,而且有可能成为他们中的一多”。 因此,我建议您尝试以下方法:
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element name="DateConstant" type="..."/>
<xs:element name="TimeConstant" type="..."/>
</xs:choice>
@hurst,
不幸的是你没有理解原题。 上选择放置的minOccurs =“1”被满足时自动具有的minOccurs = ALL元素“0”被包含作为选项。
因此,你有没有考虑到由原始的海报所要求的“至少一个”,因为没有正确的元素满足1个occurrance两个完全可选的元素。
到目前为止,我无法找到一个解决方案,以这个作为minOccur / maxOccur都涉及到它们所定义的不涉及到节点的总数的组。 您也可以使用选择元素来定义相同的命名元素超过一次或变得“暧昧”。 我见过一些例子来参考,而不是特定类型的元素,但我相信这失败的微软XSD解析器。
<xs:choice minOccurs="1" maxOccurs="1">
<xs:sequence minOccurs="1" maxOccurs="1">
<xs:element name="Elem1" minOccurs="1" maxOccurs="1" />
<xs:element name="Elem2" minOccurs="0" maxOccurs="1" />
</xs:sequence>
<xs:sequence >
<xs:element name="Elem2" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:choice>
这里可以看到,或者你在第一序列(其必须具有Elem1但是可以具有任选elem2时),或具有第二序列(其必须具有elem2时)。
因此,你现在有这两个元素的“任何一个或多个”。 当然,这得到成倍更复杂的你有,因为你需要对所有可能的组合提供更多的选择更多的选择。
文章来源: XML schema construct for “any one or more of these elements but must be at least one”