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.
来实现与字符串相同的效果
或者更改模式以允许前导和尾随空格。
我的 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.
来实现与字符串相同的效果或者更改模式以允许前导和尾随空格。