2014-10-29 21 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