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

reg*_*reg 2 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>
Run Code Online (Sandbox Code Playgroud)

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

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

jas*_*sso 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>
Run Code Online (Sandbox Code Playgroud)

如果你想需要有<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>
Run Code Online (Sandbox Code Playgroud)

如果你想需要有<fieldA><fieldB>或两种元素和维护秩序(<fieldA><fieldB>),那么你就可以简化结构有点.

<xsd:complexType name="Test">
    <xsd:choice>
        <xsd:sequence>
            <xsd:element name="fieldA"/>
            <xsd:element name="fieldB" minOccurs="0"/>
        </xsd:sequence>
        <xsd:element name="fieldB"/>
    </xsd:choice>
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)