2008-11-18 65 views
2

我使用W3C XML Schema(不是我寫的)。一個工具,xmllint, 拒絕使用模式:W3C XML Schema和maxOccurs的最大整數

traceroute.xsd:658: element element: Schemas parser error : Element 
'{http://www.w3.org/2001/XMLSchema}element', attribute 'maxOccurs': The value 
'4294967295' is not valid. Expected is '(xs:nonNegativeInteger | unbounded)'. 

4294967295是2^32-1所以,很顯然,xmllint實現整數與 簽署32位號碼,這還不夠。

xmllint是對不對?該標準顯然是不限制的 整數大小:

http://www.w3.org/TR/2004/REC-xmlschema-1-20041028/structures.html#p-max_occurs http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/datatypes.html#nonNegativeInteger

非負 的價值空間是無窮集合{0,1,2,...}。

因此,實現者應該使用無限的整數...

什麼是最好的做法?

應該使用bigint還是類似的東西? ( xmllint是錯誤的。雖然也許作爲maxOccurs屬性的「技術」正確使用(在這種情況下,我將問題報告給架構 作者。)

回答

4

,這種用法是不(IMO)的maxOccurs如何意欲用過的。

它看起來像模式編寫器意圖表示該元素可能發生任何次數,在這種情況下,定義的正確值將是unbounded

當前定義暗示的是,消耗此架構的系統對於元素計數高達4294967295的行爲將完全正確,但對於任何更大的元素都將失敗。

我想這是一個技術性的要求,很有意義 - 許多系統將int32編碼爲元素的最大數目,所以在理想的世界中,您可能想要強制執行此限制,但我認爲它不是真的是一個合理的或有用的東西,試圖捕捉現實世界中的模式。

另外,如果你發送了很多元素,那麼XML可能是錯誤的數據格式。

我建議架構作者使用unbounded屬性值,或使用實際上符合使用此XML的系統的限制和要求的值。

1

最後,架構已被其作者修改。它已被髮布在RFC 5388,它現在包含:

 <xs:element maxOccurs="2147483647" minOccurs="0" 
       name="Measurement"> 
     <xs:complexType> 
     <xs:sequence> 
+0

因此是_「2147483647」_maxofccurs可以處理的最大值? maxOccurs可以處理的最大值是多少? @bortzmeyer – javaPlease42 2013-12-03 14:42:47