模式定义中的<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文档中以相同的顺序出现。 否则,你会得到一个错误。 因为没有必要以正确的顺序指定元素。