我有一个问题,我根据第三方 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