XSD指定只能在XML中使用一次的属性

时间:2014-02-27 10:04:04

标签: xml xsd

具有包含多个属性的complexType:

<xs:complexType name="baseType" mixed="true">
    <xs:attribute name="name" type="xs:string" use="required"/>
    <xs:attribute name="leader" type="xs:boolean" use="optional"/>
</xs:complexType>
<xs:element name="person" type="baseType"/>

如何限制leader属性仅在XML文件中使用一次?所以以下内容不会验证(不能是两位领导者)

<person name="Charlie"/>
<person name="Megan" leader="true"/>
<person name="Moe"/>
<person name="Jonathan" leader="true"/>
<person name="Claire"/>

1 个答案:

答案 0 :(得分:2)

如果为leader属性提供仅具有一个可能值的类型(例如,通过boolean限制派生的类型并且仅允许为真),则可以强制执行“最多一次”,然后在包含person元素的 parent 元素的级别添加unique约束,声明person元素必须具有其leader属性的唯一值。由于唯一约束仅适用于实际存在字段的元素,因此这将确保不超过一个人具有leader属性,并且当该属性存在时,它必须为真。

我认为有一种方法可以在XML Schema 1.0中强制执行“至少一个”,如果可以使用1.1,则可以使用断言来执行此操作。