Xml架构 - 以任何顺序定义子元素0-*

Tor*_*son 11 xml xsd

我想定义一个xml架构,其中元素Connectors具有0-*子元素.序列,关联或消息的任何顺序和0到多次.即

<Connectors>
    <Sequence />
    <Association />
    <Message />
    <Sequence />
    <Sequence />
    <Message />
    <Message />
    <Association />
</Connectors>
Run Code Online (Sandbox Code Playgroud)

我试图定义以下架构,但似乎订单是固定的.

<xs:element name="Connectors">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="Association" minOccurs="0" maxOccurs="unbounded" />
            <xs:element ref="Message" minOccurs="0" maxOccurs="unbounded" />
            <xs:element ref="Sequence" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

Tor*_*son 30

我通过设置选择并设置minOccurs和maxOccurs属性来解决它.

<xs:element name="Connectors">
    <xs:complexType>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element ref="Association" />
            <xs:element ref="Message" />
            <xs:element ref="Sequence" />
        </xs:choice>
    </xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)


jas*_*sso 8

@Torbjörn自己的答案是比这更清晰,但只有在你原来的尝试的一个小的变化会导致同样的结果:增加maxOccurs="unbounded"了对<xs:sequence>元素.

<xs:element name="Connectors">
    <xs:complexType>
        <xs:sequence maxOccurs="unbounded">
            <xs:element minOccurs="0" name="Association" />
            <xs:element minOccurs="0" name="Message" />
            <xs:element minOccurs="0" name="Sequence" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
Run Code Online (Sandbox Code Playgroud)

确保随机顺序,因为每个元素都有minOccurs="0",并且序列可以一遍又一遍地重复.