XSDに2つの属性のいずれかを指定する方法はありますか?XSD - 2つの属性のうちの1つが必要ですか?
たとえば、私はこのような定義を持っています。
<xs:attribute name="Name" type="xs:string" use="optional" />
<xs:attribute name="Id" type="xs:string" use="optional" />
これらのうち少なくとも1つが必須であることを定義できます。それは可能ですか?
XSDに2つの属性のいずれかを指定する方法はありますか?XSD - 2つの属性のうちの1つが必要ですか?
たとえば、私はこのような定義を持っています。
<xs:attribute name="Name" type="xs:string" use="optional" />
<xs:attribute name="Id" type="xs:string" use="optional" />
これらのうち少なくとも1つが必須であることを定義できます。それは可能ですか?
いいえ、私はあなたが属性でそれを行うことはできないと思います。 2つの< xs:element >を< xs:choice >にラップすることができますが、属性の場合、同等の構造はありません。恐れがあります。
マルク・
マルクは全く正しいです...あなたは、xsを持つことができません:XS内の属性の子要素:XSDにおける選択肢の親要素を。
論理は、要素の2つのインスタンスが相互排他的な属性セットを持つ場合、それらは論理的に2つの異なる要素であると考えられます。
これの回避策は、Jeni Tennison hereによって示されています。
あなたはW3Cのwiki上で、このページをご覧ください:Simple attribute implicationとAttribute muttex
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>
この例では、「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>
ここであなたのソースを参照してください。 http://www.w3schools.com/xml/el_choice.asp – Reisclef
いいソリューションですが、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 –