XML 架构:使用 <xs:all> 与不使用 minOccurs = "0" 之间的区别



这有什么区别(取自<xs:all> w3schools.com 参考(:

<xs:element name="person">
  <xs:complexType>
    <xs:all>
      <xs:element name="firstname" type="xs:string" minOccurs="0"/>
      <xs:element name="lastname" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
</xs:element>

而这个:

<xs:element name="person">
  <xs:complexType>
      <xs:element name="firstname" type="xs:string" minOccurs="0"/>
      <xs:element name="lastname" type="xs:string" minOccurs="0"/>
  </xs:complexType>
</xs:element>

请注意,每个子元素都包含 minOccurs="0" ,并注意第二个示例中缺少 <xs:all> 标记。

据我了解,如果子元素没有指定minOccurs="0",那么<xs:all>会使整个组根本无法出现。而不使用 <xs:all> 意味着所有子元素必须出现一次,因为元素中 minOccursmaxOccurs 的默认值为 1。

但是,当您在所有子元素上指定minOccurs="0"时,这两个示例不是相同的约束吗?不是都意味着每个元素可以出现一次或不出现吗?

我没有看到<xs:all>元素的用处。也许你可以告诉我它在哪里有用。

您的第二个示例不是有效的 XSD,因为xs:element不能显示为 xs:complexType 的子项。 让我们假设你的第二个例子实际上是

<xs:element name="person">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="firstname" type="xs:string" minOccurs="0"/>
      <xs:element name="lastname" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>

然后,我们可以解释何时使用,如下所示:

  • 元素排序很重要时,请使用xs:sequence
  • 当元素排序无关紧要时,请使用xs:all

在这两种情况下,minOccurs="0" 表示关联的元素是可选的。

因此,在您的(固定(情况下,您的xs:all示例将允许firstnamelastname以任何顺序在person上显示为子项;您的xs:sequence示例将限制firstname作为person的子项出现在lastname之前

最新更新