我正在使用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:unique
,xs:selector
和xs:field
,但没有达到任何有意义的结果,不确定这是否是正确的做法。
谢谢!
答案 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; - 检查是否只定义了一个默认属性
( - ) - 不要检查是否至少定义了一个默认属性