我已经开始创建XSD,并在xs:integer
和xs:int
的几个示例中找到了。
xs:integer
和xs:int
之间有什么区别?
什么时候应该使用xs:integer
?
我何时应该使用xs:int
?
答案 0 :(得分:101)
不同之处如下:
xs:int
是带符号的32位整数。
xs:integer
是整数无界值。
详见https://web.archive.org/web/20151117073716/http://www.w3schools.com/schema/schema_dtypes_numeric.asp
例如,XJC(Java)为Integer
生成xs:int
,为BigInteger
生成xs:integer
。
底线:如果您想跨平台工作并确保您的数字通过而没有问题,请使用xs:int
。
如果您想要更大的数字 - 请使用xs:long
代替xs:integer
(它将生成Long
)。
答案 1 :(得分:28)
xs:integer类型是xs:decimal的限制,其中fractionDigits facet设置为零,并且词汇空间禁止小数点和尾随零,否则这些小数将是合法的。它没有最小值或最大值,但是在有限大小的机器中运行的实现不需要能够接受任意大或小的值。 (它们需要支持16位十进制数字。)
xs:int类型是xs:long的限制,maxInclusive facet设置为2147483647,minInclusive facet设置为-2147483648。 (如您所见,它可以方便地插入到双补码32位有符号整数字段中; xs:long适合64位有符号整数字段。)
通常的规则是:使用符合您想说的内容。如果对元素或属性的约束是其值必须是整数,则xs:integer简洁地说明。如果约束是该值必须是可以在二进制补码表示中以最多32位表示的整数,请使用xs:int。 (次要但有时重要的一个问题是,您的工具链是否与其他工具链相比更好。对于比您的工具链更长寿的数据,最好先收听数据;对于仅用于提供工具的数据链,如果你改变工具链就没有意义,没有理由不去聆听工具链。)
答案 2 :(得分:6)
我只想添加一些对某些人来说很重要的迂腐:说xs:int“是一个带符号的32位整数是不正确的。这种形式的词意味着在二进制数字计算机内的存储器(或寄存器等)中的实现。 XML是基于字符的,并且将最大32位带符号值实现为“2147483647”(当然我的引号),这超过了32位!这是真的是xs:int是(间接)xs:integer的限制,它将最大和最小允许值设置为与带符号位的32位整数的相应实现强制限制相同。