2011-08-17 32 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