XSD:xs:integer和xs:int之间有什么区别?

XSD:xs:integer和xs:int之间有什么区别?,xsd,Xsd,我已经开始创建XSD,并在两个示例中找到了xs:integer和xs:int xs:integer和xs:int之间有什么区别? 何时应该使用xs:integer? 当我应该使用xs:int?时,区别如下: xs:int是一个有符号的32位整数。 xs:integer是一个整数无界值。 有关详细信息,请参阅 例如,XJC(Java)为xs:int生成Integer,为xs:Integer生成biginger 底线是:如果您想跨平台工作,请使用xs:int,并确保您的数字能够顺利通过。 如果您想要

我已经开始创建XSD,并在两个示例中找到了
xs:integer
xs:int

xs:integer
xs:int
之间有什么区别? 何时应该使用
xs:integer

当我应该使用
xs:int

时,区别如下:
xs:int
是一个有符号的32位整数。
xs:integer
是一个整数无界值。 有关详细信息,请参阅 例如,XJC(Java)为
xs:int
生成
Integer
,为
xs:Integer
生成
biginger

底线是:如果您想跨平台工作,请使用
xs:int
,并确保您的数字能够顺利通过。 如果您想要更大的数字,请使用
xs:long
而不是
xs:integer
(它将被生成为
long
)。

该类型是对xs:decimal的限制,fractionDigits方面设置为零,并且具有禁止小数点和尾随零的词法空间,否则是合法的。它没有最小值或最大值,尽管在有限大小的机器中运行的实现不需要能够接受任意大或小的值。(它们需要支持16位十进制数字的值。)

该类型是xs:long的限制,maxInclusive方面设置为2147483647,minInclusive方面设置为-2147483648。(如您所见,它可以方便地放入两个补码的32位有符号整数字段中;xs:long适合于64位有符号整数字段。)


通常的规则是:使用一个符合你想说的。如果元素或属性的约束条件是其值必须是整数,则xs:integer简洁地说明了这一点。如果约束条件是该值必须是一个整数,在twos补码表示中最多可以用32位来表示,则使用xs:int。(第二个但有时很重要的问题是,您的工具链是否与其中一个工具链协同工作得更好。对于比您的工具链寿命更长的数据,明智的做法是首先听取数据;对于仅为提供工具链而存在的数据,如果您更改工具链,这些数据将毫无意义,没有理由不这样做听一下工具链。)

我只想补充一点对某些人来说可能很重要的迂腐:说xs:int“是”一个有符号的32位整数是不正确的。这种形式的字意味着内存(或寄存器等)中的实现在二进制数字计算机中.XML是基于字符的,将实现最大32位有符号值“2147483647”(当然是我的引号),这比32位多得多!真正的是xs:int是(间接的)xs:integer的一种限制,它将允许的最大值和最小值设置为与带有符号位的32位整数的相应实现强制限制相同。

Saxon 9 HE(家庭版)仅支持“xs:integer
,但不支持
xs:int`或
xs:long
。W3C学校不具有权威性。为什么不引用正确的定义?例如,声明integer绑定到+/-9223372036854775808。此外,跨平台与(兼容)无关xml。@Nishi,听起来像是Saxon 9,他不符合。阅读页面,似乎只有EE版本符合。@PaulHargreaves,Saxon 9他是(据我所知)完全一致的XSLT处理器:xs:int不在基本XSLT处理器的类型集中。如果您是说它不是一致的XSD处理器,这是正确的,但有误导性:它根本不是XSD处理器。@PaulHargreaves,您关于+/-9223372036854775808是“xs:integer”的最大值的评论是错误的:XMLSchema.XSD定义了“xs:long”是对“xs:integer”的限制"对于+/-9223372036854775808,不能保证使用XSD验证的源信息集以字符序列的形式出现;如果模式用于验证通过XSLT或XQuery构造的文档实例,则完全有可能使用常规表示法在内存中表示xs:int值对于32位整数。@C.M.Sperberg-McQueen,我不确定我是否理解您的观点。xs:int是一个带范围的类型,它的存储方式与XSD和硬编码“int”的任何内容无关因为内存中的32位有符号整数会出现问题,例如,如果选择了一个不同的XSD,表示int的范围与w3c XSD中定义的范围不同。@PaulHargreaves这是一个有点迂腐的观点(根据答案的精神)。答案是正确的,简单地说xs:int是一个有符号的32位二补整数是不正确的。但答案还说,由于XML是基于字符的,因此xs:int的最大值是字符串“2147483647”;最后一位未必如此。很多系统都使用XSD类型,例如XQuery数据库,其中xs:int值更可能表示为32位的twos补码字段,而不是Unicode字符字符串。使用“表示”代替“是”您:在有限大小的机器上运行的实现不需要[…]该标准是否要求在无限机器(如图灵机器等)上运行的实现应该接受并正确地表示整个范围?:-)这将是很酷的,因为按照目前已知的物理定律,宇宙不允许这样的机器。不,对于在无限机器上运行的实现,没有特殊的规则;所有实现都可以从管理无限数据类型部分实现的规则中获益。