我正在尝试设置一个类似于"序列"的模式的一部分,其中所有子元素都是可选的,但至少有一个元素必须存在,并且可能存在多个元素.
我尝试执行以下操作,但XMLSpy抱怨"内容模型包含元素<element name ="DateConstant">和<element name ="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>
Run Code Online (Sandbox Code Playgroud)
可以这样做(如果是这样,怎么做)?
一些澄清:我只想允许同名的每个元素之一.可以有一个"DateConstant"和/或一个"TimeConstant",但不是两个.Gizmo的答案符合我的要求,但对于大量元素来说这是不切实际的.Hurst的答案允许两个或多个同名的元素,这是我不想要的.
giz*_*zmo 24
试试这个:
<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>
Run Code Online (Sandbox Code Playgroud)
这样做,你强制要么选择第一个元素,然后其余的是可选的,要么第二个元素,其余的是可选的,要么是第三个元素.
我希望,这应该做你想要的.
当然,您可以将子序列放入组中,以避免在您意识到错过一个元素时复制每个序列中的元素.
小智 17
根据MSDN上的技术文章标题为理解XML Schema,请 访问http://msdn.microsoft.com/en-us/library/aa468557.aspx#understandxsd_topic5, 您可以利用选项定义(compositor)本身的minOccurs等约束.:
"在合成器上使用出现约束适用于整个组"
(请参阅使用嵌套复杂类型和AuthorType示例的更复杂的示例)
你说你的要求是"必须至少有一个元素存在,并且可能存在多个元素".因此,我建议你尝试以下方法:
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element name="DateConstant" type="..."/>
<xs:element name="TimeConstant" type="..."/>
</xs:choice>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20534 次 |
最近记录: |