XmlSchemaSet per la compilazione di schemiXmlSchemaSet for Schema Compilation

Viene descritto XmlSchemaSet, ovvero una cache in cui è possibile archiviare e convalidare gli schemi XSD (XML Schema Definition Language).Describes the XmlSchemaSet, a cache where XML Schema definition language (XSD) schemas can be stored and validated.

La classe XmlSchemaSetThe XmlSchemaSet Class

Il tipo XmlSchemaSet è una cache in cui è possibile archiviare e convalidare gli schemi XSD (XML Schema Definition Language).The XmlSchemaSet is a cache where XML Schema definition language (XSD) schemas can be stored and validated.

In System.Xml versione 1.0, gli schemi XML venivano caricati in una classe XmlSchemaCollection come una libreria di schemi.In System.Xml version 1.0, XML schemas were loaded into an XmlSchemaCollection class as a library of schemas. In System.Xml versione 2.0, le classi XmlValidatingReader e XmlSchemaCollection sono obsolete e sono state sostituite dai metodi Create e dalla classe XmlSchemaSet rispettivamente.In System.Xml version 2.0, the XmlValidatingReader and the XmlSchemaCollection classes are obsolete, and have been replaced by the Create methods, and the XmlSchemaSet class respectively.

Il tipo XmlSchemaSet è stato introdotto per risolvere una serie di problemi che includono la compatibilità con gli standard, le prestazioni e il formato obsoleto dello schema XDR (XML-Data Reduced) di Microsoft.The XmlSchemaSet has been introduced to fix a number of issues including standards compatibility, performance, and the obsolete Microsoft XML-Data Reduced (XDR) schema format.

Di seguito viene riportato un confronto tra le classi XmlSchemaCollection e XmlSchemaSet.The following is a comparison between the XmlSchemaCollection class and the XmlSchemaSet class.

XmlSchemaCollectionXmlSchemaCollection XmlSchemaSetXmlSchemaSet
Supporta gli schemi XDR di Microsoft e gli schemi XML di W3C.Supports Microsoft XDR and W3C XML schemas. Supporta solo gli schemi XML di W3C.Only supports W3C XML schemas.
Gli schemi vengono compilati quando si chiama il metodo Add.Schemas are compiled when the Add method is called. Gli schemi non vengono compilati quando si chiama il metodo Add.Schemas are not compiled when the Add method is called. Questo fornisce prestazioni migliori durante la creazione della libreria di schemi.This provides a performance improvement during creation of the schema library.
Ogni schema consente di generare una singola versione compilata che può creare "isole di schemi".Each schema generates an individual compiled version that can result in "schema islands." Di conseguenza, tutte le operazioni di inclusione e importazione vengono eseguite nell'ambito di tale schema.As a result, all includes and imports are scoped only within that schema. Gli schemi compilati consentono di generare un singolo schema logico, ovvero un "set" di schemi.Compiled schemas generate a single logical schema, a "set" of schemas. Gli schemi importati all'interno di uno schema vengono aggiunti direttamente al set.Any imported schemas within a schema that are added to the set are directly added to the set themselves. Ciò significa che tutti i tipi sono disponibili per tutti gli schemi.This means that all types are available to all schemas.
Nella raccolta può essere presente solo uno schema per un determinato spazio dei nomi di destinazione.Only one schema for a particular target namespace can exist in the collection. È possibile aggiungere più schemi per lo stesso spazio dei nomi di destinazione, a condizione che non si verifichino conflitti di tipi.Multiple schemas for the same target namespace can be added as long as there are no type conflicts.

Migrazione a XmlSchemaSetMigrating to the XmlSchemaSet

Nel seguente esempio di codice viene fornita una guida per eseguire la migrazione alla nuova classe XmlSchemaSet dalla classe obsoleta XmlSchemaCollection.The following code example provides a guide to migrating to the new XmlSchemaSet class from the obsolete XmlSchemaCollection class. Nell'esempio di codice vengono illustrate le seguenti differenze principali tra le due classi.The code example illustrates the following major differences between the two classes.

Di seguito è riportato l'esempio di codice obsoleto del tipo XmlSchemaCollection.The following is the obsolete XmlSchemaCollection code example.

Dim schemaCollection As XmlSchemaCollection = New XmlSchemaCollection()  
schemaCollection.Add("http://www.contoso.com/retail", "http://www.contoso.com/retail.xsd")  
schemaCollection.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd")  

Dim schema As XmlSchema  

For Each schema in schemaCollection  

   Console.WriteLine(schema.TargetNamespace)  

Next  
XmlSchemaCollection schemaCollection = new XmlSchemaCollection();  
schemaCollection.Add("http://www.contoso.com/retail", "http://www.contoso.com/retail.xsd");  
schemaCollection.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd");  

foreach(XmlSchema schema in schemaCollection)  
{  
   Console.WriteLine(schema.TargetNamespace);  
}  

Di seguito è riportato l'esempio di codice equivalente del tipo XmlSchemaSet.The following is the equivalent XmlSchemaSet code example.

Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()  
schemaSet.Add("http://www.contoso.com/retail", "http://www.contoso.com/retail.xsd")  
schemaSet.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd")  
schemaSet.Compile()  

Dim schema As XmlSchema  

For Each schema in schemaSet.Schemas()  

   Console.WriteLine(schema.TargetNamespace)  

Next  
XmlSchemaSet schemaSet = new XmlSchemaSet();  
schemaSet.Add("http://www.contoso.com/retail", "http://www.contoso.com/retail.xsd");  
schemaSet.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd");  
schemaSet.Compile();  

foreach(XmlSchema schema in schemaSet.Schemas())  
{  
   Console.WriteLine(schema.TargetNamespace);  
}  

Aggiunta e recupero di schemiAdding and Retrieving Schemas

Gli schemi vengono aggiunti a un tipo XmlSchemaSet mediante il metodo Add del tipo XmlSchemaSet.Schemas are added to an XmlSchemaSet using the Add method of the XmlSchemaSet. Quando viene aggiunto a un tipo XmlSchemaSet, uno schema viene associato a un URI dello spazio dei nomi di destinazione.When a schema is added to an XmlSchemaSet, it is associated with a target namespace URI. L'URI dello spazio dei nomi può essere specificato sia come parametro per il metodo Add oppure, se non viene specificato alcuno spazio dei nomi, il tipo XmlSchemaSet usa lo spazio dei nomi definito nello schema.The target namespace URI can either be specified as a parameter to the Add method or if no target namespace is specified, the XmlSchemaSet uses the target namespace defined in the schema.

Gli schemi vengono recuperati da un tipo XmlSchemaSet mediante la proprietà Schemas del tipo XmlSchemaSet.Schemas are retrieved from an XmlSchemaSet using the Schemas property of the XmlSchemaSet. La proprietà Schemas del tipo XmlSchemaSet consente di scorrere gli oggetti XmlSchema contenuti nel tipo XmlSchemaSet.The Schemas property of the XmlSchemaSet allows you to iterate over the XmlSchema objects contained in the XmlSchemaSet. La proprietà Schemas restituisce tutti gli oggetti XmlSchema contenuti nel tipo XmlSchemaSet oppure, se viene fornito un parametro per lo spazio dei nomi di destinazione, restituisce tutti gli oggetti XmlSchema che appartengono allo spazio dei nomi di destinazione.The Schemas property either returns all the XmlSchema objects contained in the XmlSchemaSet, or, given a target namespace parameter, returns all the XmlSchema objects that belong to the target namespace. Se è specificato null come parametro per lo spazio dei nomi di destinazione, la proprietà Schemas restituisce tutti gli schemi privi di uno spazio dei nomi.If null is specified as the target namespace parameter, the Schemas property returns all schemas without a namespace.

Nell'esempio seguente viene aggiunto lo schema books.xsd dello spazio dei nomi http://www.contoso.com/books a un tipo XmlSchemaSet, vengono recuperati tutti gli schemi appartenenti allo spazio dei nomi http://www.contoso.com/books dal tipo XmlSchemaSet, quindi vengono scritti tali schemi nel tipo Console.The following example adds the books.xsd schema in the http://www.contoso.com/books namespace to an XmlSchemaSet, retrieves all schemas that belong to the http://www.contoso.com/books namespace from the XmlSchemaSet, and then writes those schemas to the Console.

Dim schemaSet As XmlSchemaSet = New XmlSchemaSet  
schemaSet.Add("http://www.contoso.com/books", "books.xsd")  

Dim schema As XmlSchema  

For Each schema In schemaSet.Schemas("http://www.contoso.com/books")  

   schema.Write(Console.Out)  

Next  
XmlSchemaSet schemaSet = new XmlSchemaSet();  
schemaSet.Add("http://www.contoso.com/books", "books.xsd");  

foreach (XmlSchema schema in schemaSet.Schemas("http://www.contoso.com/books"))  
{  
   schema.Write(Console.Out);  
}  

Per altre informazioni sull'aggiunta e sul recupero di schemi da un oggetto XmlSchemaSet, vedere la documentazione di riferimento per il metodo Add e per la proprietà Schemas.For more information about adding and retrieving schemas from an XmlSchemaSet object, see the Add method and the Schemas property reference documentation.

Compilazione di schemiCompiling Schemas

Gli schemi di un tipo XmlSchemaSet vengono compilati in un singolo schema logico dal metodo Compile del tipo XmlSchemaSet.Schemas in an XmlSchemaSet are compiled into one logical schema by the Compile method of the XmlSchemaSet.

Nota

A differenza della classe obsoleta XmlSchemaCollection, gli schemi non vengono compilati quando si chiama il metodo Add.Unlike the obsolete XmlSchemaCollection class, schemas are not compiled when the Add method is called.

Se il metodo Compile viene eseguito correttamente, la proprietà IsCompiled del tipo XmlSchemaSet viene impostata su true.If the Compile method executes successfully, the IsCompiled property of the XmlSchemaSet is set to true.

Nota

La proprietà IsCompiled non viene influenzata se si apportano modifiche agli schemi contenuti nel tipo XmlSchemaSet.The IsCompiled property is not affected if schemas are edited while in the XmlSchemaSet. Non viene tenuta traccia degli aggiornamenti dei singoli schemi del tipo XmlSchemaSet.Updates of the individual schemas in the XmlSchemaSet are not tracked. Di conseguenza, la proprietà IsCompiled può essere true anche se viene modificato uno degli schemi contenuti nel tipo XmlSchemaSet, a condizione che non venga aggiunto o rimosso alcuno schema dal tipo XmlSchemaSet.As a result, the IsCompiled property can be true even though one of the schemas contained in the XmlSchemaSet has been altered, as long as no schemas were added or removed from the XmlSchemaSet.

Nell'esempio seguente viene aggiunto il file books.xsd al tipo XmlSchemaSet, quindi viene chiamato il metodo Compile.The following example adds the books.xsd file to the XmlSchemaSet and then calls the Compile method.

Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()  
schemaSet.Add("http://www.contoso.com/books", "books.xsd")  
schemaSet.Compile()  
XmlSchemaSet schemaSet = new XmlSchemaSet();  
schemaSet.Add("http://www.contoso.com/books", "books.xsd");  
schemaSet.Compile();  

Per altre informazioni sulla compilazione di schemi di un tipo XmlSchemaSet, vedere la documentazione di riferimento per il metodo Compile.For more information about compiling schemas in an XmlSchemaSet, see the Compile method reference documentation.

Rielaborazione di schemiReprocessing Schemas

Nella rielaborazione di uno schema di un tipo XmlSchemaSet vengono eseguiti tutti i passaggi di pre-elaborazione eseguiti su uno schema quando si chiama il metodo Add del tipo XmlSchemaSet.Reprocessing a schema in an XmlSchemaSet performs all the preprocessing steps performed on a schema when the Add method of the XmlSchemaSet is called. Se la chiamata al metodo Reprocess viene eseguita correttamente, la proprietà IsCompiled del tipo XmlSchemaSet viene impostata su false.If the call to the Reprocess method is successful, the IsCompiled property of the XmlSchemaSet is set to false.

È necessario usare il metodo Reprocess quando uno schema del tipo XmlSchemaSet è stato modificato dopo la compilazione del tipo XmlSchemaSet.The Reprocess method should be used when a schema in the XmlSchemaSet has been modified after the XmlSchemaSet has performed compilation.

Nel seguente esempio viene illustrata la rielaborazione di uno schema aggiunto al tipo XmlSchemaSet mediante il metodo Reprocess.The following example illustrates reprocessing a schema added to the XmlSchemaSet using the Reprocess method. Dopo aver compilato il tipo XmlSchemaSet usando il metodo Compile e dopo aver modificato lo schema aggiunto al tipo XmlSchemaSet, la proprietà IsCompiled viene impostata su true benché sia stato modificato uno schema del tipo XmlSchemaSet.After the XmlSchemaSet is compiled using the Compile method, and the schema added to the XmlSchemaSet is modified, the IsCompiled property is set to true even though a schema in the XmlSchemaSet has been modified. Se si chiama il metodo Reprocess verranno eseguiti tutti i passaggi di pre-elaborazione eseguiti dal metodo Add e la proprietà IsCompiled verrà impostata su false.Calling the Reprocess method performs all the preprocessing performed by the Add method, and sets the IsCompiled property to false.

Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()  
Dim schema As XmlSchema = schemaSet.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd")  
schemaSet.Compile()  

Dim element As XmlSchemaElement = New XmlSchemaElement()  
schema.Items.Add(element)  
element.Name = "book"  
element.SchemaTypeName = New XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema")  

schemaSet.Reprocess(schema)  
XmlSchemaSet schemaSet = new XmlSchemaSet();  
XmlSchema schema = schemaSet.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd");  
schemaSet.Compile();  

XmlSchemaElement element = new XmlSchemaElement();  
schema.Items.Add(element);  
element.Name = "book";  
element.SchemaTypeName = new XmlQualifiedName("string", "http://www.w3.org/2001/XMLSchema");  

schemaSet.Reprocess(schema);  

Per altre informazioni sulla rielaborazione di uno schema di un tipo XmlSchemaSet, vedere la documentazione di riferimento per il metodo Reprocess.For more information about reprocessing a schema in an XmlSchemaSet, see the Reprocess method reference documentation.

Verifica di uno schemaChecking for a Schema

È possibile usare il metodo Contains del tipo XmlSchemaSet per verificare se uno schema è contenuto in un tipo XmlSchemaSet.You can use the Contains method of the XmlSchemaSet to check if a schema is contained within an XmlSchemaSet. Per eseguire la verifica, il metodo Contains accetta uno spazio dei nomi di destinazione oppure un oggetto XmlSchema.The Contains method takes either a target namespace or an XmlSchema object to check for. In entrambi i casi, il metodo Contains restituisce true se lo schema è contenuto in un tipo XmlSchemaSet; in caso contrario, restituisce false.In either case, the Contains method returns true if the schema is contained within the XmlSchemaSet; otherwise, it returns false.

Per altre informazioni sulla verifica di uno schema, vedere la documentazione di riferimento per il metodo Contains.For more information about checking for a schema, see the Contains method reference documentation.

Rimozione di schemiRemoving Schemas

Gli schemi vengono rimossi da un tipo XmlSchemaSet usando i metodi Remove e RemoveRecursive del tipo XmlSchemaSet.Schemas are removed from an XmlSchemaSet using the Remove and RemoveRecursive methods of the XmlSchemaSet. Il metodo Remove consente di rimuovere dal tipo XmlSchemaSet lo schema specificato, mentre il metodo RemoveRecursive consente di rimuovere dal tipo XmlSchemaSet lo schema specificato e tutti gli schemi da esso importati.The Remove method removes the specified schema from the XmlSchemaSet, while the RemoveRecursive method removes the specified schema and all the schemas it imports from the XmlSchemaSet.

Nell'esempio seguente viene illustrata l'aggiunta di schemi a un tipo XmlSchemaSet e l'uso del metodo RemoveRecursive per rimuovere uno degli schemi e tutti gli schemi da esso importati.The following example illustrates adding multiple schemas to an XmlSchemaSet, then using the RemoveRecursive method to remove one of the schemas and all the schemas it imports.

Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()  
schemaSet.Add("http://www.contoso.com/retail", "http://www.contoso.com/retail.xsd")  
schemaSet.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd")  
schemaSet.Add("http://www.contoso.com/music", "http://www.contoso.com/music.xsd")  

Dim schema As XmlSchema  

For Each schema In schemaSet.Schemas()  

   If schema.TargetNamespace = "http://www.contoso.com/music" Then  
      schemaSet.RemoveRecursive(schema)  
   End If  

Next  
XmlSchemaSet schemaSet = new XmlSchemaSet();  
schemaSet.Add("http://www.contoso.com/retail", "http://www.contoso.com/retail.xsd");  
schemaSet.Add("http://www.contoso.com/books", "http://www.contoso.com/books.xsd");  
schemaSet.Add("http://www.contoso.com/music", "http://www.contoso.com/music.xsd");  

foreach (XmlSchema schema in schemaSet.Schemas())  
{  
   if (schema.TargetNamespace == "http://www.contoso.com/music")  
   {  
      schemaSet.RemoveRecursive(schema);  
   }  
}  

Per altre informazioni sulla rimozione di schemi da un tipo XmlSchemaSet, vedere la documentazione di riferimento per i metodi Remove e RemoveRecursive.For more information about removing schemas from an XmlSchemaSet, see the Remove and RemoveRecursive methods reference documentation.

Risoluzione di schemi e xs:importSchema Resolution and xs:import

Nei seguenti esempi viene descritto il comportamento del tipo XmlSchemaSet per l'importazione di schemi quando sono presenti più schemi per un determinato spazio dei nomi in XmlSchemaSet.The following examples describe the XmlSchemaSet behavior for importing schemas when multiple schemas for a given namespace exist in an XmlSchemaSet.

Ad esempio, si consideri un tipo XmlSchemaSet che contenga più schemi per lo spazio dei nomi http://www.contoso.com.For example, consider an XmlSchemaSet that contains multiple schemas for the http://www.contoso.com namespace. Verrà aggiunto al tipo xs:import uno schema con la seguente direttiva XmlSchemaSet.A schema with the following xs:import directive is added to the XmlSchemaSet.

<xs:import namespace="http://www.contoso.com" schemaLocation="http://www.contoso.com/schema.xsd" />  

Il tipo XmlSchemaSet tenterà di importare uno schema per lo spazio dei nomi http://www.contoso.com caricandolo dall'URL http://www.contoso.com/schema.xsd.The XmlSchemaSet attempts to import a schema for the http://www.contoso.com namespace by loading it from the http://www.contoso.com/schema.xsd URL. Nello schema di importazione sono disponibili solo la dichiarazione dello schema e i tipi dichiarati nel documento dello schema, anche se sono presenti altri documenti dello schema per lo spazio dei nomi http://www.contoso.com nel tipo XmlSchemaSet.Only the schema declaration and types declared in the schema document are available in the importing schema, even though there are other schema documents for the http://www.contoso.com namespace in the XmlSchemaSet. Se non è possibile individuare il file schema.xsd nell'URL http://www.contoso.com/schema.xsd, non verrà importato alcuno schema per lo spazio dei nomi http://www.contoso.com.If the schema.xsd file cannot be located at the http://www.contoso.com/schema.xsd URL, no schema for the http://www.contoso.com namespace is imported into the importing schema.

Convalida di documenti XMLValidating XML Documents

I documenti XML possono essere convalidati in base agli schemi di un tipo XmlSchemaSet.XML documents can be validated against schemas in an XmlSchemaSet. Per eseguire la convalida di un documento XML, è necessario aggiungere uno schema alla proprietà XmlSchemaSet di un oggetto Schemas del tipo XmlReaderSettings oppure aggiungere un tipo XmlSchemaSet alla proprietà Schemas di un oggetto XmlReaderSettings.You validate an XML document by adding a schema to the XmlSchemaSetSchemas property of an XmlReaderSettings object, or by adding an XmlSchemaSet to the Schemas property of an XmlReaderSettings object. Quindi l'oggetto XmlReaderSettings verrà usato dal metodo Create della classe XmlReader per creare un oggetto XmlReader e convalidare il documento XML.The XmlReaderSettings object is then used by the Create method of the XmlReader class to create an XmlReader object and validate the XML document.

Per altre informazioni sulla convalida di documenti XML tramite XmlSchemaSet, vedere Convalida di XML Schema (XSD) con XmlSchemaSet.For more information about validating XML documents using an XmlSchemaSet, see XML Schema (XSD) Validation with XmlSchemaSet.

Vedere ancheSee Also

Add
Schemas
Contains
Compile
Reprocess
Remove
RemoveRecursive
XmlSchemaSet come cache degli schemiXmlSchemaSet as a Schema Cache
Convalida di XML Schema (XSD) con XmlSchemaSetXML Schema (XSD) Validation with XmlSchemaSet