验证的元素列表如a * b?a *

时间:2014-02-27 09:37:55

标签: xml xsd

我想用XSD验证一个如下所示的XML:

<list>
 <item />
 <selecteditem />
 <item />
 <item />
</list>

LIST可以包含多个ITEM,但只有一个SELECTEDITEM可以放在LIST元素的任何位置。

但是,我没有在XSD中找到任何可以让我验证的表达,当我尝试一些“天真”尝试时

<xs:element name="list">
    <xs:complexType>
        <xs:sequence maxOccurs="unbounded">
            <xs:element name="item" type="option" maxOccurs="unbounded" minOccurs="0" />
            <xs:element name="selecteditem" type="option" maxOccurs="1" minOccurs="0" />
            <xs:element name="item" type="option" maxOccurs="unbounded" minOccurs="0" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

我收到一条消息,表明我的模型不是决定论者,这让我怀疑我正在尝试的实际上是不可能的。

任何人都可以告诉我是否有办法验证这个或者XSD是不是要这样做(以及我做错了什么)。

感谢。

编辑:这是我尝试过的另一个解决方案:

<xs:element name="list">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="item" maxOccurs="unbounded" minOccurs="0" />
            <xs:sequence maxOccurs="1" minOccurs="0">
                <xs:element name="itemselected" maxOccurs="1" minOccurs="1" />
                <xs:element name="item" maxOccurs="unbounded" minOccurs="0" />
            </xs:sequence>
        </xs:sequence>
    </xs:complexType>
</xs:element>

1 个答案:

答案 0 :(得分:1)

我认为它可以表示为

item* (selectedItem item*)?