J'ai commencé à créer un XSD et j'ai trouvé dans quelques exemples pour xs:integer
et xs:int
.
Quelle est la différence entre xs:integer
et xs:int
? Quand dois-je utiliser xs:integer
? Quand dois-je utiliser xs:int
?
J'ai commencé à créer un XSD et j'ai trouvé dans quelques exemples pour xs:integer
et xs:int
.
Quelle est la différence entre xs:integer
et xs:int
? Quand dois-je utiliser xs:integer
? Quand dois-je utiliser xs:int
?
La différence est la suivante : xs:int
est un nombre entier signé de 32 bits. xs:integer
est une valeur entière non bornée. Voir pour les détails 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
.
En résumé, utilisez xs:int
si vous voulez travailler sur plusieurs plateformes et être sûr que vos chiffres passeront sans problème. Si vous voulez des chiffres plus importants, utilisez xs:long
au lieu de xs:integer
(il sera généré à Long
).
Le site xs:integer est une restriction de xs:decimal, avec la facette fractionDigits définie à zéro et avec un espace lexical qui interdit le point décimal et les zéros de queue qui seraient autrement légaux. Il n'a pas de valeur minimale ou maximale, bien que les implémentations s'exécutant sur des machines de taille finie ne soient pas tenues d'être en mesure d'accepter des valeurs arbitrairement grandes ou petites. (Elles sont tenues de prendre en charge des valeurs comportant 16 chiffres décimaux).
Le site xs:int Le type est une restriction de xs:long, avec la facette maxInclusive fixée à 2147483647 et la facette minInclusive à -2147483648. (Comme vous pouvez le voir, il s'adaptera commodément à un champ de nombres entiers signés de 32 bits à deux compléments ; xs:long s'adapte à un champ de nombres entiers signés de 64 bits).
La règle habituelle est la suivante : utilisez celle qui correspond à ce que vous voulez dire. Si la contrainte sur un élément ou un attribut est que sa valeur doit être un nombre entier, xs:integer le dit de manière concise. Si la contrainte est que la valeur doit être un nombre entier qui peut être exprimé avec au plus 32 bits en représentation bi-complémentaire, utilisez xs:int. (Une préoccupation secondaire mais parfois importante est de savoir si votre chaîne d'outils fonctionne mieux avec l'un qu'avec l'autre. Pour les données qui vivront plus longtemps que votre chaîne d'outils, il est sage d'écouter les données en premier ; pour les données qui existent uniquement pour alimenter la chaîne d'outils, et qui n'auront aucun intérêt si vous changez votre chaîne d'outils, il n'y a aucune raison de ne pas écouter la chaîne d'outils).
Je voudrais juste ajouter une note de pédanterie qui peut être importante pour certaines personnes : il n'est pas correct de dire que xs:int "est" un entier 32 bits signé. Cette forme de mots implique une implémentation en mémoire (ou dans des registres, etc.) au sein d'un ordinateur numérique binaire. Le XML est basé sur des caractères et implémenterait la valeur signée maximale de 32 bits comme "2147483647" (entre guillemets, bien sûr), ce qui représente bien plus que 32 bits ! Ce qui est vrai, c'est que xs:int est (indirectement) une restriction de xs:integer qui définit les valeurs maximales et minimales autorisées comme étant les mêmes que les limites correspondantes imposées par l'implémentation d'un entier de 32 bits avec un bit de signe.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.