2009-04-18 42 views
53

XSDに2つの属性のいずれかを指定する方法はありますか?XSD - 2つの属性のうちの1つが必要ですか?

たとえば、私はこのような定義を持っています。

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

これらのうち少なくとも1つが必須であることを定義できます。それは可能ですか?

答えて

40

いいえ、私はあなたが属性でそれを行うことはできないと思います。 2つの< xs:element >を< xs:choice >にラップすることができますが、属性の場合、同等の構造はありません。恐れがあります。

マルク・

9

マルクは全く正しいです...あなたは、xsを持つことができません:XS内の属性の子要素:XSDにおける選択肢の親要素を。

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

これの回避策は、Jeni Tennison hereによって示されています。

20

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> 
+1

いいソリューションですが、2012年にリリースされてから(http://www.w3.org/TR/xmlschema11-1/)、.NET 4.0(2010年リリース)を使用していますサポートされていません。それは.NET 4.5でサポートされていますか?サンプルクラス:https://msdn.microsoft.com/en-us/library/swxzdhc0(v=vs.110).aspx –

0

この例では、「employee」という名前の要素を定義しています。この要素には、「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> 
+0

ここであなたのソースを参照してください。 http://www.w3schools.com/xml/el_choice.asp – Reisclef

関連する問題