xsd:choice 需要其中之一,还是两者都允许?
Does xsd:choice require one or the other, or are both allowed too?
我有两种复杂类型,XML 中的一个元素可以采用这两种类型中的任何一种。有时,我知道元素可以采用这些类型中的哪一种。因此,我在 XSD.
中定义
<xs:complexType name="A">
<xs:sequence>
<xs:element name="one" type="onetype" minOccurs="0"
maxOccurs="1" />
<xs:element name="two" type="twotype" minOccurs="0"
maxOccurs="unbounded" />
<xs:element name="three" type="country" minOccurs="0"
maxOccurs="1" />
</xs:sequence>
<xs:attribute name="oneattr" type="xs:string" />
<xs:attribute name="twoattr" type="xs:string" />
</xs:complexType>
<xs:complexType name="B">
<xs:sequence>
<xs:element name="four" type="fourtype" minOccurs="0"
maxOccurs="1" />
</xs:sequence>
<xs:attribute name="fourattr" type="xs:string" />
</xs:complexType>
但有时我不这样做,所以我创建了另一种类型,例如 AorB
。
<xs:complexType name="AorB">
<xs:choice>
<xs:sequence>
<xs:element name="one" type="onetype" minOccurs="0"
maxOccurs="1" />
<xs:element name="two" type="twotype" minOccurs="0"
maxOccurs="unbounded" />
<xs:element name="three" type="country" minOccurs="0"
maxOccurs="1" />
</xs:sequence>
<xs:sequence>
<xs:element name="four" type="fourtype" minOccurs="0"
maxOccurs="1" />
</xs:sequence>
</xs:choice>
<xs:attribute name="oneattr" type="xs:string" />
<xs:attribute name="twoattr" type="xs:string" />
<xs:attribute name="fourattr" type="xs:string" />
</xs:complexType>
所以我的问题是:在 xsd:choice
中的两个序列中,当验证 XML 时,如果 XML 包含来自两个序列还是只有一个?
xsd:choice
需要一个或另一个
when the XML is validated, does it validate true if XML contains
elements from both sequence or only one ?
xsd:choice
上 @minOccurs
的默认值是 1
,这意味着 children 内容模型中的一种或另一种适用,而不是两种。如果为 value 大于 1
或 添加 minOccurs="
value"
value等于unbounded
,则允许其children出现多次。但是请注意,第二次出现可能是从第一次出现时选择的 child 的重复。
我有两种复杂类型,XML 中的一个元素可以采用这两种类型中的任何一种。有时,我知道元素可以采用这些类型中的哪一种。因此,我在 XSD.
中定义<xs:complexType name="A">
<xs:sequence>
<xs:element name="one" type="onetype" minOccurs="0"
maxOccurs="1" />
<xs:element name="two" type="twotype" minOccurs="0"
maxOccurs="unbounded" />
<xs:element name="three" type="country" minOccurs="0"
maxOccurs="1" />
</xs:sequence>
<xs:attribute name="oneattr" type="xs:string" />
<xs:attribute name="twoattr" type="xs:string" />
</xs:complexType>
<xs:complexType name="B">
<xs:sequence>
<xs:element name="four" type="fourtype" minOccurs="0"
maxOccurs="1" />
</xs:sequence>
<xs:attribute name="fourattr" type="xs:string" />
</xs:complexType>
但有时我不这样做,所以我创建了另一种类型,例如 AorB
。
<xs:complexType name="AorB">
<xs:choice>
<xs:sequence>
<xs:element name="one" type="onetype" minOccurs="0"
maxOccurs="1" />
<xs:element name="two" type="twotype" minOccurs="0"
maxOccurs="unbounded" />
<xs:element name="three" type="country" minOccurs="0"
maxOccurs="1" />
</xs:sequence>
<xs:sequence>
<xs:element name="four" type="fourtype" minOccurs="0"
maxOccurs="1" />
</xs:sequence>
</xs:choice>
<xs:attribute name="oneattr" type="xs:string" />
<xs:attribute name="twoattr" type="xs:string" />
<xs:attribute name="fourattr" type="xs:string" />
</xs:complexType>
所以我的问题是:在 xsd:choice
中的两个序列中,当验证 XML 时,如果 XML 包含来自两个序列还是只有一个?
xsd:choice
需要一个或另一个
when the XML is validated, does it validate true if XML contains elements from both sequence or only one ?
xsd:choice
上 @minOccurs
的默认值是 1
,这意味着 children 内容模型中的一种或另一种适用,而不是两种。如果为 value 大于 1
或 添加 minOccurs="
value"
value等于unbounded
,则允许其children出现多次。但是请注意,第二次出现可能是从第一次出现时选择的 child 的重复。