7

我正在定义 a simpleType,它restriction要么是来自 a 的值,要么是与enumerationa 匹配的值pattern。我意识到我可以做到这一切,pattern但我想拥有enumeration提供的选择列表。

这是我期望能够做到的:

<xs:simpleType name="both">
  <xs:restriction base="xs:string">
    <xs:enumeration value="one" />
    <xs:enumeration value="two" />
    <xs:pattern value="[0..9]+" />
  </xs:restriction>
<xs:simpleType>

但这失败了,因为一个值不能同时匹配这两个约束。如果我修改模式以允许任何枚举值,那么如果仅与模式匹配,它将失败。

4

1 回答 1

11

原来我需要一个union. 将枚举类型定义为单独的类型:

<xs:simpleType name="enumeration">
  <xs:restriction base="xs:string">
    <xs:enumeration value="one" />
    <xs:enumeration value="two" />

  </xs:restriction>
<xs:simpleType>

然后将目标类型创建为枚举:

<xs:simpleType name="both">
  <xs:union memberTypes="enumeration">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:pattern value="[0..9]+" />
      </xs:restriction>
    </xs:simpleType>
  </xs:union>
</xs:simpleType>

所以现在我得到了选择列表,或者匹配模式。正是我想要的!

更新:实际上可以将两种简单类型定义为union或通过memberTypes属性的子级。

于 2012-06-20T21:44:29.470 回答