Відповіді:
Різниця полягає в наступному:
xs:int
це підписане 32-бітове ціле число.
xs:integer
- ціле безмежне значення. Докладніше див. Https://web.archive.org/web/20151117073716/http://www.w3schools.com/schema/schema_dtypes_numeric.asp
Наприклад, XJC (Java) генерує Integer
для xs:int
та BigInteger
для xs:integer
.
Суть: використовуйте, xs:int
якщо ви хочете працювати на крос-платформах і будьте впевнені, що ваші номери пройдуть без проблем. Якщо ви хочете більші числа - використовуйте xs:long
замість xs:integer
(це буде створено для Long
).
Тип xs: integer - це обмеження xs: десятковий, з фасетом дробDigits встановлено нуль і з лексичним простором, який забороняє десяткову точку і кінцеві нулі, що в іншому випадку було б законним. Він не має мінімального або максимального значення, хоча реалізації, що працюють на машинах обмеженого розміру, не потрібно приймати довільно великі або малі значення. (Вони потрібні для підтримки значень з 16 десятковими цифрами.)
Тип xs: int є обмеженням xs: long, фасета maxInclusive встановлена на 2147483647, а фасета minInclusive - -2147483648. (Як бачите, воно зручно впишеться в 32-розрядне 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
.