Regole per l'inferenza dello schema per tipi di nodo e struttura
In questo argomento viene descritto in che modo il processo di inferenza converte in una struttura XSD (XML Schema Definition Language) i tipi di nodo di un documento XML.
Regole di inferenza dell'elemento
In questa sezione vengono descritte le regole di inferenza per le dichiarazioni dell'elemento. Vengono inferite otto strutture di dichiarazioni dell'elemento:
Elemento di tipo semplice
Elemento vuoto
Elemento vuoto con attributi
Elemento con attributi e contenuto semplice
Elemento con una sequenza di elementi figlio
Elemento con una sequenza di elementi figlio e attributi
Elemento con una sequenza di opzioni di elementi figlio
Elemento con una sequenza di opzioni di elementi figlio e attributi
Nota |
---|
Tutte le dichiarazioni complexType sono inferite come tipi anonimi.L'unico elemento globale inferito è l'elemento radice, tutti gli altri elementi sono locali. |
Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferenza degli schemi da documenti XML.
Elemento di tipo semplice
Nella tabella seguente viene mostrato l'input XML nel metodo InferSchema e lo schema XML generato. L'elemento in grassetto mostra lo schema inferito per l'elemento di tipo semplice.
Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferenza degli schemi da documenti XML.
XML |
Schema |
---|---|
<?xml version="1.0"?> <root>text</root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root" type="xs:string" /> </xs:schema> |
Elemento vuoto
Nella tabella seguente viene mostrato l'input XML nel metodo InferSchema e lo schema XML generato. L'elemento in grassetto mostra lo schema inferito per l'elemento vuoto.
Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferenza degli schemi da documenti XML.
XML |
Schema |
---|---|
<?xml version="1.0"?> <empty/> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="empty" /> </xs:schema> |
Elemento vuoto con attributi
Nella tabella seguente viene mostrato l'input XML nel metodo InferSchema e lo schema XML generato. L'elemento in grassetto mostra lo schema inferito per l'elemento vuoto con attributi.
Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferenza degli schemi da documenti XML.
XML |
Schema |
---|---|
<?xml version="1.0"?> <empty attribute1="text"/> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="empty"> <xs:complexType> <xs:attribute name="attribute1" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:schema> |
Elemento con attributi e contenuto semplice
Nella tabella seguente viene mostrato l'input XML nel metodo InferSchema e lo schema XML generato. Gli elementi in grassetto mostrano lo schema inferito per un elemento con attributi e contenuto semplice.
Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferenza degli schemi da documenti XML.
XML |
Schema |
---|---|
<?xml version="1.0"?> <root attribute1="text">value</root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="attribute1" type="xs:string" use="required" /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:schema> |
Elemento con una sequenza di elementi figlio
Nella tabella seguente viene mostrato l'input XML nel metodo InferSchema e lo schema XML generato. Gli elementi in grassetto mostrano lo schema inferito per un elemento con una sequenza di elementi figlio.
Nota |
---|
Anche se un elemento contiene solo un elemento figlio, viene ancora considerato come una sequenza. |
Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferenza degli schemi da documenti XML.
XML |
Schema |
---|---|
<?xml version="1.0"?> <root> <subElement/> </root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element name="subElement" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> |
Elemento con una sequenza di elementi figlio e attributi
Nella tabella seguente viene mostrato l'input XML nel metodo InferSchema e lo schema XML generato. Gli elementi in grassetto mostrano lo schema inferito per un elemento con una sequenza di elementi figlio e attributi.
Nota |
---|
Anche se un elemento contiene solo un elemento figlio, viene ancora considerato come una sequenza. |
Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferenza degli schemi da documenti XML.
XML |
Schema |
---|---|
<?xml version="1.0"?> <root attribute1="text"> <subElement1/> <subElement2/> </root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:element name="subElement1" /> <xs:element name="subElement2" /> </xs:sequence> <xs:attribute name="attribute1" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:schema> |
Elemento con una sequenza e opzioni di elementi figlio
Nella tabella seguente viene mostrato l'input XML nel metodo InferSchema e lo schema XML generato. Gli elementi in grassetto mostrano lo schema inferito per un elemento con una sequenza e opzione di elementi figlio.
Nota |
---|
L'attributo maxOccurs dell'elemento xs:choice è impostato su "unbounded" nello schema inferito. |
Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferenza degli schemi da documenti XML.
XML |
Schema |
---|---|
<?xml version="1.0"?> <root> <subElement1/> <subElement2/> <subElement1/> </root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:choice maxOccurs="unbounded"> <xs:element name="subElement1" /> <xs:element name="subElement2" /> </xs:choice> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> |
Elemento con una sequenza e opzione di elementi figlio e attributi
Nella tabella seguente viene mostrato l'input XML nel metodo InferSchema e lo schema XML generato. Gli elementi in grassetto mostrano lo schema inferito per un elemento con una sequenza e opzione di elementi figlio e attributi.
Nota |
---|
L'attributo maxOccurs dell'elemento xs:choice è impostato su "unbounded" nello schema inferito. |
Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferenza degli schemi da documenti XML.
XML |
Schema |
---|---|
<?xml version="1.0"?> <root attribute1="text"> <subElement1/> <subElement2/> <subElement1/> </root> |
<?xml version="1.0" encoding="utf-8"?> <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xml ns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="root"> <xs:complexType> <xs:sequence> <xs:choice maxOccurs="unbounded"> <xs:element name="subElement1" /> <xs:element name="subElement2" /> </xs:choice> </xs:sequence> <xs:attribute name="attribute1" type="xs:string" use="required" /> </xs:complexType> </xs:element> </xs:schema> |
Elaborazione degli attributi
Ogni volta che in un nodo viene rilevato un nuovo attributo, questo viene aggiunto alla definizione inferita del nodo con use="required". Al successivo rilevamento dello stesso nodo nell'istanza, il processo di inferenza confronterà gli attributi dell'istanza corrente con quelli già inferiti. Se mancano alcuni nodi già inferiti nell'istanza, use="optional" viene aggiunto alla definizione dell'attributo. I nuovo attributi vengono aggiunti alle dichiarazioni esistenti con use="optional".
Vincoli di occorrenza
Durante il processo di inferenza dello schema, vengono generati gli attributi minOccurs e maxOccurs, per i componenti inferiti di uno schema, con valori uguali a "0" o "1" e "1" o "unbounded". I valori "1" e "unbounded" sono utilizzati solo quando i valori "0" e "1" non sono in grado di convalidare il documento XML (ad esempio, se MinOccurs="0" non descrive con precisione un elemento, si utilizzerà minOccurs="1").
Contenuto misto
Se in un elemento è presente contenuto misto (ad esempio del testo frammisto a elementi), viene generato l'attributo mixed="true" per la definizione del tipo complesso inferito.
Altre regole di inferenza del tipo di nodo
Nella tabella seguente vengono descritte le regole di inferenza per istruzioni di elaborazione, commenti, riferimenti all'entità, CDATA, tipo di documento e nodi dello spazio dei nomi.
Tipo di nodo |
Conversione |
---|---|
Processing instruction |
Ignorato. |
Comment |
Ignorato. |
Entity reference |
La classe XmlSchemaInference non gestisce i riferimenti all'entità. Se un documento XML contiene riferimenti all'entità, è necessario utilizzare un lettore che espande le entità. Ad esempio, è possibile passare un tipo XmlTextReader con la proprietà EntityHandling impostata su ExpandEntities come parametro. Se si rilevano riferimenti all'entità che il lettore non espande, viene generata un'eccezione. |
CDATA |
Le sezioni <![CDATA[ … ]] di un documento XML verranno inferite come xs:string. |
Document type |
Ignorato. |
Spazi dei nomi |
Ignorato. |
Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferenza degli schemi da documenti XML.
Vedere anche
Riferimenti
Concetti
Inferenza degli schemi da documenti XML
Regole per l'inferenza di tipi semplici