XSD:验证元素的子列表,与顺序无关

时间:2014-04-24 11:27:29

标签: xml xsd

我正在搜索如何创建验证这些不同情况的XSD:

案例1 (所有元素)

...
<Childs>
 <ElementA/>
 <ElementB/>
 <ElementC/>
</Childs>
...

案例2 (某些元素缺失,订单可能会发生变化)

...
<Childs>
 <ElementC/>
 <ElementA/>
</Childs>
...

案例3 (没有孩子)

...
<Childs/>
...

案例4 (每个孩子可以按任何顺序出现几次)

...
<Childs>
 <ElementA/>
 <ElementB/>
 <ElementA/>
 <ElementC/>
 <ElementA/>
</Childs>
...

我做了几次尝试:

尝试#1

...
<xs:element name="Childs" minOccurs="1" maxOccurs="1">
    <xs:complexType>
        <xs:sequence minOccurs="0" maxOccurs="unbounded">
            <xs:element name="ElementA" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="ElementB" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="ElementC" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
...

- &GT;不起作用,因为必须遵守订单(在这种情况下,ElementA之后不会显示ElementB

尝试#2

...
<xs:element name="Childs" minOccurs="1" maxOccurs="1">
    <xs:complexType>
        <xs:all minOccurs="0">
            <xs:element name="ElementA" minOccurs="0" maxOccurs="1" />
            <xs:element name="ElementB" minOccurs="0" maxOccurs="1" />
            <xs:element name="ElementC" minOccurs="0" maxOccurs="1" />
        </xs:all>
    </xs:complexType>
</xs:element>
...

似乎禁止在maxOccurs

中设置除1以外的任何内容

尝试#3

...
<xs:element name="Childs" minOccurs="1" maxOccurs="1">
    <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="ElementA" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="ElementB" minOccurs="0" maxOccurs="unbounded" />
            <xs:element name="ElementC" minOccurs="0" maxOccurs="unbounded" />
        </xs:choice>
    </xs:complexType>
</xs:element>
...

据我了解,我将能够拥有所需数量的元素,但所有元素都必须属于同一类型。

那么,我是否误解了某些内容,或者是否有其他因素可以实现我的目标?

0 个答案:

没有答案