XSD元素基数 - 如何建模'其中一个字段是强制性的'

时间:2011-10-21 07:29:07

标签: xml xsd

在我的XSD元素中,我必须使“fieldA或fieldB字段之一必须使用。”

So far i have this:


<xsd:complexType name="Test">
            <xsd:sequence>
                <xsd:element name="fieldA" maxOccurs="1"    minOccurs="0"/>
                <xsd:element name="fieldB" maxOccurs="1" minOccurs="0"/>
            </xsd:sequence>
</xsd:complexType>

如何为这两个字段设置基数,以便一个是强制性的?

非常感谢您的时间和精力!

2 个答案:

答案 0 :(得分:6)

使用<xsd:choice>代替<xsd:sequence>并放弃minOccurs="0"

示例代码,只需要其中一个字段

<xsd:complexType name="Test">
    <xsd:choice>
        <xsd:element name="fieldA"/>
        <xsd:element name="fieldB"/>
    </xsd:choice>
</xsd:complexType>

如果您想要要求{/ 1}}或<fieldA>或两个元素以任何顺序,请使用此

<fieldB>

如果您要求<xsd:complexType name="Test"> <xsd:choice> <xsd:sequence> <xsd:element name="fieldA"/> <xsd:element name="fieldB" minOccurs="0"/> </xsd:sequence> <xsd:sequence> <xsd:element name="fieldB"/> <xsd:element name="fieldA" minOccurs="0"/> </xsd:sequence> </xsd:choice> </xsd:complexType> <fieldA>或两个元素并保留订单<fieldB>之前<fieldA>),那么你可以稍微简化一下结构。

<fieldB>

答案 1 :(得分:0)

choice 元素可以帮助您:

<xs:complexType name="Test">
    <xs:choice>
         <xs:element name="fieldA" maxOccurs="1" minOccurs="0"/>
         <xs:element name="fieldB" maxOccurs="1" minOccurs="0"/>
    </xs:choice>
</xs:complexType>

更多信息:http://www.w3schools.com/Schema/el_choice.asp