xsd:choice里面两个元素的具体顺序
Specific order of two elements inside xsd:choice
我有以下 XSD:
<xs:complexType name="CodeTags">
<xs:choice maxOccurs="unbounded">
<xs:element name="text" minOccurs="0" maxOccurs="unbounded">
...
</xs:element>
<xs:element name="reference" minOccurs="0" maxOccurs="unbounded">
...
</xs:element>
<xs:element ref="switch" minOccurs="0" maxOccurs="unbounded">
...
</xs:element>
<xs:element ref="if" minOccurs="0" maxOccurs="unbounded">
...
</xs:element>
<xs:element ref="else" minOccurs="0" maxOccurs="unbounded">
...
</xs:element>
<xs:element ref="param" minOccurs="0" maxOccurs="unbounded">
...
</xs:element>
</xs:choice>
</xs:complexType>
我希望 else
标签刚好出现在 if
标签之后。我怎样才能做到这一点?我已经将它们放入 <xs:sequence>
订单中,但我仍然可以在任何地方输入 else
标签,并在它和 if
标签之间添加其他标签。
编辑:代码片段作为图片发布,现在更改为代码块。
只需将 if
和 else
放在一个 xs:sequence
中作为选择之一:
<xs:choice minOccurs="0" maxOccurs="unbounded">
<!-- ... -->
<xs:sequence>
<xs:element ref="if"/>
<xs:element ref="else"/>
</xs:sequence>
<!-- ... -->
<xs:choice>
您也可以从每个选项中删除 minOccurs
和 maxOccurs
;将它们放在 xs:choice
本身就足以满足您的目的。
要了解如何更好地处理这种情况,我建议您首先了解您编写的 CodeTags 元素的含义,以及为什么它允许您不想允许的元素序列。然后继续了解 kjhughes 提供的解决方案为何有效。
我有以下 XSD:
<xs:complexType name="CodeTags">
<xs:choice maxOccurs="unbounded">
<xs:element name="text" minOccurs="0" maxOccurs="unbounded">
...
</xs:element>
<xs:element name="reference" minOccurs="0" maxOccurs="unbounded">
...
</xs:element>
<xs:element ref="switch" minOccurs="0" maxOccurs="unbounded">
...
</xs:element>
<xs:element ref="if" minOccurs="0" maxOccurs="unbounded">
...
</xs:element>
<xs:element ref="else" minOccurs="0" maxOccurs="unbounded">
...
</xs:element>
<xs:element ref="param" minOccurs="0" maxOccurs="unbounded">
...
</xs:element>
</xs:choice>
</xs:complexType>
我希望 else
标签刚好出现在 if
标签之后。我怎样才能做到这一点?我已经将它们放入 <xs:sequence>
订单中,但我仍然可以在任何地方输入 else
标签,并在它和 if
标签之间添加其他标签。
编辑:代码片段作为图片发布,现在更改为代码块。
只需将 if
和 else
放在一个 xs:sequence
中作为选择之一:
<xs:choice minOccurs="0" maxOccurs="unbounded">
<!-- ... -->
<xs:sequence>
<xs:element ref="if"/>
<xs:element ref="else"/>
</xs:sequence>
<!-- ... -->
<xs:choice>
您也可以从每个选项中删除 minOccurs
和 maxOccurs
;将它们放在 xs:choice
本身就足以满足您的目的。
要了解如何更好地处理这种情况,我建议您首先了解您编写的 CodeTags 元素的含义,以及为什么它允许您不想允许的元素序列。然后继续了解 kjhughes 提供的解决方案为何有效。