XSD中的xs:sequence和xs:choice有什么区别,它们如何定义元素顺序?

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

在XSD中,xs:sequencexs:choice 是两种控制子元素结构的指示器,它们在定义元素顺序和出现方式上有本质区别。

xs:sequence - 定义严格的顺序

xs:sequence 用来规定其包含的子元素必须按照在Schema中声明的**确切顺序**出现在XML实例文档里。这些子元素都必须出现(除非另有数量限制),并且不能改变位置。

例如,下面的定义要求XML中的 、 元素必须按此顺序依次出现:


  
    
    
    
    
  

符合此规则的XML片段如下:


  George
  John
  Reminder
  Don't forget the meeting!

xs:choice - 定义互斥的选择

xs:choice 表示在它包含的子元素中,**只能选择其中一个**出现在XML实例文档里。这与顺序无关,而是一种“非此即彼”的关系。

例如,下面的定义表示在一个 元素内,只能包含 中的一个子元素:


  
    
    
  

因此,有效的XML可能是:


  ...

或者:


  ...

但不能同时包含两者。

基本上就这些,sequence 管的是“谁先谁后”,choice 管的是“选哪个”。