【问题标题】:XML schema validation works when restriction pattern is integer not for string当限制模式是整数而不是字符串时,XML 模式验证有效
【发布时间】:2017-12-01 04:16:24
【问题描述】:

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

我的字符串 XML 给了我

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

【问题讨论】:

    标签: java xml xsd schema xsd-validation


    【解决方案1】:

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

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

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

    【讨论】:

    • 我明白了,所以要修复它,我要么更改 xs:token 要么添加一个明确的 whiteSpace facet。您能否进一步解释一下“添加显式空白方面”的含义?还有更多关于“崩溃”的空白方面?
    • 或者如果有网站或书籍谈论这个?谢谢!
    • 我现在明白了。谢谢!
    • 我经常惊讶于人们在想到是否有书籍或网站可以提供帮助之前,能够使用其中一些技术取得多大的成就。
    猜你喜欢
    • 2020-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-24
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 2010-12-07
    相关资源
    最近更新 更多