Câu trả lời:
Sự khác biệt là như sau:
xs:int
là một số nguyên 32 bit có dấu.
xs:integer
là một giá trị không bị ràng buộc số nguyên. Xem chi tiết https://web.archive.org/web/20151117073716/http://www.w3schools.com/schema/schema_dtypes_numeric.asp
Ví dụ: XJC (Java) tạo Integer
cho xs:int
và BigInteger
choxs:integer
.
Điểm mấu chốt: sử dụng xs:int
nếu bạn muốn làm việc trên nhiều nền tảng và chắc chắn rằng các con số của bạn sẽ vượt qua mà không có vấn đề gì. Nếu bạn muốn số lớn hơn - hãy sử dụng xs:long
thay vì xs:integer
(nó sẽ được tạo thành Long
).
Các xs: integer là một giới hạn của xs: decimal, với khía cạnh fractionDigits được đặt thành 0 và có khoảng trắng từ vựng cấm dấu thập phân và các số 0 ở cuối mà nếu không sẽ hợp pháp. Nó không có giá trị tối thiểu hoặc tối đa, mặc dù việc triển khai chạy trong các máy có kích thước hữu hạn không bắt buộc phải chấp nhận các giá trị lớn hoặc nhỏ tùy ý. (Chúng được yêu cầu hỗ trợ các giá trị có 16 chữ số thập phân.)
Kiểu xs: int là một hạn chế của xs: long, với khía cạnh maxInclusive được đặt thành 2147483647 và khía cạnh minInclusive thành -2147483648. (Như bạn có thể thấy, nó sẽ phù hợp thuận tiện với trường số nguyên có dấu 32 bit hai bổ sung; xs: long phù hợp với trường số nguyên có dấu 64 bit.)
Quy tắc thông thường là: sử dụng từ phù hợp với những gì bạn muốn nói. Nếu ràng buộc đối với một phần tử hoặc thuộc tính là giá trị của nó phải là số nguyên, thì xs: integer nói lên điều đó một cách chính xác. Nếu ràng buộc là giá trị phải là một số nguyên có thể được biểu diễn với tối đa 32 bit trong biểu diễn bổ sung hai phần, hãy sử dụng xs: int. (Mối quan tâm thứ yếu nhưng đôi khi quan trọng là liệu chuỗi công cụ của bạn có hoạt động tốt hơn với chuỗi công cụ này hay không. Đối với dữ liệu sẽ tồn tại lâu hơn chuỗi công cụ của bạn, điều khôn ngoan là nên lắng nghe dữ liệu trước; đối với dữ liệu chỉ tồn tại để cung cấp cho công cụ chuỗi, và sẽ không quan tâm nếu bạn thay đổi chuỗi công cụ của mình, không có lý do gì để không lắng nghe chuỗi công cụ.)
Tôi chỉ thêm một lưu ý quan trọng đối với một số người: không đúng khi nói rằng xs: int "là" một số nguyên 32 bit có dấu. Dạng từ đó ngụ ý việc triển khai trong bộ nhớ (hoặc thanh ghi, v.v.) trong máy tính kỹ thuật số nhị phân. XML dựa trên ký tự và sẽ triển khai giá trị có dấu 32 bit tối đa là "2147483647" (tất nhiên là dấu ngoặc kép của tôi), nhiều hơn 32 bit rất nhiều! Điều IS đúng là xs: int là (gián tiếp) là một giới hạn của xs: integer đặt giá trị tối đa và tối thiểu được phép giống với giới hạn được áp dụng tương ứng của một số nguyên 32 bit với một bit dấu.
, but not
xs: int` hoặcxs:long
.