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

Regex 如何定义允许枚举值或模式匹配的模式限制?,regex,xsd,Regex,Xsd,我正在将具有限制的simpleType定义为枚举中的值或与模式匹配的值。我意识到我可以从模式完成这一切,但我想拥有枚举提供的选择列表 这就是我希望能够做到的: <xs:simpleType name="both"> <xs:restriction base="xs:string"> <xs:enumeration value="one" /> <xs:enumeration value="two" /> <xs:p

我正在将具有
限制的
simpleType
定义为
枚举中的值或与
模式匹配的值。我意识到我可以从
模式
完成这一切,但我想拥有
枚举
提供的选择列表

这就是我希望能够做到的:

<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>


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

结果表明我需要一个
联合。将枚举类型定义为单独的类型:

<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>

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


更新:实际上可以将这两种简单类型定义为
联合的子类
或通过
成员类型
属性。

谢谢您的提示!我要提到的是,它也适用于
中列出的
元素。顺便说一句,你应该将答案(甚至你自己的答案)标记为已接受,以明确它是正确的解决方案。