我已经开始创建 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) 为 xs:int
生成 Integer
,为 xs:integer
生成 BigInteger
。
底线:如果您想跨平台工作,请使用 xs:int
,并确保您的号码顺利通过。如果您想要更大的数字 – 使用 xs:long
而不是 xs:integer
(它将生成到 Long
)。
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。 (一个次要但有时重要的问题是,您的工具链与一个工具链一起工作是否比另一个更好。对于比您的工具链寿命更长的数据,首先听取数据是明智的;对于仅用于提供工具的数据链,如果你改变你的工具链,这将是没有意义的,没有理由不听工具链。)
我只想添加一个对某些人可能很重要的迂腐注释:说 xs:int “是”一个有符号的 32 位整数是不正确的。这种形式的词意味着在二进制数字计算机的内存(或寄存器等)中实现。 XML 是基于字符的,并且会将最大 32 位有符号值实现为“2147483647”(当然是我的引号),这比 32 位要多得多!正确的是 xs:int 是(间接地)对 xs:integer 的限制,它将最大和最小允许值设置为与带有符号位的 32 位整数的相应实现强加限制相同。
, but not
xs:int` 或xs:long
。