Partager via


Règles pour déduire des types simples

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 d'une valeur au moment où elle est examinée. 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.

Type simple Descriptif
booléen Vrai, Faux, 0, 1.
byte Entiers compris entre -128 et 127.
octet non signé Entiers compris entre 0 et 255.
short Entiers compris entre -32768 et 32767.
entier court non signé Entiers compris entre 0 et 65535.
Int Nombres entiers dans la plage comprise entre -2147483648 et 2147483647.
entier non signé Entiers compris entre 0 et 4294967295.
long Entiers dans l'intervalle 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 que les valeurs décimales peuvent aller de -9007199254740992 à 9007199254740992, et les valeurs d’exposant peuvent être comprises entre -1075 et 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 de W3C.
date et heure Le format W3C dateTime.
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 est inféré comme unsignedByte sur la base de la valeur 12. Lorsque la seconde attr1 est rencontrée, le type est promu à unsignedShort en fonction du type actuellement déduit de unsignedByte et de la valeur actuelle 52344.

À 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 est inféré comme unsignedByte sur la base de la valeur 0. Lorsque la seconde attr2 est rencontrée, le type est promu à string en fonction du type actuellement déduit de unsignedByte et de la valeur actuelle true, car la classe XmlSchemaInference prend en compte les valeurs précédentes lors de 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 dans l’espace de noms https://www.w3.org/2001/XMLSchema-instance

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é, l'élément 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 attribut xsi:nil défini à true ne peut pas avoir d’éléments enfants.
xsi:schemaLocation Si xsi:schemaLocation est rencontré, il est ignoré.
xsi:noNamespaceSchemaLocation Si xsi:noNamespaceSchemaLocation est rencontré, il est ignoré.

Voir aussi