小数点可接受的 xsd 模式?

Seb*_*oek 5 xsd design-patterns decimal pad

我们有一个请求来实现我们的网络服务响应,以便 xsd:decimal 小数位数在模式指示时不够长时将被零填充。我想知道这是否是一个合理的请求,以及 xsd:decimal 是否应该与这些模式一起使用。根据他们的规范,这是 xsd 的相关部分:

<xsd:simpleType>
   <xsd:restriction base="xsd:decimal">
       <xsd:totalDigits value="14"/>
       <xsd:fractionDigits value="2"/>
       <xsd:pattern value="[\-+]?[0-9]{1,12}[.][0-9]{2}"/>
   </xsd:restriction>
</xsd:simpleType>
Run Code Online (Sandbox Code Playgroud)

因此,fractionDigits 设置为 2,这意味着精度最多可以为 2 位。根据http://zvon.org/xxl/XMLSchemaTutorial/Output/ser_types_st2.html,如果小数位数较少(例如对于像 5.1 这样的数字),也可以

但是根据模式 {2} 应该总是有 2 个小数位。

我们正在开发一个通用的应用程序开发平台 (Mendix),并且无法提前知道小数将用于什么(货币、pH 值、距离等)。这个案例来自一个使用我们平台的特定项目,但通常我们不知道正在传输什么样的数据。我们可以决定在这方面只遵循 WSDL,其中规定它应该有 2 个小数位。但是我们对它的实现必须非常通用。

没有任何内容说明这些小数位数应该填充什么,甚至我们应该填充而不是完全省略这个小数。理论上我们可以决定用 5 填充直到它与模式匹配。据我所知,模式很少使用,如果是的话,它用于密码之类的东西。XSD 规范虽然含糊不清,因此如果有人能够阐明这是否是 XSD 的有效使用以及我们决定用 0 填充是否有意义,我们将不胜感激。

Pet*_*dea 2

实际上,我的试金石是从直接涉及的技术堆栈的角度来看待这个问题,或者更好的是,从主流的角度来看待这个问题。

我可以想到 Java 上的 JAXB 或 .NET 上的 xsd/svcutil/etc.exe;使用值 1 针对此模式片段对这些非常常见的工具进行快速测试将无法生成有效的 XML。这会让开发人员争先恐后地进行各种自定义,以使其按照 XSD 模式工作。痛苦、高昂的开发和维护成本......

这同样适用于 XSLT;需要手动格式化输出...底线,XSD 模式不能用于“自动”格式化的机器...我还没有看到这样的事情...

我还认为这样的要求是不合理的,我个人认为在描述交换的数据时应该将其视为反模式。既然没有绝对,可以想象,一定有例外;我想不起来,但必须探究为什么向你提出这样的要求;然后我会尝试找到一个不涉及这种模式的解决方案......