【发布时间】:2015-01-15 13:13:36
【问题描述】:
我有以下 XSD 元素:
<xsd:element name="password">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<!-- Length check -->
<xsd:pattern value=".{9,12}" />
<!-- Format check -->
<xsd:pattern value=".*\d{2,}.*" />
<xsd:pattern value=".*[A-Z]{1,}.*" />
<xsd:pattern value=".*[a-z]{1,}.*" />
<xsd:pattern value=".*\p{Punct}.*" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
我想单独应用这些模式。它应该首先检查长度是否合适。如果是这样,请检查它是否至少有 2 个数字,依此类推。相反,它将所有表达式连接在一起并尝试将它们一起应用。
这是非常糟糕的设计。如果只允许一种模式<xsd:restriction> 应将<xsd:pattern> 的基数定义为1。允许多个<xsd:pattern> 给人的印象是支持多种模式。
有没有办法将多种模式应用于 XSD 元素?
【问题讨论】:
-
这是一个非常愚蠢的 XSD 设计决定。因为模式联合,您可以简单地在单个模式元素中使用
|分隔符或在为每个模式定义的简单类型上使用union。因此,更多的模式元素在逻辑上会期望模式相交!现在如何应用多种模式的唯一方法是对限制进行限制... 非常感谢您,XSD 设计师!!!跨度>