XML 当限制模式是整数而不是字符串时,模式验证有效

XML schema validation works when restriction pattern is integer not for string

我的 XML 架构在模式为整数但不适用于字符串时有效。

我的 XML 字符串给了我

a 对于类型 'oldPhone'[=17 的模式 '[a-z]' 不是小平面有效的=]

XML:

<phone xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="./phone.xsd">

  <oldPhone>
    a
  </oldPhone>
</phone>

XSD:

<xs:schema version="1.0"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">

    <xs:simpleType name="oldPhone">
     <xs:restriction base="xs:string">
      <xs:pattern value="[a-z]"/>
       </xs:restriction>
      </xs:simpleType>

    <xs:element name="phone">
        <xs:complexType>
            <xs:sequence>
                <xs:element name = "oldPhone" type = "oldPhone"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>

当我将 xs:string 替换为 xs:integer,从 [a-z] 更改为 [0-9] 并将 XML 中的输入更改为整数时,它的工作原理很简单。

由于值周围有空格,您的模式匹配失败。

它适用于 xs:integer 的原因是 xs:integer 有一个隐含的 whiteSpace 方面 "collapse",这导致在应用模式匹配之前去除前导和尾随空白。您可以通过添加显式 whiteSpace 方面或使用 xs:token 作为基本类型而不是 xs:string.

来实现与字符串相同的效果

或者更改模式以允许前导和尾随空格。