Condividi tramite


Regole per l'inferenza di tipi semplici

Descrive il modo in cui la XmlSchemaInference classe deduce il tipo di dati per attributi ed elementi.

La XmlSchemaInference classe deduce il tipo di dati per attributi ed elementi come tipi semplici. Questa sezione descrive i potenziali tipi dedotti, il modo in cui più valori diversi vengono riconciliati con un singolo tipo e il modo in cui vengono gestiti gli attributi di definizione xsi dello schema.

Tipi dedotti

La XmlSchemaInference classe deduce i valori di elemento e attributo come tipi semplici e include un attributo di tipo nello schema risultante. Tutti i tipi dedotti sono tipi semplici. Nessun tipo di base o facet viene incluso come parte dello schema risultante.

I valori vengono esaminati singolarmente man mano che vengono rilevati nel documento XML. Il tipo viene dedotto per un valore al momento dell'esame. Se un tipo è stato dedotto per un attributo o un elemento e viene rilevato un valore per l'attributo o l'elemento che non corrisponde al tipo attualmente dedotto, la XmlSchemaInference classe promuove il tipo per ogni set di regole. Queste regole sono descritte nella sezione Promozione dei tipi, più avanti in questo argomento.

Nella tabella seguente sono elencati i possibili tipi dedotti per lo schema risultante.

Tipo semplice Descrizione
booleano Vero, Falso, 0, 1.
byte Numeri interi compresi nell'intervallo compreso tra -128 e 127.
byte senza segno Numeri interi compresi nell'intervallo compreso tra 0 e 255.
breve Numeri interi compresi nell'intervallo compreso tra –32768 e 32767.
unsignedShort (numero breve senza segno) Numeri interi compresi nell'intervallo compreso tra 0 e 65535.
Int Numeri interi nell'intervallo di –2147483648 da 2147483647.
intero non firmato Numeri interi compresi nell'intervallo da 0 a 4294967295.
lungo Numeri interi nell'intervallo di –9223372036854775808 da 9223372036854775807.
intero lungo non firmato Numeri interi compresi nell'intervallo da 0 a 18446744073709551615.
numero intero Numero finito di cifre eventualmente preceduto da "-".
decimale Valori numerici contenenti da 0 a 28 cifre di precisione.
galleggiare Decimali seguiti facoltativamente da "E" o "e" seguiti da un valore intero che rappresenta l'esponente. I valori decimali possono essere compresi nell'intervallo di -16777216 da 16777216. I valori dell'esponente possono essere compresi nell'intervallo compreso tra -149 e 104.

Float consente ai valori speciali di rappresentare valori di infinito e non numerici. I valori speciali per float sono: 0, -0, INF, -INF, NaN.
doppio Lo stesso valore di float tranne i valori decimali può essere compreso nell'intervallo di -9007199254740992 a 9007199254740992 e i valori esponenti possono essere compresi nell'intervallo compreso tra -1075 e 970.

Double consente ai valori speciali di rappresentare i valori infinito e non numerici. I valori speciali per float sono: 0, -0, INF, -INF, NaN.
durata Formato di durata W3C.
data e ora Formato dateTime W3C.
tempo Formato ora W3C.
dattero I valori di anno sono limitati da 0001 a 9999.
AnnoMese Formato del mese e dell'anno gregoriano W3C.
corda Uno o più caratteri Unicode.

Promozione tipo

La XmlSchemaInference classe esamina i valori di attributo ed elemento uno alla volta. Quando vengono rilevati valori, viene dedotto il tipo senza segno più restrittivo. Se un tipo è stato dedotto per un attributo o un elemento e viene rilevato un nuovo valore che non corrisponde al tipo attualmente dedotto, il tipo dedotto viene promosso a un nuovo tipo che si applica sia al tipo attualmente dedotto che al nuovo valore. La XmlSchemaInference classe considera i valori precedenti quando si promuove il tipo dedotto.

Si considerino ad esempio i frammenti XML seguenti di due documenti XML:

<MyElement1 attr1="12" />

<MyElement1 attr1="52344" />

Quando viene rilevato il primo attr1 valore, il tipo di attr1 viene dedotto in unsignedByte base al valore 12. Quando viene rilevato il secondo attr1 , il tipo viene alzato di livello in unsignedShort base al tipo attualmente dedotto di unsignedByte e al valore 52344corrente .

Si consideri ora il codice XML seguente da due documenti XML:

<MyElement2 attr2="0" />

<MyElement2 attr2="true" />

Quando viene rilevato il primo attr2 valore, il tipo di attr2 viene dedotto in unsignedByte base al valore 0. Quando viene rilevato il secondo attr2, il tipo viene promosso a string basato sul tipo attualmente dedotto di unsignedByte e sul valore true corrente perché la classe XmlSchemaInference non considera i valori precedenti durante la promozione del tipo dedotto. Tuttavia, se entrambe le istanze di attr2 sono state rilevate nello stesso documento XML e non in due documenti XML diversi, come illustrato in precedenza, attr2 sarebbero state dedotte come boolean.

Attributi ignorati dallo spazio dei nomi https://www.w3.org/2001/XMLSchema-instance

Di seguito sono riportati gli attributi che definiscono lo schema che vengono ignorati durante l'inferenza dello schema.

Attributo Descrizione
xsi:type Se viene rilevato un elemento con xsi:type specificato, l'oggetto xsi:type viene ignorato.
xsi:nil Se viene rilevato un elemento con un xsi:nil attributo, la relativa dichiarazione di elemento nello schema dedotto ha il valore di nillable="true". Un elemento con un xsi:nil attributo impostato su true non può avere elementi figlio.
xsi:schemaLocation Se xsi:schemaLocation viene rilevato, viene ignorato.
xsi:noNamespaceSchemaLocation Se xsi:noNamespaceSchemaLocation viene rilevato, viene ignorato.

Vedere anche