Condividi tramite


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

In questo argomento viene descritto come il processo di inferenza dello schema converte i tipi di nodo in un documento XML in una struttura XSD (XML Schema Definition Language).

Regole di inferenza degli elementi

In questa sezione vengono descritte le regole di inferenza per le dichiarazioni di elemento. Esistono otto strutture di dichiarazioni di elementi che verranno dedotti:

  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 figli

  6. Elemento con una sequenza di elementi figli e attributi

  7. Elemento con una sequenza di scelte degli elementi figlio

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

Annotazioni

Tutte le complexType dichiarazioni vengono inferite come tipi anonimi. L'unico elemento globale dedotto è l'elemento radice; tutti gli altri elementi sono locali.

Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferring Schemas from XML Documents.

Elemento tipizzato semplice

La tabella seguente illustra l'input XML per il InferSchema metodo e l'XML Schema generato. L'elemento in grassetto mostra lo schema dedotto per l'elemento di tipo semplice.

Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferring Schemas from XML Documents.

XML Diagramma
<?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

La tabella seguente illustra l'input XML per il InferSchema metodo e l'XML Schema generato. L'elemento in grassetto mostra lo schema dedotto per l'elemento vuoto.

Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferring Schemas from XML Documents.

XML Diagramma
<?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

La tabella seguente illustra l'input XML per il InferSchema metodo e l'XML Schema generato. Gli elementi in grassetto mostrano lo schema dedotto per l'elemento vuoto con attributi.

Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferring Schemas from XML Documents.

XML Diagramma
<?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

La tabella seguente illustra l'input XML per il InferSchema metodo e l'XML Schema generato. Gli elementi in grassetto mostrano lo schema dedotto per un elemento con attributi e contenuto semplice.

Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferring Schemas from XML Documents.

XML Diagramma
<?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 figli

La tabella seguente illustra l'input XML per il InferSchema metodo e l'XML Schema generato. Gli elementi in grassetto mostrano lo schema dedotto per un elemento con una sequenza di elementi figlio.

Annotazioni

Anche se un elemento ha un solo elemento figlio, viene comunque considerato come una sequenza.

Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferring Schemas from XML Documents.

XML Diagramma
<?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

La tabella seguente illustra l'input XML per il InferSchema metodo e l'XML Schema generato. Gli elementi in grassetto mostrano lo schema dedotto per un elemento con una sequenza di elementi figlio e attributi.

Annotazioni

Anche se un elemento ha un solo elemento figlio, viene comunque considerato come una sequenza.

Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferring Schemas from XML Documents.

XML Diagramma
<?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 scelte di elementi figlio

La tabella seguente illustra l'input XML per il InferSchema metodo e l'XML Schema generato. Gli elementi in grassetto mostrano lo schema dedotto per un elemento con una sequenza e la scelta di elementi figli.

Annotazioni

L'attributo maxOccurs dell'elemento xs:choice è impostato su "unbounded" nello schema dedotto.

Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferring Schemas from XML Documents.

XML Diagramma
<?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 una scelta di elementi figlio e attributi

La tabella seguente illustra l'input XML per il InferSchema metodo e l'XML Schema generato. Gli elementi in grassetto mostrano lo schema dedotto per un elemento con una sequenza e la scelta di elementi e attributi figli.

Annotazioni

L'attributo maxOccurs dell'elemento xs:choice è impostato su "unbounded" nello schema dedotto.

Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferring Schemas from XML Documents.

XML Diagramma
<?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 viene rilevato un nuovo attributo all'interno di un nodo, viene aggiunto alla definizione dedotta del nodo con use="required". Alla successiva individuazione dello stesso nodo nell'istanza, il processo di inferenza confronta gli attributi dell'istanza corrente con quelli già dedotti. Se nell'istanza mancano alcuni dei già dedotti, use="optional" viene aggiunto alla definizione dell'attributo. I nuovi attributi vengono aggiunti alle dichiarazioni esistenti con use="optional".

Vincoli di occorrenza

Durante il processo di inferenza dello schema, gli minOccurs attributi e maxOccurs vengono generati, per i componenti dedotti di uno schema, con i valori "0" o "1" e "1" o "unbounded". I valori "1" e "unbounded" vengono utilizzati solo quando i valori "0" e "1" non possono convalidare il documento XML, ad esempio se MinOccurs="0" non descrive in modo accurato un elemento. minOccurs="1"

Contenuto misto

Se un elemento contiene contenuto misto(ad esempio testo interspersato con elementi), l'attributo mixed="true" viene generato per la definizione di tipo complesso dedotto.

Altre regole di inferenza del tipo di nodo

Nella tabella seguente vengono descritte le regole di inferenza per l'elaborazione di istruzioni, commenti, riferimenti alle entità, CDATA, tipo di documento e nodi dello spazio dei nomi.

Tipo di nodo Traduzione
Istruzione di elaborazione Ignorato.
Commento Ignorato.
Informazioni di riferimento sulle entità La XmlSchemaInference classe non gestisce i riferimenti all'entità. Se un documento XML contiene riferimenti all'entità, è necessario usare un lettore che espande le entità. Ad esempio, è possibile passare un oggetto XmlTextReader con la EntityHandling proprietà impostata su ExpandEntities come parametro. Se vengono rilevati riferimenti a entità e il lettore non espande le entità, viene generata un'eccezione.
CDATA Tutte le <![CDATA[ … ]] sezioni di un documento XML verranno dedotte come xs:string.
Tipo di documento Ignorato.
Namespace Ignorato.

Per ulteriori informazioni sul processo di inferenza dello schema, vedere Inferring Schemas from XML Documents.

Vedere anche