XSDで2つの属性のいずれかが必要であることを指定する方法はありますか?
たとえば、次のような定義があります。
<xs:attribute name="Name" type="xs:string" use="optional" />
<xs:attribute name="Id" type="xs:string" use="optional" />
これらの少なくとも1つが必要であると定義できるようにしたいと思います。それは可能ですか?
いいえ、属性でそれを行うことはできないと思います。あなたは2つの<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子要素を含めることはできません。
論理は、要素の2つのインスタンスが相互に排他的な属性のセットを持っている場合、それらは論理的には2つの異なる要素であるようです。
この問題の回避策はJeni Tennison here によって提示されました。
W3C wikiの次のページをご覧ください。 Simple attribute implication and Attribute muttex