我有以下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 。
理想的解决方法是将限制基数中的整数更改为字符串。由于从其他团体购买,它不是首发。
有没有办法重新定义上述数据类型以获得理想的结果?
我该怎么做?
书籍和网似乎也没有太多帮助,所以我开始质疑这在理论上是否可行
答案 0 :(得分:0)
理论上,不应该;据我所知,没有开箱即用的XML序列化程序可以配置以获得您所描述的内容;前导零和填充空白是固定长度记录时代的残余(你的例子是COBOL字帖中的PIC 9(6))。
您可以创建自定义序列化程序,具体取决于您的平台。在我的店里,我认为这是完全错误的。
如果我被迫这样做,我会简单地使用XSD的“私有”变体(基于字符串),因此实现你身边的任何格式并完成它。私有意味着您不需要“共享”您在内部使用的XSD工件,以便与其他组一起生成您需要的任何代码;这可以以最小的开销创建您所指的“输入”。模式的“重构”可以用最小的开销来完成......
我建议它只是因为必须忍受这一点表明在您的环境中有明显更大的问题需要处理,首先不一定了解如何正确地将XML与遗留系统联系起来(一种疯狂的猜测,疗程)。
答案 1 :(得分:0)
听起来好像有问题的值实际上不是整数,而是仅由数字组成的字符串。如果78和078和0078是三个不同的值而不是三种命名相同值的方式,为什么模式表明它们是整数?
当然,您可以通过在词法空间中使用前导零或固定数字来限制xs:integer。但这不太可能对阅读文档的软件重新序列化或将值传递给其他软件的方式产生任何影响。