如何在xsd中按顺序限制复杂类型的出现?

时间:2014-01-30 09:04:56

标签: xsd

我想让xsd用于以下示例xml:

<Action name="noname">
<choices>
<choice attrib1="hi" attrib2="hello" attrib3="test" />
<choice attrib1="hi1" attrib2="hello1" attrib3="test1" />
<choice attrib1="hi2" attrib2="hello2" attrib3="test3" />
<choice attrib1="hi" />
</choices>
</Action>

如上所示。我希望在没有“attrib2”和“attrib3”的情况下至少有一个“选择”。我怎么能实现呢?

1 个答案:

答案 0 :(得分:0)

我不确定我完全理解,但您可以根据需要声明属性attrib1,并使用minOccurs =“1”声明选择元素。像这样:

<xs:element name="choices">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="choice" minOccurs="1" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:string">
                            <xs:attribute name="attrib1" type="xs:string" use="required"/>
                            <xs:attribute name="attrib2" type="xs:string"/>
                            <xs:attribute name="attrib3" type="xs:string"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:element>

但是,这可能会限制您的需求。所有选择元素都需要attrib1吗?