0

我有一个问题,我根据第三方 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 位整数,其中 1 个或多个前导数字为零:

<exampleCode>01234567</exampleCode>

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

<exampleCode>1234567</exampleCode>

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

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

我的问题是这是否是 xs:integer 的模式方面的有效使用,那么第三方 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

4

1 回答 1

0

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

W3C 不从事制定指南或使用建议的业务,它通常将其留给其他人。

于 2013-07-25T13:59:12.660 回答