web-dev-qa-db-ja.com

XSD-2つの属性のいずれかが必要ですか?

XSDで2つの属性のいずれかが必要であることを指定する方法はありますか?

たとえば、次のような定義があります。

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

これらの少なくとも1つが必要であると定義できるようにしたいと思います。それは可能ですか?

57
user92454

いいえ、属性でそれを行うことはできないと思います。あなたは2つの<xs:element><xs:choice>-しかし、属性については、同等の構成要素はありません、私は恐れています。

42
marc_s

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>
23
jeremiah jahn

Marcは正解です... XSDのxs:choice親要素内にxs:attribute子要素を含めることはできません。

論理は、要素の2つのインスタンスが相互に排他的な属性のセットを持っている場合、それらは論理的には2つの異なる要素であるようです。

この問題の回避策はJeni Tennison here によって提示されました。

9
Cerebrus

W3C wikiの次のページをご覧ください。 Simple attribute implication and Attribute muttex

5
Ondřej Doněk