Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 52344
corrente .
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. |