0

我正在尝试编写一个包含强制元素但顺序任意的复杂类型模式。我的复杂类型如下所示:

   <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/>

你能帮我吗?谢谢你

4

2 回答 2

0

如果每个元素最多出现一次,请使用 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 中,当元素可以重复时,这也可以工作。

于 2012-09-04T07:51:23.437 回答
0
        <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>

于 2012-09-04T03:50:20.153 回答