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>