两者之间有什么区别(摘自<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>
元素用处不大。也许你可以告诉我它在哪里有用。
答案 0 :(得分:3)
您的第二个示例不是有效的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
作为lastname
的子代出现在之前 person
。