xs:带有模式限制和规范表示的整数验证问题

时间:2013-07-25 11:19:15

标签: xml xsd

我遇到问题,我根据第三方XML架构收到第三方XML文档。模式对xs:integer元素使用模式限制:

  <xs:simpleType name="NumericInteger_Length8To8">
    <xs:annotation>
      <xs:documentation xml:lang="en">Format limitations: n8</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:integer">
      <xs:pattern value="-?[0-9]{8,8}" />
    </xs:restriction>
  </xs:simpleType>

收到的XML显示8位数的整数,其中一个或多个前导数字为零:

<exampleCode>01234567</exampleCode>

当我解析这个XML时,它与模式匹配是有效的。接下来,我必须再次发送与文本消息相同的XML。我的XML渲染器发出整数的规范表示,因此没有前导零:

<exampleCode>1234567</exampleCode>

接收系统尝试验证我发送的消息并抛出错误,因为值1234567不再符合模式限制。

由于收到的XML在我的系统内部存储为XML文档,因此它被转换为实数整数,词法表示将丢失。接下来,当我渲染XML文档时,最初的词法表示显然已经消失,因此没有前导零。我没有看到解决这个问题的好方法。唯一的可能是我在内部改变XML模式,例如将类型定义设为xs:string,以便在没有任何更改的情况下传递它,但我宁愿不触及(第三方)模式。

我的问题是这是否是xs:integer的模式facet的有效使用,第三方XML模式是否是有效的模式? W3是否对模式的使用施加限制或指导?

我只能找到一些类似的问题,例如

http://technet.microsoft.com/en-us/library/ms190665(v=sql.90).aspx(规范表格......部分) http://mail-archives.apache.org/mod_mbox/xerces-j-users/200409.mbox/%3C20040909151622.GA9712@hamachi.dyndns.org%3E

1 个答案:

答案 0 :(得分:0)

这是完全合法的,但在我看来,这是非常糟糕的做法。

W3C不是制作指南或使用建议的业务,通常会将其留给其他人。