Condividi tramite


Regole per l'inferenza di tipi semplici

Viene descritto come la classe XmlSchemaInference inferisce il tipo di dati per attributi ed elementi.

La classe XmlSchemaInference inferisce il tipo di dati per attributi ed elementi come tipi semplici. In questa sezione vengono descritti i tipi che possono essere inferiti, la risoluzione delle differenze di più valori diversi in un unico tipo e la gestione degli attributi xsi di definizione dello schema.

Tipi inferiti

La classe XmlSchemaInference inferisce i valori di elementi e attributi come tipi semplici e include un attributo Type nello schema risultante. Tutti i tipi inferiti sono tipi semplici. I tipi o i facet di base non sono inclusi nello schema risultante.

Rappresentazione grafica dell'inferenza di tipi semplici

I valori vengono esaminati singolarmente quando vengono rilevati nel documento XML. Il tipo viene inferito per il valore riscontrato nel momento in cui viene esaminato. Se è stato inferito un tipo per un attributo o un elemento e viene rilevato un valore per l'attributo o elemento che non corrisponde al tipo inferito, la classe XmlSchemaInference promuove il tipo per un set di regole. Tali regole vengono illustrate nella sezione Promozione dei tipi, più avanti in questo argomento.

Nella tabella seguente sono elencati i tipi che possono essere inferiti per lo schema risultante.

Tipo semplice

Descrizione

boolean

True, false, 0, 1.

byte

Numeri interi nell'intervallo compreso tra –128 e 127.

unsignedByte

Numeri interi nell'intervallo compreso tra 0 e 255.

short

Numeri interi nell'intervallo compreso tra –32768 e 32767.

unsignedShort

Numeri interi nell'intervallo compreso tra 0 e 65535.

int

Numeri interi nell'intervallo compreso tra –2147483648 e 2147483647.

unsignedInt

Numeri interi nell'intervallo compreso tra 0 e 4294967295.

long

Numeri interi nell'intervallo compreso tra –9223372036854775808 e 9223372036854775807.

unsignedLong

Numeri interi nell'intervallo compreso tra 0 e 18446744073709551615.

integer

Un numero finito di cifre che può essere preceduto dal prefisso "-".

decimal

Valori numerici che contengono da 0 a 28 cifre di precisione.

float

Decimali eventualmente seguiti da "E" o "e", quindi da un numero intero che rappresenta l'esponente. I valori decimali possono essere compresi tra -16777216 e 16777216 I valori dell'esponente tra –149 e 104.

Il tipo float consente ai valori speciali di rappresentare i valori infinito e quelli non numerici. I valori speciali per float sono i seguenti: 0, -0, INF - INF, NaN.

double

Analogo a float, ad eccezione del fatto che i valori decimali possono essere compresi tra -9007199254740992 e 9007199254740992 e i valori dell'esponente tra –1075 e 970.

Il tipo double consente ai valori speciali di rappresentare i valori infinito e quelli non numerici. I valori speciali per float sono i seguenti: 0, -0, INF - INF, NaN.

duration

Formato della durata W3C.

dateTime

Formato dateTime W3C.

time

Formato di ora W3C.

date

I valori relativi agli anni sono compresi tra 0001 e 9999.

gYearMonth

Formato dell'anno e del mese gregoriano W3C.

string

Uno o più caratteri Unicode.

Promozione dei tipi

La classe XmlSchemaInference esamina i valori di attributi ed elementi singolarmente. Quando i valori vengono rilevati, viene inferito il tipo più restrittivo e senza segno. Se è stato inferito un tipo per un attributo o elemento ed è stato rilevato un nuovo valore che non corrisponde al tipo inferito, quest'ultimo viene promosso a un nuovo tipo applicabile sia al tipo inferito che al nuovo valore. Durante la promozione del tipo inferito, la classe XmlSchemaInference valuta i valori precedenti.

Ad esempio, si considerino i seguenti frammenti XML provenienti da due documenti XML:

<MyElement1 attr1="12" />

<MyElement1 attr1="52344" />

Quando viene rilevato il primo valore attr1, il tipo di attr1 viene inferito come unsignedByte in base al valore 12. Quando viene rilevato il secondo valore attr1, il tipo viene promosso a unsignedShort in base al tipo inferito di unsignedByte e al valore corrente 52344.

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

<MyElement2 attr2="0" />

<MyElement2 attr2="true" />

Quando viene rilevato il primo valore attr2, il tipo di attr2 viene inferito come unsignedByte in base al valore 0. Quando viene rilevato il secondo valore attr2, il tipo viene promosso a string in base al tipo inferito di unsignedByte e al valore corrente true, poiché la classe XmlSchemaInference valuta i valori precedenti durante la promozione del tipo dedotto. Se tuttavia entrambe le istanze di attr2 fossero state rilevate all'interno dello stesso documento XML e non in due documenti XML diversi come descritto in precedenza, attr2 sarebbe stato inferito come boolean.

Attributi ignorati dallo spazio dei nomi dell'istanza dello schema XML all'indirizzo http://www.w3.org/2001/XMLSchema-instance (informazioni in lingua inglese)

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

Attributo

Descrizione

xsi:type

Se viene rilevato un elemento con l'attributo xsi:type specificato, xsi:type viene ignorato.

xsi:nil

Se viene rilevato un elemento con un attributo xsi:nil, la dichiarazione dell'elemento nello schema inferito presenta il valore nillable="true". Un elemento con un attributo xsi:nil impostato su true non può contenere elementi figlio.

xsi:schemaLocation

Se rilevato, l'attributo xsi:schemaLocation viene ignorato.

xsi:noNamespaceSchemaLocation

Se rilevato, l'attributo xsi:noNamespaceSchemaLocation viene ignorato.

Vedere anche

Concetti

Inferenza degli schemi da documenti XML

Regole per l'inferenza dello schema per tipi di nodo e struttura

Altre risorse

SOM (Schema Object Model) XML