这有什么区别(取自<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>
意味着所有子元素必须出现一次,因为元素中 minOccurs
和 maxOccurs
的默认值为 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
示例将允许firstname
和lastname
以任何顺序在person
上显示为子项;您的xs:sequence
示例将限制firstname
作为person
的子项出现在lastname
之前。