XSD类型限制继承?

时间:2017-07-13 05:13:54

标签: xml validation xsd

假设我的属性类型允许(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",但它说限制失败了。

1 个答案:

答案 0 :(得分:1)

一种方法是定义允许额外值作为顶级类型的新类型,然后将现有类型重新定义为对其的限制,并使用额外方面,例如<minLength value="1"/>。< / p>

第二种方法是将新类型定义为现有类型的联合类型,以及仅允许零长度字符串的类型。

第三种方式(我通常更喜欢的方式,但取决于您是仅将模式用于验证还是数据绑定)是将新类型定义为列表类型,将现有类型作为其项类型,并将maxLength设置为1。