XML 架构:使用 <xs:all> 与 minOccurs="0" 时不使用的区别
XML Schema: Difference between using <xs:all> and not when minOccurs="0"
这之间有什么区别(取自 w3schools.com 对 <xs:all>
的参考):
<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
的 child。假设您的第二个示例实际上是
<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>
然后,我们可以解释一下什么时候使用which:
- 当 元素顺序 是 显着.[=44 时使用
xs:sequence
=]
- 当元素排序无关紧要时使用
xs:all
.
在这两种情况下,minOccurs="0"
表示关联元素是可选的。
因此,在您的(固定)情况下,您的 xs:all
示例将允许 firstname
和 lastname
在 person
上显示为 children任何订单;您的 xs:sequence
示例将限制 firstname
出现在 之前 lastname
作为 children of person
.
这之间有什么区别(取自 w3schools.com 对 <xs:all>
的参考):
<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
的 child。假设您的第二个示例实际上是
<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>
然后,我们可以解释一下什么时候使用which:
- 当 元素顺序 是 显着.[=44 时使用
xs:sequence
=] - 当元素排序无关紧要时使用
xs:all
.
在这两种情况下,minOccurs="0"
表示关联元素是可选的。
因此,在您的(固定)情况下,您的 xs:all
示例将允许 firstname
和 lastname
在 person
上显示为 children任何订单;您的 xs:sequence
示例将限制 firstname
出现在 之前 lastname
作为 children of person
.