当限制模式为整数时,XML模式验证不适用于字符串

时间:2017-12-01 04:16:25

标签: java xml xsd schema xsd-validation

当模式为整数但不是字符串时,我的XML模式有效。

我的XML for string给了我

对于'oldPhone'类型的模式'[a-z]',

a不具有分面意义

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中的输入更改为整数时,它就可以正常工作。

1 个答案:

答案 0 :(得分:0)

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

它适用于xs:integer的原因是xs:integer具有隐式whiteSpace方面&#34; collapse&#34;,这会导致在应用模式匹配之前去除前导和尾随空格。您可以通过添加显式whiteSpace构面或使用xs:token作为基本类型而不是xs:string来实现与字符串相同的效果。

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