2011-08-17 45 views
1

我正在嘗試編寫模式,並且想要將值或元素限制爲枚舉列表或鍵引用。這可能嗎?即,即時我的模式我有XML模式 - 將元素限制爲枚舉或鍵參考

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

我的問題是我如何組織架構元素定義爲<a>

在此先感謝您的幫助。

回答

1

創建另一個指定的簡單類型,允許其他枚舉值(「anEnum」和「anotherEnum」),就像您創建「TypeEnum」類型一樣。然後使用<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