XmlSchemaSet Classe
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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à sunull.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). |