假设我的属性类型允许(0,1,2,3)的所有组合的任何值,即:
<xs:simpleType name="fourValues">
<xs:restriction base="xs:string">
<xs:enumeration value="0" />
<xs:enumeration value="1" />
<xs:enumeration value="2" />
<xs:enumeration value="3" />
<xs:enumeration value="0,1" />
<xs:enumeration value="0,2" />
<xs:enumeration value="0,3" />
<xs:enumeration value="0,4" />
<xs:enumeration value="1,2" />
<xs:enumeration value="1,3" />
<xs:enumeration value="2,3" />
<xs:enumeration value="0,1,2" />
<xs:enumeration value="0,1,3" />
<xs:enumeration value="0,2,3" />
<xs:enumeration value="1,2,3" />
<xs:enumeration value="0,1,2,3" />
</xs:restriction>
</xs:simpleType>
现在如果我想定义一个与上面相同的类型,但也允许空白(null)值,如下所示:
<xs:simpleType name="fourValues-null">
<xs:restriction base="xs:string">
<xs:enumeration value="" />
<xs:enumeration value="0" />
<xs:enumeration value="1" />
<xs:enumeration value="2" />
<xs:enumeration value="3" />
<xs:enumeration value="0,1" />
<xs:enumeration value="0,2" />
<xs:enumeration value="0,3" />
<xs:enumeration value="0,4" />
<xs:enumeration value="1,2" />
<xs:enumeration value="1,3" />
<xs:enumeration value="2,3" />
<xs:enumeration value="0,1,2" />
<xs:enumeration value="0,1,3" />
<xs:enumeration value="0,2,3" />
<xs:enumeration value="1,2,3" />
<xs:enumeration value="0,1,2,3" />
</xs:restriction>
</xs:simpleType>
是否存在某种类型的继承,以避免重复两种类型的枚举?
我有两个使用它们的属性:
<xs:attribute name="readingSources" type="fourValues" use="required" />
<xs:attribute name="targetFlip" type="fourValues-null" use="required">
我尝试制作targetFlip
属性type="fourValues"
和use="optional"
,但它说限制失败了。
答案 0 :(得分:1)
一种方法是定义允许额外值作为顶级类型的新类型,然后将现有类型重新定义为对其的限制,并使用额外方面,例如<minLength value="1"/>
。< / p>
第二种方法是将新类型定义为现有类型的联合类型,以及仅允许零长度字符串的类型。
第三种方式(我通常更喜欢的方式,但取决于您是仅将模式用于验证还是数据绑定)是将新类型定义为列表类型,将现有类型作为其项类型,并将maxLength设置为1。