属性値に基づいて、単一タイプのノードに対して特定のXSD検証を行う必要があります。XSD1.1とxsd:alternativeは私の友達です。
しかし、次の(最も単純な)例を使用します。
<xsd:complexType name="BaseType">
<xsd:attribute name="type"
type="xsd:string"
use="required" />
</xsd:complexType>
<xsd:complexType name="NamedType">
<xsd:complexContent>
<xsd:extension base="BaseType">
<xsd:attribute name="path"
type="xsd:string"
use="required" />
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="TaggedType">
<xsd:complexContent>
<xsd:extension base="BaseType">
<xsd:attribute name="tag"
type="xsd:string"
use="required" />
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:element name="MyRoot">
<xsd:complexType>
<xsd:choice minOccurs="1">
<xsd:element name="MyType"
type="BaseType">
<xsd:alternative test="@type='Named'"
type="NamedType"/>
<xsd:alternative test="@type='Tagged'"
type="TaggedType"/>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
XSDをロードしているとき(Qt 4.7.4のQXmlSchemaクラスを使用していますが、これはQtの問題ではなくXSDの問題だと思います)、次のエラーが発生します。
不明な場所のエラーXSDError、行93、列74:代替要素のテスト属性に無効なコンテンツが含まれています:{@ type='Named'}。
私はまた、代替のテスト条件で「@type eq'Named'」を試しましたが、他の多くの賢明なバリエーションとあまり賢明でないバリエーション...合格しませんでした:/
どんな助けでも大歓迎です!ありがとう!