如何定义允许枚举值或模式匹配的模式限制?

时间:2012-06-20 21:19:49

标签: regex xsd

我定义的simpleType restriction可以是enumeration的值,也可以是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>

但由于某个值无法与两个约束匹配,因此失败。如果我修改模式以允许任何枚举值,那么如果只匹配模式,它将失败。

1 个答案:

答案 0 :(得分:9)

原来我需要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属性。