约束固定属性,使其只出现在一个元素上

时间:2010-11-07 18:14:21

标签: xsd

我正在使用XSD在XML模式领域迈出第一步,我正试图弄清楚如何添加一个约束,使得一个属性(用固定值定义)可能只存在于一个元素中一组无限的元素。

这是一个例子

<Object>
    <Element>Value1</Element>
    <Element>Value2</Element>
    <Element Default="true">Value3</Element>
    <Element>Value4</Element>
    <Element>Value5</Element>
</Object>

我想约束Default属性,使其不能出现在多个Element上。

以上是上面的XSD架构:

<xs:element name="Object">
    <xs:complexType>
        <xs:element name="Element" maxOccurs="unbounded">
            <xs:simpleContent>
                <xs:extension base="xs:string">
                    <xs:attribute name="Default" fixed="true"/>
                </xs:extension>
            </xs:simpleContent>
        </xs:element>
    </xs:complexType>
</xs:element>

我已经尝试弄乱xs:uniquexs:selectorxs:field,但没有达到任何有意义的结果,不确定这是否是正确的做法。

谢谢!

2 个答案:

答案 0 :(得分:1)

我尽力为你设计一个xsd。实现该要求的可能方法是定义元素element多于一个,但在XSD下不允许这导致流行错误“试图使XSD不明确”

所以你的要求当然不可能实现。

我想建议定义不同的元素名称。

示例::使用属性定义DefElement,不带属性的无界Element。这对你有用。

答案 1 :(得分:1)

老问题,但请看这里:XSD Specifying an attribute that can be used only once in the XML

有一个紧密的解决方案(但不完整):将属性定义为一值布尔值(仅为真),可选,无默认值和唯一。

(+) - 检查是否只有一个Default =&#34; true&#34; - 检查是否只定义了一个默认属性

( - ) - 不要检查是否至少定义了一个默认属性