XSD:xs:integerとxs:intの違いは何ですか?


111

XSDの作成を開始し、xs:integerおよびの例をいくつか見つけましたxs:int

違いは何であるxs:integerとはxs:int?いつ使用すべきxs:integerですか?いつ使用すべきxs:intですか?

回答:


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およびBigIntegerに対して生成されxs:integerます。

一番下の行:xs:intクロスプラットフォームで作業したい場合に使用し、あなたの番号が問題なく通過することを確認してください。より大きな数値が必要な場合-のxs:long代わりに使用しますxs:integer(生成されるのはLong)。


2
Saxon 9 HE(Home Edition)は 'xs:integer , but not xs:int`またはのみをサポートしxs:longます。
西

13
w3cshoolsは信頼できません。適切な定義を参照しないのはなぜですか?w3.org/2001/XMLSchema.xsdには、たとえば整数が+/- 9223372036854775808にバインドされていると記載されています。また、クロスプラットフォームは(準拠)xmlとは関係ありません。
Paul Hargreaves、2015年

@西、サクソン9のように聞こえますHEは適合していません。saxon.sourceforge.netページを読むと、EEバージョンのみが準拠しているようです。
Paul Hargreaves、2015年

2
@ PaulHargreaves、Saxon 9 HEは(私の知る限り)完全に準拠したXSLTプロセッサです。xs:intは、サポートするために必要な基本的なXSLTプロセッサのタイプのセットに含まれていません。準拠しているXSDプロセッサではない場合、これは真実ですが誤解を招く可能性があります。つまり、XSDプロセッサではありません。
CM Sperberg-McQueen 2015

8
@PaulHargreaves、+ /-9223372036854775808が「xs:integer」の最大値であるというコメントは間違っています。XMLSchema.xsdは、「xs:long」が「xs:integer」の+/- 9223372036854775808への制限であることを定義しています
metatechbe

30

XS:整数 fractionDigitsをゼロにし、そうでなければ法的あろう小数点と末尾のゼロを禁止字句空間で設定ファセットと、小数:タイプは、xsの制限です。最小値または最大値はありませんが、有限サイズのマシンで実行される実装は、任意の大きい値または小さい値を受け入れることができる必要はありません。(16桁の16進数の値をサポートするために必要です。)

XS:int型のタイプは、xsの制限である:長い間、-2147483648に2147483647にmaxInclusiveをファセットセットとのminInclusiveファセットと。(ご覧のとおり、2つの補数の32ビット符号付き整数フィールドに都合よく収まります。xs:longは64ビット符号付き整数フィールドに適合します。)

通常のルールは、言いたいことと一致するものを使用することです。要素または属性の制約が、その値が整数でなければならないことである場合、xs:integerはそれを簡潔に述べます。値が2の補数表現で最大32ビットで表現できる整数でなければならないという制約がある場合は、xs:intを使用します。(もう1つの重要な問題は、ツールチェーンが他のツールチェーンよりもうまく機能するかどうかです。ツールチェーンよりも長く存続するデータの場合、最初にデータをリッスンすることをお勧めします。ツールにフィードするためだけに存在するデータの場合ツールチェーンを変更しても意味がありません。ツールチェーンをリッスンしない理由はありません)。


あなた:有限サイズのマシンで実行する実装は必須ではありません[...]規格には、無限マシン(Turingマシンなど)で実行する実装が全範囲を受け入れ、適切に表す必要があるという要件がありますか?:-)宇宙は、現在知られているような物理法則を使用しているため、そのようなマシンを受け入れないので、すばらしいでしょう。
Jeppe Stig Nielsen

いいえ、仕様には、無限のマシンで実行される実装に関する特別なルールはありません。すべての実装は、無限データ型の部分的な実装を管理するルールの恩恵を受けることができます。
CM Sperberg-McQueen 2016

6

一部の人々にとって重要である可能性があるペダントリのメモを追加します。xs:intが符号付き32ビット整数であると言うのは正しくありません。その形式の単語は、バイナリデジタルコンピュータ内のメモリ(またはレジスタなど)での実装を意味します。XMLは文字ベースであり、最大32ビットの符号付き値を "2147483647"(もちろん引用符)として実装します。これは32ビットよりもはるかに多くなります。xs:intは(間接的に)xs:integerの制限であり、許可される最大値と最小値を、符号ビットを含む32ビット整数の対応する実装によって課される制限と同じに設定します。


XSDで検証されたソースインフォセットが一連の文字の形式であるという保証はありません。XSLTまたはXQueryを使用して構築されたドキュメントインスタンスを検証するためにスキーマを使用する場合、xs:int値が32ビット整数の従来の表現を使用してメモリ内で表現される可能性はすべてあります。
CM Sperberg-McQueen 2014

@ CMSperberg-McQueen、私はあなたの主張を理解しているとは思いません。xs:intは範囲付きの型であり、その格納方法はXSDとは無関係です。たとえば、メモリ内の32ビット符号付き整数として「int」をハードコードすると、たとえば、別のXSDが選択されている場合に問題が発生します。 intの範囲は、w3c XSDで定義されている範囲とは異なります。
Paul Hargreaves

1
@PaulHargreaves(回答の精神において)それは少し知識の少ないポイントです。その答えは、xs:int 符号付き32ビットの2の補数の整数であると一言で言うのは正しくないということです。ただし、XMLは文字ベースであるため、xs:intの最大値は文字列「2147483647」であるとも回答されています。その最後のビットは必ずしもそうではありません。XSDタイプは、xs:int値がUnicode文字列としてよりも32ビットの2の補数フィールドで表される可能性が高いXQueryデータベースなど、多くのシステムで使用されます。
CM Sperberg-McQueen、2015

「is」の代わりに「represents」を使用する
クリスウォルシュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.