模式定义中的<xsd:all>和<xsd:sequence>之间的区别?

我正在使用复杂types的xsd:all 。 当我错过任何强制性的元素,而validation它会显示所有的元素。 它不会显示确切的遗漏元素。

但是如果我使用xsd:sequence我可以得到确切的错过的元素。

这两者有什么区别?

xsd:sequence :XML元素的xsd:sequence必须相同。

但是, xsd:all :XML元素可能是任何顺序。

< xsd:all >指定子元素可以以任何顺序出现。

< xsd:sequence >指定子元素只能按提到的顺序出现。

序列示例:

 <xs:element name="compElement"> <xs:complexType> <xs:sequence> <xs:element name="ele1" type="xs:string"/> <xs:element name="ele2" type="xs:string"/> <xs:element name="ele3" type="xs:string"/> <xs:element name="ele4" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> 

如果你从这个xsd创build一个XML,那么它会是这样的:

 <compElement> <ele1>First</ele1> <ele2>Second</ele2> <ele3>Third</ele3> <ele4>Fourth</ele4> </compElement> 

所有例子:

 <xs:element name="compElement"> <xs:complexType> <xs:all> <xs:element name="ele1" type="xs:string"/> <xs:element name="ele2" type="xs:string"/> <xs:element name="ele3" type="xs:string"/> <xs:element name="ele4" type="xs:string"/> </xs:all> </xs:complexType> </xs:element> 

如果你从这个xsd创build一个XML文件,那么它会是这样的:

 <compElement> <ele2>Second</ele2> <ele1>First</ele1> <ele4>Fourth</ele4> <ele3>Third</ele3> </compElement> 

有关 xsd:序列的更多信息

希望我回答你的问题。

区别:

  • xsd:all – “子元素可以以任何顺序出现,每个子元素可以出现零次或一次”(即,maxOccurs可以是0或1)
  • xsd:sequence – “子元素必须出现在一个序列中,每个子元素可以出现0到任意次数”(即,maxOccurs可以是0或任何数字或“无界”)

从这里和这里的W3Schools教程。

所有指标

<all>指示符指定子元素可以以任何顺序出现,并且每个子元素只能出现一次:

序列指标

<sequence>指示符指定子元素必须以特定顺序出现:

参考链接

当我们在标签下使用的时候,它表明所有在那个complexType中声明的元素必须在XML文档中以相同的顺序出现。 否则,你会得到一个错误。 因为没有必要以正确的顺序指定元素。