【问题标题】:Specifying multiple patterns in a restriction in a XSD在 XSD 的限制中指定多个模式
【发布时间】: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 个数字,依此类推。相反,它将所有表达式连接在一起并尝试将它们一起应用。

这是非常糟糕的设计。如果只允许一种模式&lt;xsd:restriction&gt; 应将&lt;xsd:pattern&gt; 的基数定义为1。允许多个&lt;xsd:pattern&gt; 给人的印象是支持多种模式。

有没有办法将多种模式应用于 XSD 元素?

【问题讨论】:

  • 这是一个非常愚蠢的 XSD 设计决定。因为模式联合,您可以简单地在单个模式元素中使用| 分隔符或在为每个模式定义的简单类型上使用union。因此,更多的模式元素在逻辑上会期望模式相交!现在如何应用多种模式的唯一方法是对限制进行限制... 非常感谢您,XSD 设计师!!!跨度>

标签: java xml regex xsd


【解决方案1】:

支持Multiple patterns per restriction,但不代表AND;他们的意思是或:

注意:包含多个 &lt;pattern&gt; 元素的 XML &lt;restriction&gt; 在集合中产生一个单一的·正则表达式·;这个·常规 expression· 是·正则表达式· 的“或”,它们是 &lt;pattern&gt; 元素的内容。

如果您希望同时应用多个正则表达式约束,请将它们写入单个 &lt;pattern&gt;

对于最小/最大长度限制,请考虑使用&lt;minLength&gt;&lt;maxLength&gt; 构面,而不是使用&lt;pattern&gt;

【讨论】:

  • 顺便说一句 OR 正是我需要允许多个语法用于同一值。
猜你喜欢
  • 2021-03-22
  • 2012-11-07
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 2019-06-15
  • 2014-10-08
相关资源
最近更新 更多