Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Décrit comment la XmlSchemaInference classe déduit le type de données pour les attributs et les éléments.
La XmlSchemaInference classe déduit le type de données pour les attributs et les éléments en tant que types simples. Cette section décrit les types déduits potentiels, la façon dont plusieurs valeurs différentes sont rapprochées d’un seul type et la façon dont les attributs de définition xsi de schéma sont gérés.
Types déduits
La XmlSchemaInference classe déduit les valeurs d’élément et d’attribut en tant que types simples et inclut un attribut de type dans le schéma résultant. Tous les types déduits sont des types simples. Aucun type de base ou facette n’est inclus dans le schéma résultant.
Les valeurs sont examinées individuellement à mesure qu’elles sont rencontrées dans le document XML. Le type est déduit pour une valeur au moment où il est examiné. Si un type a été déduit pour un attribut ou un élément et qu’une valeur pour l’attribut ou l’élément est rencontrée qui ne correspond pas au type actuellement déduit, la XmlSchemaInference classe promeut le type pour chacun d’un ensemble de règles. Ces règles sont abordées dans la section Promotion de type, plus loin dans cette rubrique.
Le tableau suivant répertorie les types déduits possibles pour le schéma résultant.
| Simple Type | Descriptif |
|---|---|
| booléen | True, false, 0, 1. |
| octet | Entiers compris entre -128 et 127. |
| octet non signé | Entiers compris entre 0 et 255. |
| court | Entiers compris entre -32768 et 32767. |
| entier court non signé | Entiers compris entre 0 et 65535. |
| Int | Entiers de la plage de –2147483648 à 2147483647. |
| entier non signé | Entiers compris entre 0 et 4294967295. |
| long | Entiers de la plage de –9223372036854775808 à 9223372036854775807. |
| unsignedLong | Entiers compris entre 0 et 18446744073709551615. |
| entier | Nombre fini de chiffres éventuellement précédés de « - ». |
| décimal | Valeurs numériques qui contiennent de 0 à 28 chiffres de précision. |
| flotter | Décimales éventuellement suivies de « E » ou « e » suivie d’une valeur entière représentant l’exposant. Les valeurs décimales peuvent se trouver dans la plage de -16777216 à 16777216. Les valeurs d’exposant peuvent être comprises entre -149 et 104. Float permet aux valeurs spéciales de représenter des valeurs infinies et non numériques. Les valeurs spéciales pour float sont : 0, -0, INF, -INF, NaN. |
| double | Identique à float, sauf les valeurs décimales, peuvent être comprises dans la plage de -9007199254740992 à 9007199254740992, et les valeurs d’exposant peuvent se trouver dans la plage de -1075 à 970. Double permet aux valeurs spéciales de représenter des valeurs infinies et non numériques. Les valeurs spéciales pour float sont : 0, -0, INF, -INF, NaN. |
| durée | Format de durée W3C. |
| date et heure | Format dateTime W3C. |
| Heure | Format de temps W3C. |
| date | Les valeurs d’année sont limitées de 0001 à 9999. |
| gYearMonth | Format mois et année grégorien W3C. |
| ficelle | Un ou plusieurs caractères Unicode. |
Promotion de type
La XmlSchemaInference classe examine les valeurs d’attribut et d’élément une à la fois. À mesure que les valeurs sont rencontrées, le type non signé le plus restrictif est déduit. Si un type a été déduit pour un attribut ou un élément, et qu’une nouvelle valeur est rencontrée qui ne correspond pas au type actuellement déduit, le type déduit est promu en nouveau type qui s’applique à la fois au type déduit et à la nouvelle valeur. La XmlSchemaInference classe prend en compte les valeurs précédentes lors de la promotion du type déduit.
Par exemple, considérez les fragments XML suivants à partir de deux documents XML :
<MyElement1 attr1="12" />
<MyElement1 attr1="52344" />
Lorsque la première attr1 valeur est rencontrée, le type de attr1 données est déduit comme unsignedByte basé sur la valeur 12. Lorsque la seconde attr1 est rencontrée, le type est promu unsignedShort en fonction du type actuellement déduit et de unsignedByte la valeur 52344actuelle.
À présent, tenez compte du code XML suivant à partir de deux documents XML :
<MyElement2 attr2="0" />
<MyElement2 attr2="true" />
Lorsque la première attr2 valeur est rencontrée, le type de attr2 données est déduit comme unsignedByte basé sur la valeur 0. Lorsque la seconde attr2 est rencontrée, le type est promu string en fonction du type déduit et de la valeur true actuelle, car la XmlSchemaInference classe prend en compte les valeurs précédentes lors de unsignedByte la promotion du type déduit. Toutefois, si les deux instances d’ont attr2 été rencontrées dans le même document XML et non dans deux documents XML différents comme illustré ci-dessus, attr2 auraient été déduites en tant que boolean.
Attributs ignorés de l’espace https://www.w3.org/2001/XMLSchema-instance de noms
Voici les attributs de définition de schéma qui sont ignorés pendant l’inférence du schéma.
| Caractéristique | Descriptif |
|---|---|
xsi:type |
Si un élément est rencontré avec xsi:type spécifié, il xsi:type est ignoré. |
xsi:nil |
Si un élément avec un xsi:nil attribut est rencontré, sa déclaration d’élément dans le schéma déduit a la valeur nillable="true". Un élément avec un jeu d’attributs xsi:nil pour true ne peut pas avoir d’éléments enfants. |
xsi:schemaLocation |
Si xsi:schemaLocation elle est rencontrée, elle est ignorée. |
xsi:noNamespaceSchemaLocation |
Si xsi:noNamespaceSchemaLocation elle est rencontrée, elle est ignorée. |