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