xs:sequence要求子元素严格按声明顺序出现且必须全部存在,xs:choice则要求子元素中仅能选择其一出现。

在XSD中,xs:sequence 和 xs:choice 是两种控制子元素结构的指示器,它们在定义元素顺序和出现方式上有本质区别。
xs:sequence - 定义严格的顺序
xs:sequence 用来规定其包含的子元素必须按照在Schema中声明的**确切顺序**出现在XML实例文档里。这些子元素都必须出现(除非另有数量限制),并且不能改变位置。
例如,下面的定义要求XML中的
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
符合此规则的XML片段如下:
<note> <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
xs:choice - 定义互斥的选择
xs:choice 表示在它包含的子元素中,**只能选择其中一个**出现在XML实例文档里。这与顺序无关,而是一种“非此即彼”的关系。
例如,下面的定义表示在一个
<xs:complexType>
<xs:choice>
<xs:element name="male" type="maleType"/>
<xs:element name="female" type="femaleType"/>
</xs:choice>
</xs:complexType>
因此,有效的XML可能是:
<gender> <male>...</male> </gender>
或者:
<gender> <female>...</female> </gender>
但不能同时包含两者。
基本上就这些,sequence 管的是“谁先谁后”,choice 管的是“选哪个”。










