XSD – 2个属性之一是必需的?

有没有办法指定在XSD中需要2个属性之一?

例如,我有这样的定义。

<xs:attribute name="Name" type="xs:string" use="optional" /> <xs:attribute name="Id" type="xs:string" use="optional" /> 

我希望能够定义至less有一个是必需的。 那可能吗?

不,我不认为你可以用属性来做到这一点。 你可以将两个<xs:element>包装成一个<xs:choice> – 但是对于属性,恐怕没有等价的构造。

渣子

XSD 1.1将允许您使用断言来执行此操作。

 <xsd:element name="remove"> <xsd:complexType> <xsd:attribute name="ref" use="optional"/> <xsd:attribute name="uri" use="optional"/> <xsd:assert test="(@ref and not(@uri)) or (not(@ref) and @uri)"/> </xsd:complexType> </xsd:element> 

Marc是很正确的…你不能在XSD中的xs:choice父元素中有xs:attribute子元素。

逻辑似乎是,如果一个元素的两个实例具有互斥的一组属性,那么它们在逻辑上是两个不同的元素。

Jeni Tennison 在这里介绍了一个解决方法。

你应该看看W3C wiki上的这个页面: 简单的属性含义和属性互斥

该示例定义了名为“person”的元素,该元素必须包含“employee”元素或“member”元素。

 <xs:element name="person"> <xs:complexType> <xs:choice> <xs:element name="employee" type="employee"/> <xs:element name="member" type="member"/> </xs:choice> </xs:complexType> </xs:element>