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

use*_*378 72 xml xsd xml-validation xsd-validation

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

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

这两者有什么区别吗?

xsd:sequence:XML元素必须处于相同的顺序.

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

Mad*_*shi 120

<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>
Run Code Online (Sandbox Code Playgroud)

如果您从此xsd创建XML,那么它将如下所示:

<compElement>
  <ele1>First</ele1>
  <ele2>Second</ele2>
  <ele3>Third</ele3>
  <ele4>Fourth</ele4>
</compElement>
Run Code Online (Sandbox Code Playgroud)

全部示例:

<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>
Run Code Online (Sandbox Code Playgroud)

如果您从此xsd创建XML文件,那么它可能看起来像这样:

<compElement>
  <ele2>Second</ele2>
  <ele1>First</ele1>
  <ele4>Fourth</ele4>
  <ele3>Third</ele3>
</compElement>
Run Code Online (Sandbox Code Playgroud)

有关 xsd的
更多信息:有关xsd:sequence的所有更多信息

希望我回答你的问题.

  • 您可以将“ all”元素的“ minOccurs”属性指定为零。有关更多详细信息,请访问http://www.w3schools.com/schema/el_all.asp (2认同)

kam*_*uel 18

区别:

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

这里这里的W3Schools教程.

  • w3schools与W3C没有关联,因此他们的网页不是W3C文档. (8认同)
  • 您应该将粒子基数的约束限定为特定于XSD 1.0 - 否则这对于XSD 1.1是不正确的. (4认同)
  • @kamituel实际上,它适用于架构中其容器内的所有元素本身.你引用的文档是1.1,没有约束.无论如何,我确实找到了约束,它在"人类英语"中就像你粘贴在你的答案中一样,在1.0 doc的上面几行. (2认同)
  • “子元素可以出现零次或一次”实际上是不正确的!minOccurs 的默认值为 1,这意味着它必须存在,这适用于所有和序列。 (2认同)

Joa*_*ous 6

该模式仅定义什么构成合规文档。

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

无论这是一个错误还是设计使然,您都必须与验证器的提供者讨论。

  • 这个问题似乎是在问序列和全部之间的区别,但更彻底的阅读表明作者已经知道这一点,但对验证器的输出感到困惑。这就是如何。 (3认同)