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>
现在我得到了选择列表,或者匹配了模式。正是我想要的
更新:实际上可以将这两种简单类型定义为联合的子类
或通过成员类型
属性。谢谢您的提示!我要提到的是,它也适用于
中列出的
元素。顺便说一句,你应该将答案(甚至你自己的答案)标记为已接受,以明确它是正确的解决方案。