我正试图编写一个包含强制元素但顺序任意的复杂类型模式。我的复杂类型如下:
<xs:choice minOccurs="0" maxOccurs="1">
<xs:element name="link" type="xs:unsignedInt" minOccurs="1" maxOccurs="1"/>
<xs:element name="Plan" type="xs:unsignedInt" minOccurs="1" maxOccurs="1"/>
</xs:choice>
如果我只输入两个元素中的一个,xml文件将是有效的(而它不应该是有效的):
<link>123<link/>
或
<Plan>222<Plan/>
有效,而我只希望以下内容有效:
<link>123<link/>
<Plan>222<Plan/>
或
<Plan>222<Plan/>
<link>123<link/>
你能帮我吗?感谢
<xs:choice minOccurs="0" maxOccurs="1">
<xs:sequence>
<xs:element name="link" type="xs:unsignedInt" minOccurs="1" maxOccurs="1"/>
<xs:element name="Plan" type="xs:unsignedInt" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
<xs:sequence>
<xs:element name="Plan" type="xs:unsignedInt" minOccurs="1" maxOccurs="1"/>
<xs:element name="link" type="xs:unsignedInt" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:choice>
可以解决这个问题,但如果这只是伪样本代码,则尝试使用<xs:group>
和<xs:choice>
如果每个元素最多可以出现一次,请使用xs:all:
<xs:all>
<xs:element name="link" type="xs:unsignedInt" minOccurs="1" maxOccurs="1"/>
<xs:element name="Plan" type="xs:unsignedInt" minOccurs="1" maxOccurs="1"/>
</xs:all>
对于XSD 1.1,当元素可以重复时,这也可以工作。