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


111

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

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

Answers:


110

区别如下: xs:int是一个有符号的32位整数。 xs:integer是一个整数无界值。详情请参阅https://web.archive.org/web/20151117073716/http://www.w3schools.com/schema/schema_dtypes_numeric.asp 例如,XJC(JAVA)产生Integerxs:int,并BigIntegerxs:integer

最重要的是:xs:int如果您想跨平台工作,请使用此方法,并确保您的电话号码可以顺利通过。如果您想要更大的数字,请使用xs:long代替xs:integer(它将生成为Long)。


2
Saxon 9 HE(家庭版)仅支持'xs:integer , but not xs:int`或xs:long
Nishi 2014年

13
w3cshools没有权威。为什么不参考正确的定义?w3.org/2001/XMLSchema.xsd指出例如整数绑定到+/- 9223372036854775808。此外,跨平台与(兼容)xml没有关系。
Paul Hargreaves 2015年

@Nishi,听起来像Saxon 9 HE不符合标准。阅读saxon.sourceforge.net页面,似乎只有EE版本是符合标准的。
Paul Hargreaves 2015年

2
@ PaulHargreaves,Saxon 9 HE(据我所知)是完全符合标准的XSLT处理器:xs:int不在基本XSLT处理器所需要支持的类型集中。如果您说它不是合格的XSD处理器,那么这是正确的,但却具有误导性:它根本不是XSD处理器。
CM Sperberg-McQueen

8
@PaulHargreaves,您对+/- 922337202036854775808的最大值“ xs:integer”的评论是错误的:XMLSchema.xsd定义“ xs:long”是对“ xs:integer”的限制,范围为+/- 9223372036854775808
metatechbe

30

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

XS:INT型是XS的限制:长,与小maxInclusive,便会设置为2147483647和minInclusive facet来-2147483648。(如您所见,它将很方便地适合两个补码的32位有符号整数字段; xs:long适合于64位有符号整数字段。)

通常的规则是:使用与您要说的内容相匹配的语言。如果对元素或属性的约束是其值必须为整数,则xs:integer简洁地说。如果约束是值必须是一个整数,该二进制数可以用二进制补码表示形式最多以32位表示,请使用xs:int。(另一个但有时也很重要的问题是,您的工具链是否与一个工具链一起使用会更好。对于寿命比您的工具链更长的数据,明智的做法是先监听数据;对于仅用于喂养工具的数据链,如果您更改工具链,这将毫无意义,那么就没有理由不听工具链。)


您:不需要在有限大小的机器上运行的实现是[...]标准是否要求在无限机器(例如图灵机和东西)上运行的实现应接受并正确表示整个范围?:-)太酷了,因为根据目前已知的物理定律,宇宙不允许这种机器。
杰普·斯蒂格·尼尔森

不,对于在无限计算机上运行的实现,规范没有特殊的规则。允许所有实现受益于管理无限数据类型的部分实现的规则。
CM Sperberg-McQueen

6

我只想添加对某些人可能很重要的脚手架注释:xs:int“是”一个有符号的32位整数是不正确的。单词的这种形式意味着在二进制数字计算机内的存储器(或寄存器等)中的实现。XML是基于字符的,并且将实现最大的32位带符号值作为“ 2147483647”(当然,我的引用是),这比32位要多得多!正确的是xs:int(间接地)是xs:integer的限制,该限制将最大和最小允许值设置为与带有符号位的32位整数的相应实施施加的限制相同。


不能保证用XSD验证的源信息集是字符序列的形式。如果使用该模式来验证通过XSLT或XQuery构造的文档实例,则很有可能使用常规的32位整数表示形式在内存中表示xs:int值。
CM Sperberg-McQueen

@ CMSperberg-McQueen,我不确定我是否理解你的观点。xs:int是具有范围的类型,它的存储方式与XSD无关,如果将例如32位有符号整数“硬”编码为内存中的32位有符号整数的硬编码的任何东西都提出了问题,例如是否选择了不同的XSD一个int的范围不同于w3c XSD中定义的范围。
Paul Hargreaves 2015年

1
@PaulHargreaves这是一个有点古怪的观点(按照回答的精神)。答案是正确的,断然地说xs:int 一个有符号的32位二进制补码整数不正确的。但是答案还说,由于XML是基于字符的,因此xs:int的最大值是字符串 “ 2147483647”;最后一点不一定是这样。XSD类型由许多系统使用,例如XQuery数据库,其中xs:int值更可能用32位二进制补码字段表示,而不是用Unicode字符字符串表示。
CM Sperberg-McQueen

用“代表”代替“是”
克里斯·沃尔什
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.