有没有办法指定XSD中需要2个属性中的一个?
例如,我有一个这样的定义:<xs:attribute name="Name" type="xs:string" use="optional" />
<xs:attribute name="Id" type="xs:string" use="optional" />
我希望能够定义至少需要其中一个。这可能吗?
答案 0 :(得分:42)
不,我认为你不能用属性做到这一点。你可以将两个<xs:element>
包装成一个<xs:choice>
- 但是对于属性,我恐怕没有等效的构造。
答案 1 :(得分:21)
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>
答案 2 :(得分:9)
Marc非常正确...你不能在XSD中的xs:choice父元素中使用xs:attribute子元素。
逻辑似乎是,如果一个元素的两个实例具有互斥的属性集,那么它们在逻辑上就是两个不同的元素。
Jeni Tennison提出了解决方法here。
答案 3 :(得分:5)
您应该在W3C wiki上查看此页面:Simple attribute implication和Attribute muttex
答案 4 :(得分:-2)
该示例定义了一个名为&#34; person&#34;的元素。必须包含&#34;员工&#34;元素或&#34;成员&#34;元件。
<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>