最近我有一个例子,在一个xml消息整数字段中包含前导零。不幸的是,这些零有相关性。有人可能会争辩为什么在架构定义中选择了整数。但那不是我的问题。我有点惊讶,在所有允许的情况下,导致零点。所以我查了一下specs这当然告诉我超类型是decimal。但是,正如预期的规范并没有真正告诉你为什么某些选择。所以我的问题是什么是允许所有前导零的基本原理?我的意思是数字通常没有前导零。为什么W3C XML Schema规范允许整数具有前导零?
在一个侧面说明我猜想增加对前导零的限制的唯一方法是一种模式。
最近我有一个例子,在一个xml消息整数字段中包含前导零。不幸的是,这些零有相关性。有人可能会争辩为什么在架构定义中选择了整数。但那不是我的问题。我有点惊讶,在所有允许的情况下,导致零点。所以我查了一下specs这当然告诉我超类型是decimal。但是,正如预期的规范并没有真正告诉你为什么某些选择。所以我的问题是什么是允许所有前导零的基本原理?我的意思是数字通常没有前导零。为什么W3C XML Schema规范允许整数具有前导零?
在一个侧面说明我猜想增加对前导零的限制的唯一方法是一种模式。
我的回忆是,XML模式工作组允许在XSD小数点前导零,因为它们以正常的十进制表示法允许:1,01,001,0001等全都用正常的数字表示法表示相同的数字。 (但我实际上并没有记得它曾经被讨论过,所以也许这只是我相信这是正确的做法的理由,而其他工作组成员有理由对此表示满意。)
建议问题的根源在于使用xsd:integer作为使用前缀零的数字的字符串的符号类型(例如在美国邮政编码中);我想你可能会过度慷慨地说,人们可能会争论这个决定。可以提出哪些可能的论据来支持这种明显错误的选择?
尽管数字通常没有前导零,但解析数字几乎总是允许前导零。
您不想完全禁止数字的前导零,因为您想要选项编写像0.12
这样的数字,而不仅仅是像.12
那样。由于您希望允许浮点数至少有一个前导零,因此只会允许一个前导零以及仅用于浮点数,这会有点限制。
有时数字确实有前导零,例如ISO8601格式的日期中的组件; 2014-05-02
。如果你想解析一个组件,如果允许前导零,这很方便,这样你就不必在解析之前编写额外的代码来移除它。
XML规范仅使用相同的规则集来解析数字,这些规则通常用于大多数格式和大多数编程语言。
我同意你的小数,但整数是一个子类型。这是一个更窄的,禁止小数点。 我不明白你的第二点。您是否说前导零与相关时使用xs:integer没有关系? – pjanssen 2014-11-07 15:59:32
是的,非常多:如果前导零相关,那几乎总是线索,该值是仅由十进制数字组成的字符串,并且正常的算术运算不适用。将两个邮政编码相乘意味着什么?要添加它们?比较它们以确定哪个值更大?所有明确的迹象表明,美国邮政编码是限制字母表上的字符串,而不是整数。 – 2014-11-24 18:55:18
谢谢你的回答。虽然我仍然觉得有点奇怪。但我想这是事实。 – pjanssen 2014-12-12 16:35:02