XmlSchemaSet Classe

Définition

Contient un cache de schémas XSD (XML Schema Definition Language).

public ref class XmlSchemaSet
public class XmlSchemaSet
type XmlSchemaSet = class
Public Class XmlSchemaSet
Héritage
XmlSchemaSet

Exemples

L’exemple suivant valide un fichier XML à l’aide de schémas stockés dans le XmlSchemaSet. L'espace de noms dans le fichier XML, urn:bookstore-schema, identifie le schéma dans l'objet XmlSchemaSet à utiliser pour la validation. La sortie de l’exemple montre que le fichier XML présente deux violations de schéma :

  • Le premier <book> élément contient un <author> élément, mais aucun <title> ou <price> élément.

  • L’élément <author> dans le dernier <book> élément manque un élément <first-name> et <last-name> et contient à la place un élément <name> non valide.

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

L’exemple utilise les deux fichiers d’entrée suivants.

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>

Remarques

Important

  • N’utilisez pas de schémas provenant de sources ou d’emplacements inconnus ou non approuvés. Cela compromettra la sécurité de votre code.
  • Les schémas XML (y compris les schémas inline) sont intrinsèquement vulnérables aux attaques par déni de service ; ne les acceptent pas dans des scénarios non approuvés.
  • Les messages d’erreur de validation de schéma et les exceptions peuvent exposer des informations sensibles sur le modèle de contenu ou les chemins d’URI du fichier de schéma. Veillez à ne pas exposer ces informations aux appelants non approuvés.
  • Des considérations de sécurité supplémentaires sont abordées dans la section « Considérations relatives à la sécurité ».

XmlSchemaSet est un cache ou une bibliothèque où vous pouvez stocker des schémas XSD (XML Schema Definition Language). XmlSchemaSet améliore les performances en mettant en cache les schémas en mémoire au lieu de les accéder à partir d’un fichier ou d’une URL. Chaque schéma est identifié par l'URI et l'emplacement de l'espace de noms spécifiés lors de l'ajout du schéma à l'ensemble. Vous utilisez la XmlReaderSettings.Schemas propriété pour affecter l’objet XmlSchemaSet qu’un lecteur XML doit utiliser pour la validation des données.

Considérations relatives à la sécurité

  • N’utilisez pas de schémas provenant de sources inconnues ou non approuvées. Cela compromettra la sécurité de votre code. Les espaces de noms ou emplacements externes référencés dans les éléments include, import et redefine d’un schéma sont résolus par rapport à l’URI de base du schéma qui les inclut ou les importe. Par exemple, si l’URI de base du schéma d’inclusion ou d’importation est vide ou null, les emplacements externes sont résolus par rapport au répertoire actuel. La XmlUrlResolver classe est utilisée pour résoudre les schémas externes par défaut. Pour désactiver la résolution des éléments d’un schéma d’inclusion, d’importation et redéfinition, définissez la propriété XmlSchemaSet.XmlResolver sur null.

  • La XmlSchemaSet classe utilise la System.Text.RegularExpressions.Regex classe pour analyser et faire correspondre les expressions régulières dans un schéma XML. La validation des facettes de modèle avec des expressions régulières dans un schéma XML peut impliquer une utilisation accrue du processeur et doit être évitée dans les scénarios de haute disponibilité.

  • Les exceptions levées suite à l’utilisation de la XmlSchemaSet classe, telles que la XmlSchemaException classe, peuvent contenir des informations sensibles qui ne doivent pas être exposées dans des scénarios non approuvés. Par exemple, la SourceUri propriété d’un XmlSchemaException retourne le chemin URI vers le fichier de schéma à l'origine de l’exception. La propriété SourceUri ne doit pas être exposée dans des scénarios non fiables. Les exceptions doivent être gérées correctement afin que ces informations sensibles ne soient pas exposées dans des scénarios non approuvés.

Constructeurs

Nom Description
XmlSchemaSet()

Initialise une nouvelle instance de la classe XmlSchemaSet.

XmlSchemaSet(XmlNameTable)

Initialise une nouvelle instance de la XmlSchemaSet classe avec le fichier spécifié XmlNameTable.

Propriétés

Nom Description
CompilationSettings

Obtient ou définit la XmlSchemaCompilationSettings valeur pour le XmlSchemaSet.

Count

Obtient le nombre de schémas XSD (Logical XML Schema Definition Language) dans le XmlSchemaSet.

GlobalAttributes

Obtient tous les attributs globaux dans tous les schémas XSD (XML Schema Definition Language) dans le XmlSchemaSet.

GlobalElements

Obtient tous les éléments globaux de tous les schémas XSD (XML Schema Definition Language) dans le XmlSchemaSet.

GlobalTypes

Obtient tous les types globaux simples et complexes dans tous les schémas XSD (XML Schema Definition Language) dans le XmlSchemaSet.

IsCompiled

Obtient une valeur qui indique si les schémas XSD (XML Schema Definition Language) dans le fichier XmlSchemaSet ont été compilés.

NameTable

Obtient la valeur par défaut XmlNameTable utilisée par le XmlSchemaSet chargement de nouveaux schémas XSD (XML Schema Definition Language).

XmlResolver

Définit l’élément XmlResolver utilisé pour résoudre les espaces de noms ou les emplacements référencés dans les éléments include et import d’un schéma.

Méthodes

Nom Description
Add(String, String)

Ajoute le schéma XSD (XML Schema Definition Language) à l’URL spécifiée dans le XmlSchemaSet.

Add(String, XmlReader)

Ajoute le schéma XSD (XML Schema Definition Language) contenu dans le XmlReaderXmlSchemaSetfichier .

Add(XmlSchema)

Ajoute l’élément donné XmlSchema au XmlSchemaSet.

Add(XmlSchemaSet)

Ajoute tous les schémas XSD (XML Schema Definition Language) dans le XmlSchemaSetfichier donnéXmlSchemaSet.

Compile()

Compile les schémas XSD (XML Schema Definition Language) ajoutés à un XmlSchemaSet schéma logique.

Contains(String)

Indique si un schéma XSD (XML Schema Definition Language) avec l’URI d’espace de noms cible spécifié se trouve dans le XmlSchemaSet.

Contains(XmlSchema)

Indique si l’objet XSD (XML Schema Definition Language) XmlSchema spécifié se trouve dans le XmlSchemaSet.

CopyTo(XmlSchema[], Int32)

Copie tous les XmlSchema objets du XmlSchemaSet tableau donné, en commençant à l’index donné.

Equals(Object)

Détermine si l’objet spécifié est égal à l’objet actuel.

(Hérité de Object)
GetHashCode()

Sert de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient la Type de l’instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Objectactuel.

(Hérité de Object)
Remove(XmlSchema)

Supprime le schéma XSD (XML Schema Definition Language) spécifié de l’objet XmlSchemaSet.

RemoveRecursive(XmlSchema)

Supprime le schéma XSD (Xml Schema Definition Language) spécifié et tous les schémas qu’il importe à partir du XmlSchemaSet.

Reprocess(XmlSchema)

Retraite un schéma XSD (XML Schema Definition Language) qui existe déjà dans le XmlSchemaSet.

Schemas()

Retourne une collection de tous les schémas XSD (XML Schema Definition Language) dans le XmlSchemaSet.

Schemas(String)

Retourne une collection de tous les schémas XSD (XML Schema Definition Language) dans l’espace XmlSchemaSet de noms donné.

ToString()

Retourne une chaîne qui représente l’objet actuel.

(Hérité de Object)

Événements

Nom Description
ValidationEventHandler

Spécifie un gestionnaire d’événements pour recevoir des informations sur les erreurs de validation de schéma XSD (XML Schema Definition Language).

S’applique à