web-dev-qa-db-fra.com

XSD: Quelle est la différence entre xs: integer et xs: int?

J'ai commencé à créer XSD et j'ai trouvé quelques exemples pour xs:integer et xs:int.

Quelle est la différence entre xs:integer et xs:int? Quand devrais-je utiliser xs:integer? Quand devrais-je utiliser xs:int?

105
Michael

La différence est la suivante: xs:int est un entier signé de 32 bits. xs:integer est une valeur entière non liée. Voir pour plus de détails https://web.archive.org/web/20151117073716/http://www.w3schools.com/schema/schema_dtypes_numeric.asp Par exemple, XJC (Java) génère Integer pour xs:int et BigInteger pour xs:integer.

La ligne du bas: utilisez xs:int _ si vous voulez travailler sur plusieurs plates-formes et vous assurer que vos chiffres passeront sans problème. Si vous voulez des nombres plus grands, utilisez xs:long au lieu de xs:integer _ (il sera généré dans Long).

102
Michael

Le type xs: integer est une restriction de xs: decimal, avec la facette fractionDigits définie sur zéro et avec un espace lexical qui interdit le point décimal et les zéros qui le seraient autrement. Il n'a pas de valeur minimale ou maximale, bien que les implémentations exécutées sur des machines de taille finie ne soient pas obligées d'accepter des valeurs arbitrairement grandes ou petites. (Ils doivent prendre en charge les valeurs avec 16 chiffres décimaux.)

Le type xs: int est une restriction de xs: long, avec la facette maxInclusive définie sur 2147483647 et la facette minInclusive sur -2147483648. (Comme vous pouvez le constater, il s'intégrera aisément dans un champ entier signé de 32 bits à complément complémentaire; xs: long s'inscrit dans un champ de type entier signé de 64 bits.)

La règle habituelle est la suivante: utilisez celui qui correspond à ce que vous voulez dire. Si la contrainte sur un élément ou un attribut est que sa valeur doit être un entier, xs: integer le dit de manière concise. Si la contrainte est que la valeur doit être un entier pouvant être exprimé avec au plus 32 bits en représentation à deux complément, utilisez xs: int. (Une préoccupation secondaire mais parfois importante est de savoir si votre chaîne d'outils fonctionne mieux avec l'une qu'avec l'autre. Pour les données qui dureront plus longtemps que votre chaîne d'outils, il est sage d'écouter d'abord les données; pour les données qui existent uniquement pour alimenter l'outil chaîne, et qui ne sera d'aucun intérêt si vous changez de chaîne d'outils, il n'y a aucune raison de ne pas l'écouter.)

29

Je voudrais simplement ajouter une note de pédantisme qui peut être importante pour certaines personnes: il n'est pas correct de dire que xs: int "est" un entier signé de 32 bits. Cette forme de mots implique une implémentation en mémoire (ou registres, etc.) dans un ordinateur numérique binaire. XML est basé sur des caractères et implémenterait la valeur maximale signée sur 32 bits sous la forme "2147483647" (mes guillemets, bien sûr), ce qui est beaucoup plus que 32 bits! What IS true est que xs: int est (indirectement) une restriction de xs: integer qui définit les valeurs maximale et minimale autorisées comme étant identiques aux limites correspondantes imposées par bit entier avec un bit de signe.

6
PeteCahill