0

我有以下 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>

由于这个定义为“整数”数据类型,它去除了输入的前导零。eg:0078解析后变成78。

我们需要按原样传递输入,而不去除前导零,例如解析后0078 变为 0078 。

理想的解决方法是在限制基础中将整数更改为字符串。由于从其他团体购买,它是非首发。

有没有办法重新定义上述数据类型以获得所需的结果?

我该怎么做?

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

4

2 回答 2

1

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

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

于 2014-01-15T20:11:27.410 回答
1

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

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

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

我建议这样做只是因为不得不忍受这表明在您的环境中显然存在更大的问题需要处理,首先不一定了解如何正确地将 XML 与遗留系统桥接(当然,这是一个疯狂的猜测)。

于 2014-01-09T23:04:08.640 回答