Exporter (0) Imprimer
Développer tout

XmlSchemaSet, classe

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

Espace de noms: System.Xml.Schema
Assembly : System.Xml (dans system.xml.dll)

public class XmlSchemaSet
public class XmlSchemaSet
public class XmlSchemaSet
Non applicable.

Dans la version 1.0 de System.Xml, les schémas XML étaient chargés dans une classe XmlSchemaCollection en tant que bibliothèque de schémas. Dans la version 2.0 de System.Xml, les classes XmlValidatingReader et XmlSchemaCollection sont obsolètes ; elles ont été remplacées par la méthode Create et la classe XmlSchemaSet, respectivement.

Le XmlSchemaSet a été introduit pour résoudre plusieurs problèmes, notamment de compatibilité de standards, de performances et d'obsolescence du format du schéma XDR (XML-Data Reduced) de Microsoft.

Les éléments suivants constituent une comparaison entre la classe XmlSchemaCollection et la classe XmlSchemaSet.

XmlSchemaCollection

XmlSchemaSet

Prend en charge les schémas XDR Microsoft et XML W3C.

Prend en charge uniquement les schémas XML W3C.

Les schémas sont compilés lorsque la méthode Add est appelée.

Les schémas ne sont pas compilés lorsque la méthode Add est appelée. Cela fournit une amélioration des performances au cours de la création de la bibliothèque de schémas.

Chaque schéma génère une version compilée individuelle qui peut engendrer des « îlots de schémas ». En conséquence, la portée de toutes les inclusions et les importations se trouve uniquement dans ce schéma.

Les schémas compilés génèrent un schéma logique unique, un « jeu » de schémas. Tous les schémas importés dans un schéma, qui est ajouté au jeu, sont directement ajoutés au jeu. Cela signifie que tous les types sont disponibles pour tous les schémas.

Seul un schéma pour un espace de noms cible particulier peut exister dans la collection.

Plusieurs schémas pour le même espace de noms cible peuvent être ajoutés tant qu'il n'y a pas de conflits de types.

Considérations sur la sécurité

  • Les espaces de noms ou emplacements externes référencés dans des é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 incluant ou importateur est vide ou référence Null (Nothing en Visual Basic), les emplacements externes sont résolus par rapport au répertoire actif. La classe XmlUrlResolver permet de résoudre les schémas externes par défaut. Pour désactiver la résolution des éléments include, import et redefine d'un schéma, définissez la propriété XmlResolver à référence Null (Nothing en Visual Basic).

  • La classe XmlSchemaSet utilise la classe System.Text.RegularExpressions.Regex pour analyser et apparier les expressions régulières dans un schéma XML. La validation de facettes de motifs avec des expressions régulières dans un schéma XML peut impliquer une utilisation accrue de l'unité centrale ; elle doit être évitée dans les scénarios de haute disponibilité.

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

L'exemple suivant utilise l'objet XmlReaderSettings et la méthode System.Xml.XmlReader.Create pour associer un schéma à un document XML. Le schéma est ajouté à la propriété Schemas de l'objet XmlReaderSettings. La valeur de la propriété Schemas est un objet XmlSchemaSet. Le schéma permet de valider la conformité du document XML au modèle de contenu de schéma. Les erreurs de validation du schéma et les avertissements sont gérés par le ValidationEventHandler défini dans l'objet XmlReaderSettings.

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

class XmlSchemaSetExample
{
    static void Main()
    {
        XmlReaderSettings booksSettings = new XmlReaderSettings();
        booksSettings.Schemas.Add("http://www.contoso.com/books", "contosoBooks.xsd");
        booksSettings.ValidationType = ValidationType.Schema;
        booksSettings.ValidationEventHandler += new ValidationEventHandler(booksSettingsValidationEventHandler);

        XmlReader books = XmlReader.Create("contosoBooks.xml", booksSettings);

        while (books.Read()) { }
    }

    static void booksSettingsValidationEventHandler(object sender, ValidationEventArgs e)
    {
        if (e.Severity == XmlSeverityType.Warning)
        {
            Console.Write("WARNING: ");
            Console.WriteLine(e.Message);
        }
        else if (e.Severity == XmlSeverityType.Error)
        {
            Console.Write("ERROR: ");
            Console.WriteLine(e.Message);
        }
    }
}

L'exemple utilise le fichier books.xml comme entrée.

<bookstore xmlns="http://www.contoso.com/books">
  <book genre="autobiography" publicationdate="1981" ISBN="1-861003-11-0">
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </book>
  <book genre="novel" publicationdate="1967" ISBN="0-201-63361-2">
    <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" publicationdate="1991" ISBN="1-861001-57-6">
    <title>The Gorgias</title>
    <author>
      <name>Plato</name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

L'exemple utilise le fichier books.xsd comme entrée.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="bookstore">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="book">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="title" type="xs:string" />
                            <xs:element name="author">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element minOccurs="0" name="name" type="xs:string" />
                                        <xs:element minOccurs="0" name="first-name" type="xs:string" />
                                        <xs:element minOccurs="0" name="last-name" type="xs:string" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="price" type="xs:decimal" />
                        </xs:sequence>
                        <xs:attribute name="genre" type="xs:string" use="required" />
                        <xs:attribute name="publicationdate" type="xs:unsignedShort" use="required" />
                        <xs:attribute name="ISBN" type="xs:string" use="required" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

System.Object
  System.Xml.Schema.XmlSchemaSet

Les membres statiques publics (Shared en Visual Basic) de ce type sont thread-safe. Il n'est pas garanti que les membres d'instance soient thread-safe.

Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile pour Pocket PC, Windows Mobile pour Smartphone, Windows Server 2003, Windows XP Édition Media Center, Windows XP Professionnel Édition x64, Windows XP SP2, Windows XP Starter Edition

Microsoft .NET Framework 3.0 est pris en charge sur Windows Vista, Microsoft Windows XP SP2 et Windows Server 2003 SP1.

.NET Framework

Prise en charge dans : 3.0, 2.0

.NET Compact Framework

Prise en charge dans : 2.0

XNA Framework

Prise en charge dans : 1.0

Ajouts de la communauté

AJOUTER
Microsoft réalise une enquête en ligne pour recueillir votre opinion sur le site Web de MSDN. Si vous choisissez d’y participer, cette enquête en ligne vous sera présentée lorsque vous quitterez le site Web de MSDN.

Si vous souhaitez y participer,
Afficher:
© 2014 Microsoft