Zacząłem tworzyć XSD i znalazłem w kilku przykładach dla xs:integer
i xs:int
.
Jaka jest różnica między xs:integer
i xs:int
? Kiedy powinienem używać xs:integer
? Kiedy powinienem używać xs:int
?
Różnica jest następująca:
xs:int
jest 32-bitową liczbą całkowitą ze znakiem.
xs:integer
jest nieograniczoną wartością całkowitą. Szczegółowe informacje można znaleźć pod adresem https://web.archive.org/web/20151117073716/http://www.w3schools.com/schema/schema_dtypes_numeric.asp
Na przykład XJC (Java) generuje Integer
dla xs:int
i BigInteger
dla xs:integer
.
Podsumowując: użyj, xs:int
jeśli chcesz pracować na różnych platformach i upewnij się, że Twoje liczby przejdą bez problemu. Jeśli chcesz większe liczby - użyj xs:long
zamiast xs:integer
(zostanie wygenerowany do Long
).
, but not
xs: int` lubxs:long
.Typ xs: integer jest ograniczeniem xs: decimal, z aspektem fractionDigits ustawionym na zero i spacją leksykalną, która zabrania kropki dziesiętnej i końcowych zer, które w innym przypadku byłyby dozwolone. Nie ma wartości minimalnej ani maksymalnej, chociaż implementacje działające na maszynach o skończonych rozmiarach nie muszą być w stanie zaakceptować dowolnie dużych lub małych wartości. (Wymagane są do obsługi wartości z 16 cyframi dziesiętnymi).
Typ xs: int to ograniczenie xs: long, z aspektem maxInclusive ustawionym na 2147483647, a aspektem minInclusive na -2147483648. (Jak widać, zmieści się dogodnie w 32-bitowym polu liczby całkowitej ze znakiem z dwoma uzupełnieniami; xs: long pasuje do 64-bitowego pola ze znakiem liczby całkowitej).
Zwykła zasada brzmi: użyj tego, który pasuje do tego, co chcesz powiedzieć. Jeśli ograniczenie elementu lub atrybutu polega na tym, że jego wartość musi być liczbą całkowitą, xs: integer mówi to zwięźle. Jeśli ograniczenie polega na tym, że wartość musi być liczbą całkowitą, która może być wyrażona za pomocą maksymalnie 32 bitów w reprezentacji z uzupełnieniem do dwóch, użyj xs: int. (Drugorzędna, ale czasami ważna kwestia dotyczy tego, czy łańcuch narzędzi działa lepiej z jednym narzędziem niż z drugim. W przypadku danych, które będą trwać dłużej niż łańcuch narzędzi, warto najpierw wysłuchać danych; w przypadku danych, które istnieją wyłącznie po to, aby zasilić narzędzie łańcuch, a który nie będzie interesujący, jeśli zmienisz łańcuch narzędzi, nie ma powodu, aby nie słuchać łańcucha narzędzi).
źródło
Dodałbym tylko nutę pedanterii, która może być ważna dla niektórych ludzi: nie jest poprawne stwierdzenie, że xs: int „jest” 32-bitową liczbą całkowitą ze znakiem. Ta forma słów implikuje implementację w pamięci (lub rejestrach itp.) W binarnym komputerze cyfrowym. XML jest oparty na znakach i zaimplementowałby maksymalną 32-bitową wartość ze znakiem jako „2147483647” (oczywiście moje cudzysłowy), czyli o wiele więcej niż 32 bity! Prawdą jest, że xs: int jest (pośrednio) ograniczeniem xs: integer, które ustawia maksymalne i minimalne dozwolone wartości na takie same, jak odpowiadające im limity narzucone przez implementację 32-bitowej liczby całkowitej z bitem znaku.
źródło