5

我们有一个请求来实现我们的 web 服务响应,以便 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>

所以 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 填充是否有意义,我们将不胜感激。

4

2 回答 2

2

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

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

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

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

于 2012-02-23T16:07:23.670 回答
1

它实际上取决于该特定十进制值的参数..

XML 是传输和存储数据的首选之一,它可以包含各种数据。我在这里选择两个例子:

  1. 数据就是货币,在这里我的建议是强制[0-9]*[.][0-9]{2}..为此我们的客户端数据恢复软件被设计为填充 0。

  2. 数据是化学品的 pH 值。这里小数点后一位是强制性的。[0-1][0-9][.][0-9]

所以这一切都取决于我们所指的对象..除非它真的有必要,否则强制模式是不公平的:)

于 2012-02-23T15:05:23.057 回答