XSD: ¿Cuál es la diferencia entre xs:integer y xs: int?


He empezado a crear XSD y he encontrado un par de ejemplos para xs:integer y xs:int.

¿Cuál es la diferencia entre xs:integer y xs:int? ¿Cuándo debo usar xs:integer? ¿Cuándo debo usar xs:int?

 94
xsd
Author: Michael, 2013-03-11

3 answers

La diferencia es la siguiente: xs:int es un entero de 32 bits con signo. xs:integer es un valor entero ilimitado. Ver para más detalles https://web.archive.org/web/20151117073716/http://www.w3schools.com/schema/schema_dtypes_numeric.asp Por ejemplo, XJC (Java) genera Integer para xs:int y BigInteger para xs:integer.

La línea de fondo: use xs:int si desea trabajar plataformas cruzadas y asegúrese de que sus números pasarán sin problema. Si desea números más grandes, use xs:long en lugar de xs:integer (se generará a Long).

 92
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-29 19:53:54

El tipo xs:integer es una restricción de xs:decimal, con la faceta fractionDigits puesta a cero y con un espacio léxico que prohíbe el punto decimal y los ceros finales que de otro modo serían legales. No tiene un valor mínimo o máximo, aunque las implementaciones que se ejecutan en máquinas de tamaño finito no son necesarias para poder aceptar valores arbitrariamente grandes o pequeños. (Se requiere que admitan valores con 16 dígitos decimales.)

El tipo xs: int es un restricción de xs: largo, con la faceta maxInclusive fijada a 2147483647 y la faceta minInclusive a -2147483648. (Como puede ver, encajará convenientemente en un campo entero con signo de 32 bits de dos complementos; xs:long encaja en un campo entero con signo de 64 bits.)

La regla habitual es: usa la que coincida con lo que quieres decir. Si la restricción en un elemento o atributo es que su valor debe ser un entero, xs: integer lo dice concisamente. Si la restricción es que el valor debe ser un entero que se puede expresar con un máximo de 32 bits en representación de complemento de dos, use xs: int. (Una preocupación secundaria, pero a veces importante, es si la cadena de herramientas funciona mejor con una que con la otra. Para los datos que vivirán más tiempo que su cadena de herramientas, es aconsejable escuchar primero los datos; para los datos que existen únicamente para alimentar la cadena de herramientas, y que no serán de interés si cambia su cadena de herramientas, no hay razón para no escuchar la cadena de herramientas.)

 28
Author: C. M. Sperberg-McQueen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-11 15:34:36

Simplemente agregaría una nota de pedantería que puede ser importante para algunas personas: no es correcto decir que xs:int "es" un entero de 32 bits con signo. Esa forma de palabras implica una implementación en memoria (o registros, etc.) dentro de un ordenador digital binario. XML está basado en caracteres e implementaría el valor máximo firmado de 32 bits como "2147483647" (mis comillas, por supuesto), ¡que es mucho más que 32 bits! Lo que es cierto es que xs: int es (indirectamente) una restricción de xs: integer que establece la los valores máximos y mínimos permitidos son los mismos que los límites impuestos por la implementación correspondientes de un entero de 32 bits con un bit de signo.

 6
Author: user2807736,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-23 15:01:49