我在复杂类型中使用xsd:all
。当我错过任何强制性元素,同时验证它将显示所有元素。它不会显示确切的遗漏元素。
但如果我使用xsd:sequence
,我可以得到确切的遗漏元素。
这两者有什么区别吗?
xsd:sequence
:XML元素的顺序必须相同。
但是xsd:all
:XML元素可以是任何顺序。
答案 0 :(得分:107)
<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创建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创建XML文件,那么它可能如下所示:
<compElement>
<ele2>Second</ele2>
<ele1>First</ele1>
<ele4>Fourth</ele4>
<ele3>Third</ele3>
</compElement>
xsd上的 More info:所有
xsd:sequence
希望我回答你的问题。
答案 1 :(得分:19)
差异:
答案 2 :(得分:2)
答案 3 :(得分:2)
<school>
<firstname>John</firstname>
<lastname>Smith</lastname>
</school>
<xs:element name="school">
<xs:complexType>
<xs:sequence>
<xs:element name="firstname" type="xs:string"/>
<xs:element name="lastname" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
此处:
xs:element :定义一个元素。
xs:all :表示子元素可以按任何顺序出现。
xs:sequence :表示子元素仅按提到的顺序显示。
xs:complexType :表示它包含其他元素。
xs:simpleType :表示它们不包含其他元素。
类型: 串, 小数点 整数, 布尔值 日期, 时间,
借助额外的属性,我们可以执行多项操作。
在xsd上执行任何任务都比xml简单。
答案 4 :(得分:1)
架构仅定义了合规文档的构成。
如何报告违规行为完全取决于验证人。没有什么可以阻止验证器确切地报告哪些字段丢失了,但显然你使用的字段在这种情况下不会。
无论是错误还是设计,您都必须与验证器的提供商讨论。
答案 5 :(得分:0)
当我们在tag下使用时,它表示在该complexType中声明的所有元素必须在XML文档中以相同的顺序出现。否则,你会收到一个错误。因为没有必要按正确的顺序指定元素。