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

时间:2013-04-19 09:30:07

标签: xml xsd xml-validation xsd-validation

我在复杂类型中使用xsd:all。当我错过任何强制性元素,同时验证它将显示所有元素。它不会显示确切的遗漏元素。

但如果我使用xsd:sequence,我可以得到确切的遗漏元素。

这两者有什么区别吗?

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

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

6 个答案:

答案 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

上的More Info

希望我回答你的问题。

答案 1 :(得分:19)

差异:

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

来自W3Schools教程herehere

答案 2 :(得分:2)

所有指标

  

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

序列指标

  

<sequence>指标指定子元素必须按特定顺序出现:

reference link

答案 3 :(得分:2)

简单XML示例:

<school>
  <firstname>John</firstname>
  <lastname>Smith</lastname>
</school>

XSD高于XML(已解释):

<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数据的另一种方法。
  • 借助额外的属性,我们可以执行多项操作。

  • 在xsd上执行任何任务都比xml简单。

答案 4 :(得分:1)

架构仅定义了合规文档的构成。

如何报告违规行为完全取决于验证人。没有什么可以阻止验证器确切地报告哪些字段丢失了,但显然你使用的字段在这种情况下不会。

无论是错误还是设计,您都必须与验证器的提供商讨论。

答案 5 :(得分:0)

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