按值具有不同子元素的xml架构限制列表

按值具有不同子元素的xml架构限制列表,xml,xsd,Xml,Xsd,我喜欢创建一个元素,该元素根据其中一个元素的值具有不同的子元素。我想知道我是否以及如何才能做到这一点(最好的解决方案)。 因此,如果类型是工件,则必须有重量元素。如果类型为千克或克或。。。它不需要它 <?xml version="1.0" encoding="UTF-8"?> <Amounts> <Amount> <Type>piece</Type> <

我喜欢创建一个元素,该元素根据其中一个元素的值具有不同的子元素。我想知道我是否以及如何才能做到这一点(最好的解决方案)。 因此,如果
类型
工件
,则必须有
重量
元素。如果
类型
千克
或。。。它不需要它

    <?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>

“:Type和”“:Type(或替换后的元素
组)违反“唯一粒子属性”。在验证期间
在这种模式下,这两种模式会产生歧义 粒子。 -cos元素一致:类型“#AnonType_Amount”出错。模型中出现多个名为“Value”的元素,其类型不同 小组


如果你做的是“类型”“一个属性而不是一个元素,那么您可以在XSD 1.1中使用条件类型赋值来完成它。否则,很抱歉,你就不走运了。

Hmm好的,你能举一个在XSD 1.1中如何做到这一点的简短示例吗?我稍后会尝试一下,然后检查你的答案。Priscilla Walmsley这里有许多条件类型赋值的示例:(如果你想正确理解它们,请买她的书!)
<?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>