<xsd:all> 和 <xsd:sequence> 在架构定义中的区别?



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

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

这两者有什么区别吗?

xsd:sequence: XML元素的顺序必须一致

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创建一个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:all的更多信息
关于xsd:sequence的更多信息

希望我回答了你的问题。

差异:

  • xsd:all -子元素可以以任意顺序出现。默认情况下,每个子元素只出现一次。子元素允许出现的次数可以通过minOccursmaxOccurs属性进行修改。
  • xsd:sequence -子元素必须按照定义的顺序出现。默认情况下,每个子元素只出现一次。子元素允许出现的次数可以通过minOccursmaxOccurs属性进行修改。

从W3Schools教程这里和这里

模式仅仅定义了兼容文档的构成。

如何报告不符合完全取决于验证者。没有什么可以阻止验证器准确地报告哪些字段丢失了,但显然,在这种情况下,您使用的验证器不会这样做。

这是一个bug还是一个设计,您必须与验证器的提供者讨论

简单的XML示例:

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

以上XML的XSD(已解释):

<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简单。

所有指标

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

序指示器

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

参考链接

当我们使用under标记时,它表示在该complexType中声明的所有元素必须以相同的顺序出现在XML文档中。否则,您将得到一个错误。因为不需要按适当的顺序指定元素。

最新更新