xml架构限制列表,按值分配不同的子元素

时间:2014-10-07 21:30:13

标签: xml xsd

我喜欢创建一个具有不同子元素的元素,具体取决于其中一个元素的值。我想知道是否以及如何实现这一目标(最佳解决方案)。 因此,如果Typepiece,则必须有Weight元素。如果Typekilogramgram或......则不需要它。

    <?xml version="1.0" encoding="UTF-8"?>
    <Amounts>
        <Amount>
            <Type>piece</Type>
            <Value>6</Value>
            <Weight>
                <Value>1.5</Value>
                <Type>liter</Type>
            </Weight>
        </Amount>
        <Amount>
            <Type>kilogram</Type>
            <Value>0.610</Value>
        </Amount>
    </Amounts>

所以我想我可能会做这样的事情,但我得到错误(见下文)。

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.test.org/amount"
    xmlns:amount="http://www.test.org/amount" elementFormDefault='qualified'>
    <element name="Amount">
        <complexType>
            <choice>
                <group ref="amount:kilogram" />
                <group ref="amount:piece" />
            </choice>
        </complexType>
    </element>
    <group name="kilogram">
        <sequence>
            <element name="Type" fixed="kilogram" />
            <element name="Value" type="float" />
        </sequence>
    </group>
    <group name="piece">
        <sequence>
            <element name="Type" fixed="piece" />
            <element name="Value" type="int" />
            <element name="Weight">
                <complexType>
                    <sequence>
                        <element name="Type" type="amount:amountType" />
                        <element name="Value" type="float" />
                    </sequence>
                </complexType>
            </element>
        </sequence>
    </group>
    <simpleType name="amountType">
        <restriction base="string">
            <enumeration value="kg" />
            <enumeration value="g" />
            <enumeration value="mg" />
            <enumeration value="lb" />
        </restriction>
    </simpleType>
</schema>

我在第5行遇到的错误是:

  

此行找到多个注释:      - cos-nonambig:“http://www.test.org/amount”:类型和“http://www.test.org/amount”:类型(或替换它们的元素)   小组)违反“独特粒子归因”。验证期间   针对这种模式,将为这两种模式创建歧义   粒子。      - cos-element-consistent:类型'#AnonType_Amount'的错误。名称为“Value”且具有不同类型的多个元素将显示在模型中   基。

1 个答案:

答案 0 :(得分:1)

如果你做了&#34;输入&#34;一个属性而不是一个元素,那么你可以使用条件类型赋值在XSD 1.1中完成它。否则,抱歉,你运气不好。