私はかなり単純なXML構造を持っています。XML Schema(XSD 1.1)他の属性に依存する動的列挙
<list... >
<members>
<person type="NAME_WITH_A">
<name>Ada</name>
</person>
<person type="NAME_WITH_B">
<name>Berta</name>
</person>
</members>
</list>
私は、要素「人の属性「タイプ」の値に応じて、名前の特定のセットに「名前」の値を制限したいです。
ので、例えば、<person type="NAME_WITH_A">
場合は、名前だけ
- アンナ
- エイダ
- アマンダ
有効である必要があり、 <person type="NAME_WITH_B">
場合、としてのみ
- ベルタ、
- ボブ
- ブレット
は<name>
要素の有効な値でなければなりません。
<xs:schema xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning" vc:minVersion="1.1" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="list">
</xs:element>
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
</xs:sequence>
<xs:attribute name="type" use="required">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="NAME_WITH_A"/>
<xs:enumeration value="NAME_WITH_B"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="name">
<xs:alternative test="@type='NAME_WITH_A'" type="choice_names_A"/>
<xs:alternative test="@type='NAME_WITH_B'" type="choice_names_B"/>
<xs:alternative type="xs:error"/>
</xs:element>
<xs:element name="members">
<xs:complexType>
<xs:sequence>
<xs:element ref="person" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="choice_names_A">
<xs:restriction base="xs:string">
<xs:enumeration value="Anna"/>
<xs:enumeration value="Ada"/>
<xs:enumeration value="Amanda"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="choice_names_B">
<xs:restriction base="xs:string">
<xs:enumeration value="Berta"/>
<xs:enumeration value="Bob"/>
<xs:enumeration value="Bret"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
本当に私のために動作しません:
はthis questionによると、私は、次のスキーマを作成しました。私はtest="@type='NAME_WITH_A'"
を別の要素の@type属性に参照すると、常にfalseであるという気持ちがあります。
私もtest="list/members/person/@type='NAME_WITH_A'"
を試しましたが、成功しませんでした。