Я начал создавать XSD и нашел в нескольких примерах для xs:integer
и xs:int
.
В чем разница между xs:integer
и xs:int
?
Когда я должен использовать xs:integer
?
Когда я должен использовать xs:int
?
Я начал создавать XSD и нашел в нескольких примерах для xs:integer
и xs:int
.
В чем разница между xs:integer
и xs:int
?
Когда я должен использовать xs:integer
?
Когда я должен использовать xs:int
?
Разница заключается в следующем:
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: decimal, с гранью фракции Digits, равным нулю, и с лексическим пространством, которое запрещает десятичную точку и конечные нули что в противном случае было бы законным. Он не имеет минимального или максимального значения, хотя реализация, выполняемая на машинах конечного размера, не требуется, чтобы принимать сколь угодно большие или малые значения. (Они должны поддерживать значения с 16 десятичными цифрами.)
Тип xs: int является ограничением xs: long, с maxInclusive facet, установленным на 2147483647, и minInclusive facet до -2147483648. (Как вы можете видеть, он удобно вписывается в 32-разрядное целое число с двумя дополнениями: xs: long подходит для 64-разрядного поля с целыми числами.)
Обычное правило: используйте ту, которая соответствует тому, что вы хотите сказать. Если ограничение на элемент или атрибут заключается в том, что его значение должно быть целым числом, xs: integer говорит это кратко. Если ограничение состоит в том, что значение должно быть целым числом, которое может быть выражено не более 32 битами в представлении двойного дополнения, используйте xs: int. (Вторичная, но иногда важная проблема заключается в том, работает ли ваша цепочка инструментов лучше, чем с другой. Для данных, которые будут жить дольше, чем ваша цепочка инструментов, разумно сначала прослушивать данные, а для данных, которые существуют исключительно для подачи инструмента цепь, и которая не будет представлять интереса, если вы измените цепочку инструментов, нет причин не слушать цепочку инструментов.)
Я бы просто добавил примечание педантизма, которое может быть важным для некоторых людей: неверно сказать, что xs: int "является" подписанным 32-битным целым числом. Эта форма слов подразумевает реализацию в памяти (или регистры и т.д.) В двоичном цифровом компьютере. XML основан на символах и будет реализовывать максимальное 32-разрядное знаковое значение как "2147483647" (мои кавычки, конечно), что намного больше, чем 32 бита! То, что истинно, заключается в том, что xs: int (косвенно) является ограничением xs: integer, которое устанавливает максимальное и минимальное допустимые значения таким же, как соответствующие ограничения на реализацию 32-битного целого числа со знаком-битом.