2011-08-17 11 views
1

スキーマを作成しようとしていますが、値または要素を列挙型リストまたはキー参照のいずれかに制限したいとします。これは可能ですか?すなわち、私の質問はどのように私はすべての助けを事前に<a>XMLスキーマ - enumまたはkeyrefに要素を制限する

感謝のスキーマ要素の定義を構築んです、私は

<xsd:simpleType name="TypeEnum"> 
     <xsd:restriction base="xsd:string"> 
     <xsd:enumeration value="uint8" /> 
     <xsd:enumeration value="uint16" /> 
     <xsd:enumeration value="uint32" /> 
     <xsd:enumeration value="uint64" /> 
     </xsd:restriction> 
    </xsd:simpleType> 

を持っており、私のXMLに私は

<root> 
    <a>anEnum<a> <!-- This value should be restricted to either anEnum, anotherEnum or anything in TypeEnum --> 
    <AdditionalTypes> 
     <Enum Name="anEnum" /> 
     <Enum Name="anotherEnum" /> 
    </AdditionalTypes> 
</root> 

を持っている私のスキーマをイム。

答えて

1

"TypeEnum"タイプを作成したのと同じように、残りの列挙値( "anEnum"および "anotherEnum")を可能にする別の名前付き単純型を作成します。次に、これらのタイプを組み合わせるには<xsd:union>を使用し、<a>にこの組み合わせタイプを使用するように設定します。

コード例

<xsd:simpleType name="TypeEnum"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:enumeration value="uint8" /> 
     <xsd:enumeration value="uint16" /> 
     <xsd:enumeration value="uint32" /> 
     <xsd:enumeration value="uint64" /> 
    </xsd:restriction> 
</xsd:simpleType> 

<xsd:simpleType name="TypeAdditionalEnum"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:enumeration value="anEnum" /> 
     <xsd:enumeration value="anotherEnum" /> 
    </xsd:restriction> 
</xsd:simpleType> 

<xsd:simpleType name="TypeUnionEnum"> 
    <xsd:union memberTypes="TypeAdditionalEnum TypeEnum" /> 
</xsd:simpleType> 

<xsd:element name="a" type="TypeUnionEnum" /> 
+0

AdditionalTypesが動的であることを意味しませんか? .xmlファイルにさらにタイプを追加するとどうなりますか? – unhammer

関連する問題