XmlSchemaSet Classe

Definizione

Contiene una cache di schemi XSD (XML Schema Definition Language).

public ref class XmlSchemaSet
public class XmlSchemaSet
type XmlSchemaSet = class
Public Class XmlSchemaSet
Ereditarietà
XmlSchemaSet

Esempio

Nell'esempio seguente viene convalidato un file XML usando gli schemi archiviati in XmlSchemaSet. Lo spazio dei nomi nel file XML, urn:bookstore-schema, identifica quale schema nel XmlSchemaSet usare per la convalida. L'output dell'esempio mostra che il file XML presenta due violazioni dello schema:

  • Il primo <book> elemento contiene un <author> elemento ma nessun <title> elemento o <price> .

  • L'elemento <author> nell'ultimo <book> elemento manca di un elemento <first-name> e di un elemento <last-name> e ha invece un elemento <name> non valido.

using System;
using System.Xml;
using System.Xml.Schema;
using System.IO;

public class Sample
{
  public static void Main() {

    // Create the XmlSchemaSet class.
    XmlSchemaSet sc = new XmlSchemaSet();

    // Add the schema to the collection.
    sc.Add("urn:bookstore-schema", "books.xsd");

    // Set the validation settings.
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ValidationType = ValidationType.Schema;
    settings.Schemas = sc;
    settings.ValidationEventHandler += ValidationCallBack;

    // Create the XmlReader object.
    XmlReader reader = XmlReader.Create("booksSchemaFail.xml", settings);

    // Parse the file.
    while (reader.Read());
  }

  // Display any validation errors.
  private static void ValidationCallBack(object sender, ValidationEventArgs e) {
    Console.WriteLine($"Validation Error:\n   {e.Message}\n");
  }
}
// The example displays output like the following:
//   Validation Error:
//        The element 'book' in namespace 'urn:bookstore-schema' has invalid child element 'author'
//        in namespace 'urn:bookstore-schema'. List of possible elements expected: 'title' in
//        namespace 'urn:bookstore-schema'.
//
//    Validation Error:
//       The element 'author' in namespace 'urn:bookstore-schema' has invalid child element 'name'
//       in namespace 'urn:bookstore-schema'. List of possible elements expected: 'first-name' in
//       namespace 'urn:bookstore-schema'.
Imports System.Xml
Imports System.Xml.Schema
Imports System.IO

Public Module Sample 
  Public Sub Main() 

    ' Create the XmlSchemaSet class.
    Dim sc as XmlSchemaSet = new XmlSchemaSet()

    ' Add the schema to the collection.
    sc.Add("urn:bookstore-schema", "books.xsd")

    ' Set the validation settings.
    Dim settings as XmlReaderSettings = new XmlReaderSettings()
    settings.ValidationType = ValidationType.Schema
    settings.Schemas = sc
    AddHandler settings.ValidationEventHandler, AddressOf ValidationCallBack
 
    ' Create the XmlReader object.
    Dim reader as XmlReader = XmlReader.Create("booksSchemaFail.xml", settings)

    ' Parse the file. 
    While reader.Read()
    End While
    
  End Sub

  ' Display any validation errors.
  Private Sub ValidationCallBack(sender as object, e as ValidationEventArgs) 
    Console.WriteLine($"Validation Error:{vbCrLf}   {e.Message}")
    Console.WriteLine()
  End Sub
End Module
' The example displays output like the following:
'   Validation Error: 
'        The element 'book' in namespace 'urn:bookstore-schema' has invalid child element 'author' 
'        in namespace 'urn:bookstore-schema'. List of possible elements expected: 'title' in 
'        namespace 'urn:bookstore-schema'.
'
'    Validation Error: 
'       The element 'author' in namespace 'urn:bookstore-schema' has invalid child element 'name' 
'       in namespace 'urn:bookstore-schema'. List of possible elements expected: 'first-name' in 
'       namespace 'urn:bookstore-schema'.

Input

Nell'esempio vengono usati i due file di input seguenti.

booksSchemaFail.xml:

<?xml version='1.0'?>
<bookstore xmlns="urn:bookstore-schema">
  <book>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
  </book>
  <book genre="novel">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </book>
  <book genre="philosophy">
    <title>The Gorgias</title>
    <author>
      <name>Plato</name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

books.xsd:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="urn:bookstore-schema"
    elementFormDefault="qualified"
    targetNamespace="urn:bookstore-schema">

 <xsd:element name="bookstore" type="bookstoreType"/>

 <xsd:complexType name="bookstoreType">
  <xsd:sequence maxOccurs="unbounded">
   <xsd:element name="book"  type="bookType"/>
  </xsd:sequence>
 </xsd:complexType>

 <xsd:complexType name="bookType">
  <xsd:sequence>
   <xsd:element name="title" type="xsd:string"/>
   <xsd:element name="author" type="authorName"/>
   <xsd:element name="price"  type="xsd:decimal"/>
  </xsd:sequence>
  <xsd:attribute name="genre" type="xsd:string"/>
 </xsd:complexType>

 <xsd:complexType name="authorName">
  <xsd:sequence>
   <xsd:element name="first-name"  type="xsd:string"/>
   <xsd:element name="last-name" type="xsd:string"/>
  </xsd:sequence>
 </xsd:complexType>

</xsd:schema>

Commenti

Important

  • Non usare schemi da origini o percorsi sconosciuti o non attendibili. In questo modo verrà compromessa la sicurezza del codice.
  • Gli XML Schema (inclusi gli schemi inline) sono intrinsecamente vulnerabili agli attacchi Denial of Service; non accettarli in scenari non attendibili.
  • I messaggi di errore di convalida dello schema e le eccezioni possono esporre informazioni riservate sul modello di contenuto o i percorsi URI al file di schema. Prestare attenzione a non esporre queste informazioni ai chiamanti non attendibili.
  • Altre considerazioni sulla sicurezza sono illustrate nella sezione "Considerazioni sulla sicurezza".

XmlSchemaSet è una cache o una libreria in cui è possibile archiviare schemi XSD (XML Schema Definition Language). XmlSchemaSet migliora le prestazioni memorizzando nella cache gli schemi in memoria anziché accedervi da un file o da un URL. Ogni schema viene identificato dall'URI dello spazio dei nomi e dal percorso specificato quando lo schema è stato aggiunto al set. Usa la proprietà XmlReaderSettings.Schemas per assegnare all'oggetto che un lettore XML XmlSchemaSet deve utilizzare per la convalida dei dati.

Considerazioni relative alla sicurezza

  • Non usare schemi da origini sconosciute o non attendibili. In questo modo verrà compromessa la sicurezza del codice. Gli spazi dei nomi esterni o i percorsi a cui si fa riferimento in includono, importare e ridefinire gli elementi di uno schema vengono risolti in relazione all'URI di base dello schema che li include o li importa. Ad esempio, se l'URI di base dello schema di inclusione o importazione è vuoto o null, i percorsi esterni vengono risolti rispetto alla directory corrente. La XmlUrlResolver classe viene usata per risolvere gli schemi esterni per impostazione predefinita. Per disabilitare la risoluzione di elementi di inclusione, importazione e ridefinizione di uno schema, impostare la XmlSchemaSet.XmlResolver proprietà su null.

  • La XmlSchemaSet classe usa la System.Text.RegularExpressions.Regex classe per analizzare e trovare le corrispondenze con le espressioni regolari in uno schema XML. La convalida dei facet del modello con espressioni regolari in un XML Schema può comportare un aumento dell'utilizzo della CPU e deve essere evitata in scenari a disponibilità elevata.

  • Le eccezioni generate in seguito all'uso della XmlSchemaSet classe , ad esempio la XmlSchemaException classe , possono contenere informazioni riservate che non devono essere esposte in scenari non attendibili. Ad esempio, la SourceUri proprietà di un XmlSchemaException oggetto restituisce il percorso dell'URI al file di schema che ha causato l'eccezione. La SourceUri proprietà non deve essere esposta in scenari non attendibili. Le eccezioni devono essere gestite correttamente in modo che queste informazioni riservate non vengano esposte in scenari non attendibili.

Costruttori

Nome Descrizione
XmlSchemaSet()

Inizializza una nuova istanza della classe XmlSchemaSet.

XmlSchemaSet(XmlNameTable)

Inizializza una nuova istanza della XmlSchemaSet classe con l'oggetto specificato XmlNameTable.

Proprietà

Nome Descrizione
CompilationSettings

Ottiene o imposta l'oggetto XmlSchemaCompilationSettings per l'oggetto XmlSchemaSet.

Count

Ottiene il numero di schemi XSD (XML Schema Definition Language) logici nell'oggetto XmlSchemaSet.

GlobalAttributes

Ottiene tutti gli attributi globali in tutti gli schemi XSD (XML Schema Definition Language) in XmlSchemaSet.

GlobalElements

Ottiene tutti gli elementi globali in tutti gli schemi XSD (XML Schema Definition Language) in XmlSchemaSet.

GlobalTypes

Ottiene tutti i tipi globali semplici e complessi in tutti gli schemi XSD (XML Schema Definition Language) in XmlSchemaSet.

IsCompiled

Ottiene un valore che indica se gli schemi XSD (XML Schema Definition Language) in XmlSchemaSet sono stati compilati.

NameTable

Ottiene l'impostazione predefinita utilizzata XmlNameTable da durante il XmlSchemaSet caricamento di nuovi schemi XSD (XML Schema Definition Language).

XmlResolver

Imposta l'oggetto XmlResolver utilizzato per risolvere gli spazi dei nomi o i percorsi a cui si fa riferimento in includere e importare elementi di uno schema.

Metodi

Nome Descrizione
Add(String, String)

Aggiunge lo schema XSD (XML Schema Definition Language) all'URL specificato in XmlSchemaSet.

Add(String, XmlReader)

Aggiunge lo schema XSD (XML Schema Definition Language) contenuto in XmlReader a XmlSchemaSet.

Add(XmlSchema)

Aggiunge l'oggetto specificato XmlSchema all'oggetto XmlSchemaSet.

Add(XmlSchemaSet)

Aggiunge tutti gli schemi XSD (XML Schema Definition Language) nell'oggetto specificato XmlSchemaSet all'oggetto XmlSchemaSet.

Compile()

Compila gli schemi XSD (XML Schema Definition Language) aggiunti a XmlSchemaSet in un unico schema logico.

Contains(String)

Indica se uno schema XSD (XML Schema Definition Language) con l'URI dello spazio dei nomi di destinazione specificato si trova in XmlSchemaSet.

Contains(XmlSchema)

Indica se l'oggetto XSD (XML Schema Definition Language) XmlSchema specificato si trova nell'oggetto XmlSchemaSet.

CopyTo(XmlSchema[], Int32)

Copia tutti gli XmlSchema oggetti dall'oggetto XmlSchemaSet alla matrice specificata, a partire dall'indice specificato.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene il Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale del Objectcorrente.

(Ereditato da Object)
Remove(XmlSchema)

Rimuove lo schema XSD (XML Schema Definition Language) specificato dall'oggetto XmlSchemaSet.

RemoveRecursive(XmlSchema)

Rimuove lo schema XSD (XML Schema Definition Language) specificato e tutti gli schemi importati dall'oggetto XmlSchemaSet.

Reprocess(XmlSchema)

Rielabora uno schema XSD (XML Schema Definition Language) già esistente in XmlSchemaSet.

Schemas()

Restituisce una raccolta di tutti gli schemi XSD (XML Schema Definition Language) in XmlSchemaSet.

Schemas(String)

Restituisce una raccolta di tutti gli schemi XSD (XML Schema Definition Language) nell'oggetto XmlSchemaSet che appartengono allo spazio dei nomi specificato.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Eventi

Nome Descrizione
ValidationEventHandler

Specifica un gestore eventi per la ricezione di informazioni sugli errori di convalida dello schema XSD (XML Schema Definition Language).

Si applica a