我们如何使integer数据类型的行为类似XML/XSD中的String数据类型



我有以下XSD/XML类型定义。它已被许多业务部门/应用程序使用。

<xsd:simpleType name="NAICSCodeType">
<xsd:annotation>
<xsd:documentation>NAICSCode</xsd:documentation>
</xsd:annotation>
<xsd:restriction base="xsd:integer">
<xsd:minInclusive value="000001"/>
<xsd:maxInclusive value="999000"/>
</xsd:restriction>
</xsd:simpleType>

由于这个定义为"整数"数据类型,它去掉了输入的前导零例如:0078解析后变为78

我们需要按原样传递输入,而不剥离前导零,例如0078在解析后变成0078

理想的修复方法是将限制基中的整数更改为字符串。由于受到其他团体的支持,这是不可能的。

有没有办法为所需结果重新定义上述数据类型

我该怎么做

书籍和网络似乎也没有太大帮助,所以我开始质疑理论上是否可行

听起来好像有问题的值实际上不是整数,而是仅由数字组成的字符串。如果78、078和0078是三个不同的值,而不是用三种方法命名同一个值,为什么模式会说它们是整数?

当然,您可以通过在词法空间中要求前导零或固定数量的数字来限制xs:integer。但这不太可能对读取文档的软件重新序列化文档或将值传递给其他软件的方式产生任何影响。

理论上不应该有;而且据我所知,没有现成的XML序列化程序可以配置为获得您所描述的内容;前导零和填充空白是固定长度记录时代的残余(您的示例是COBOL副本中的PIC 9(6))。

根据您的平台,您可能能够创建自定义序列化程序。在我的店里,我会认为这完全是错误的。

如果我被迫这样做,我只会使用XSD的"私有"变体(基于字符串),因此在你这边实现任何格式并使用它。私有意味着你不需要与其他组"共享"你的XSD工件,你在内部使用它来生成你需要的任何代码;这可以以最小的开销创建您所指的"输入"。架构的"重构"可以用最小的开销来完成。。。

我之所以建议这样做,仅仅是因为必须忍受这一点表明,在您的环境中,显然还有更大的问题需要处理,首先不一定要理解如何正确地将XML与遗留系统连接起来(当然,这是一个猜测)。

相关内容

  • 没有找到相关文章

最新更新