5

我想为 XSD 类型创建一个限制,只允许一个大小为 0 到 64 的元素、一个点和另一个大小为 0 到 64 的元素。我试过这个,但没有成功。

<xs:simpleType name="myString_Type">
        <xs:restriction base="xs:string">
            <xs:pattern value="^([a-zA-Z\-]){0-64}.$([a-zA-Z\-]){0-64}"/>
        </xs:restriction>
</xs:simpleType>

谢谢。

4

1 回答 1

4

^并且$不用于 XSD 中的正则表达式 - 它始终从头到尾匹配,就好像它们在那里一样。因此,只需省略它们:

[a-zA-Z\-]{0,64}\.[a-zA-Z\-]{0,64}

并转义.(或使用 NullUserException 所说的字符类)。

来自XML Schema 第 2 部分:数据类型规范:

与一些流行的正则表达式语言(包括那些由 Perl 和标准 Unix 实用程序定义的语言)不同,这里定义的正则表达式语言隐式地将所有正则表达式锚定在头部和尾部,因为·pattern· 中正则表达式最常见的用途是匹配整个文字。

他们的例子是使用A.*Z^A.*Z$

因为^and$不是特殊字符,它只会尝试在您的 xml 文档中匹配它们。

据说unix是不兼容的正则表达式语法的集合,所以他们不遵循unix标准,就是遵循unix传统。


您可以在以下位置测试此示例:http : //www.utilities-online.info/xsdvalidation/(来自 NullUserException 的测试实例)

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="eg" type="myString_Type"/>

  <xs:simpleType name="myString_Type">
    <xs:restriction base="xs:string">
      <xs:pattern value="[a-zA-Z\-]{0,64}\.[a-zA-Z\-]{0,64}"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

<eg>something.something-else</eg>
于 2012-11-12T17:01:47.050 回答