Respostas:
A diferença é a seguinte:
xs:int
é um inteiro de 32 bits com sinal.
xs:integer
é um valor inteiro ilimitado. Consulte para obter detalhes https://web.archive.org/web/20151117073716/http://www.w3schools.com/schema/schema_dtypes_numeric.asp
Por exemplo, XJC (Java) gera Integer
para xs:int
e BigInteger
para xs:integer
.
Resumindo: use xs:int
se quiser trabalhar em várias plataformas e certifique-se de que seus números passarão sem problemas. Se você quiser números maiores - use em xs:long
vez de xs:integer
(será gerado para Long
).
O tipo xs: integer é uma restrição de xs: decimal, com a faceta fractionDigits definida como zero e com um espaço léxico que proíbe a vírgula decimal e os zeros finais que, de outra forma, seriam permitidos. Não tem valor mínimo ou máximo, embora as implementações em execução em máquinas de tamanho finito não precisem aceitar valores arbitrariamente grandes ou pequenos. (Eles são obrigados a suportar valores com 16 dígitos decimais.)
O tipo xs: int é uma restrição de xs: long, com a faceta maxInclusive definida como 2147483647 e a faceta minInclusive como -2147483648. (Como você pode ver, ele caberá convenientemente em um campo de inteiro com sinal de 32 bits de dois complementos; xs: long se encaixa em um campo de inteiro com sinal de 64 bits.)
A regra usual é: use aquela que corresponde ao que você quer dizer. Se a restrição em um elemento ou atributo é que seu valor deve ser um inteiro, xs: integer diz isso de forma concisa. Se a restrição for que o valor deve ser um número inteiro que pode ser expresso com no máximo 32 bits na representação de complemento de dois, use xs: int. (Uma preocupação secundária, mas às vezes importante, é se sua cadeia de ferramentas funciona melhor com uma do que com a outra. Para dados que durarão mais do que sua cadeia de ferramentas, é aconselhável ouvir os dados primeiro; para dados que existem apenas para alimentar a ferramenta corrente, e que não terá interesse se você trocar sua corrente de ferramentas, não há razão para não ouvir a corrente de ferramentas.)
Eu apenas acrescentaria uma nota de pedantismo que pode ser importante para algumas pessoas: não é correto dizer que xs: int "é" um inteiro de 32 bits com sinal. Essa forma de palavras implica uma implementação na memória (ou registros, etc.) dentro de um computador digital binário. XML é baseado em caracteres e implementaria o valor máximo assinado de 32 bits como "2147483647" (minhas citações, é claro), que é muito mais do que 32 bits! O que É verdade é que xs: int é (indiretamente) uma restrição de xs: integer que define os valores máximo e mínimo permitidos como sendo os mesmos que os limites impostos pela implementação correspondentes de um inteiro de 32 bits com um bit de sinal.
, but not
xs: int` ouxs:long
.