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

Mic*_*ael 108 xsd

我已经开始创建XSD和几个例子为发现xs:integerxs:int.

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

Mic*_*ael 104

区别在于: xs:int是带符号的32位整数. xs:integer是一个整数无界值.有关详细信息 ,请参阅https://web.archive.org/web/20151117073716/http://www.w3schools.com/schema/schema_dtypes_numeric.asp例如,XJC(Java)生成Integerfor xs:intBigIntegerfor xs:integer.

底线:xs:int如果您想跨平台工作并确保您的数字通过而没有问题,请使用.如果你想要更大的数字 - 使用xs:long而不是xs:integer(它将被生成Long).

  • w3cshools不具有权威性.为什么不参考正确的定义?http://www.w3.org/2001/XMLSchema.xsd声明整数绑定到+/- 9223372036854775808.此外,跨平台与(兼容)xml无关. (13认同)
  • @PaulHargreaves,你的评论+/- 9223372036854775808是"xs:integer"的最大值是错误的:XMLSchema.xsd定义"xs:long"是对"xs:integer"的限制为+/- 9223372036854775808 (8认同)
  • Saxon 9 HE(家庭版)仅支持“ xs:integer”,但不支持“ xs:int”或“ xs:long”。 (2认同)
  • @PaulHargreaves,Saxon 9 HE(据我所知)是一个完全一致的XSLT处理器:xs:int不在基本XSLT处理器[需要支持]的类型集中(http://www.w3.org/TR/xslt20 /#内置类型).如果你的意思是它不是一个符合标准的XSD处理器,这是真的但有误导性:它根本不是XSD处理器. (2认同)

C. *_*een 30

所述的xs:整数类型是xs的限制:小数,与在fractionDigits面设置为零,并且与禁止小数点和尾随零,否则是合法的一个词汇空间.它没有最小值或最大值,但是在有限大小的机器中运行的实现不需要能够接受任意大或小的值.(它们需要支持16位十进制数字的值.)

XS:INT型是XS的限制:长,与小maxInclusive,便会设置为2147483647和minInclusive facet来-2147483648.(正如您所看到的,它可以方便地放入一个双补码32位有符号整数字段; xs:long适合64位有符号整数字段.)

通常的规则是:使用与您想要说的匹配的那个.如果对元素或属性的约束是其值必须是整数,则xs:integer简洁地说明.如果约束是该值必须是可以在二进制补码表示中以最多32位表示的整数,请使用xs:int.(次要但有时重要的一个问题是,您的工具链是否与其他工具链相比更好.对于比您的工具链更长寿的数据,最好先收听数据;对于仅用于提供工具的数据链,如果你改变工具链就没有意义,没有理由不去听工具链.)


小智 6

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