在序列而不是元素级别使用min / maxOccurs时有任何差异

时间:2011-09-19 10:18:41

标签: xsd

我的意思是在任何情况下:

<xs:element name="MyType1">
    <xs:complexType>
        <xs:sequence>
            <xs:element maxOccurs="unbounded" name="MyType2">...</xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

对此有不同的含义:

<xs:element name="MyType1">
    <xs:complexType>
        <xs:sequence maxOccurs="unbounded">
            <xs:element name="MyType2">...</xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

提前致谢

1 个答案:

答案 0 :(得分:16)

一般来说,对元素组(序列或选择)的出现约束(minOccursmaxOccurs)意味着可以重复整个组,而对元素的出现约束意味着元素可以在之前重复组中的下一个元素出现。

如果您的序列只包含一个元素,则没有区别。

<xs:sequence>
    <xs:element maxOccurs="unbounded" name="MyType2">...</xs:element>
</xs:sequence>

等于

<xs:sequence maxOccurs="unbounded">
    <xs:element name="MyType2">...</xs:element>
</xs:sequence>

并且它们都允许重复元素<MyType2>。一旦序列包含多个元素定义,就会有所不同。

<xs:sequence>
    <xs:element maxOccurs="unbounded" name="MyType">...</xs:element>
    <xs:element maxOccurs="unbounded" name="foobar">...</xs:element>
</xs:sequence>

等于

<xs:sequence maxOccurs="unbounded">
    <xs:element name="MyType">...</xs:element>
    <xs:element name="foobar">...</xs:element>
</xs:sequence>

第一个允许像

这样的结构
<MyType/>
<MyType/>
<foobar/>
<foobar/>

但第二个不允许这样的结构。相反,它允许像

这样的结构
<MyType/>
<foobar/>
<MyType/>
<foobar/>

另一方面,第一个定义不允许这样做。