Condividi tramite


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:

  1. Elemento di tipo semplice

  2. Elemento vuoto

  3. Elemento vuoto con attributi

  4. Elemento con attributi e contenuto semplice

  5. Elemento con una sequenza di elementi figlio

  6. Elemento con una sequenza di elementi figlio e attributi

  7. Elemento con una sequenza di opzioni di elementi figlio

  8. Elemento con una sequenza di opzioni di elementi figlio e attributi

NotaNota

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.

NotaNota

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.

NotaNota

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.

NotaNota

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.

NotaNota

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

XmlSchemaInference

Concetti

Inferenza di uno schema XML

Inferenza degli schemi da documenti XML

Regole per l'inferenza di tipi semplici

Altre risorse

SOM (Schema Object Model) XML