2014-10-29 83 views
1

最近我有一个例子,在一个xml消息整数字段中包含前导零。不幸的是,这些零有相关性。有人可能会争辩为什么在架构定义中选择了整数。但那不是我的问题。我有点惊讶,在所有允许的情况下,导致零点。所以我查了一下specs这当然告诉我超类型是decimal。但是,正如预期的规范并没有真正告诉你为什么某些选择。所以我的问题是什么是允许所有前导零的基本原理?我的意思是数字通常没有前导零。为什么W3C XML Schema规范允许整数具有前导零?

在一个侧面说明我猜想增加对前导零的限制的唯一方法是一种模式。

回答

3

我的回忆是,XML模式工作组允许在XSD小数点前导零,因为它们以正常的十进制表示法允许:1,01,001,0001等全都用正常的数字表示法表示相同的数字。 (但我实际上并没有记得它曾经被讨论过,所以也许这只是我相信这是正确的做法的理由,而其他工作组成员有理由对此表示满意。)

建议问题的根源在于使用xsd:integer作为使用前缀零的数字的字符串的符号类型(例如在美国邮政编码中);我想你可能会过度慷慨地说,人们可能会争论这个决定。可以提出哪些可能的论据来支持这种明显错误的选择?

+0

我同意你的小数,但整数是一个子类型。这是一个更窄的,禁止小数点。 我不明白你的第二点。您是否说前导零与相关时使用xs:integer没有关系? – pjanssen 2014-11-07 15:59:32

+0

是的,非常多:如果前导零相关,那几乎总是线索,该值是仅由十进制数字组成的字符串,并且正常的算术运算不适用。将两个邮政编码相乘意味着什么?要添加它们?比较它们以确定哪个值更大?所有明确的迹象表明,美国邮政编码是限制字母表上的字符串,而不是整数。 – 2014-11-24 18:55:18

+0

谢谢你的回答。虽然我仍然觉得有点奇怪。但我想这是事实。 – pjanssen 2014-12-12 16:35:02

2

尽管数字通常没有前导零,但解析数字几乎总是允许前导零。

您不想完全禁止数字的前导零,因为您想要选项编写像0.12这样的数字,而不仅仅是像.12那样。由于您希望允许浮点数至少有一个前导零,因此只会允许一个前导零以及仅用于浮点数,这会有点限制。

有时数字确实有前导零,例如ISO8601格式的日期中的组件; 2014-05-02。如果你想解析一个组件,如果允许前导零,这很方便,这样你就不必在解析之前编写额外的代码来移除它。

XML规范仅使用相同的规则集来解析数字,这些规则通常用于大多数格式和大多数编程语言。

+0

我同意你在小数的问题。但整数是小数的子类型。根据定义,具有前导零的唯一整数本身就是零。 您在符合解析器的问题上有一点意义。虽然对于整数我不能看到指定窄于解析器可以处理的问题。 – pjanssen 2014-11-07 15:45:20

+0

@pjanssen:这会导致解析规则不一致,例如'01'是一个有效的浮点数,但不是有效的整数值。 – Guffa 2014-11-07 15:59:51

+0

但是不能预期xs:整数字段将只包含整数并且不包含小数/浮点数。虽然这可能是我对此事缺乏教育的说法。 – pjanssen 2014-11-07 16:03:51