COMMENT FAIRE : Validation d'un document XML à l'aide de schémas DTD, XDR ou XSD dans Visual C# .NET

Traductions disponibles Traductions disponibles
Numéro d'article: 307379 - Voir les produits auxquels s'applique cet article
Ancien nº de publication de cet article : F307379
Agrandir tout | Réduire tout

Sommaire

Résumé

Cet article explique comment appliquer une DTD (Document Type Definition), un schéma Microsoft XDR (XML-Data Reduced) ou un schéma XSD (XML Schema Definition Language) à un document XML (Extensible Markup Language). Cet article indique également la façon d'utiliser la classe XmlValidatingReader en vue de comparer un document XML avec la grammaire spécifiée, ainsi que la classe XmlSchemaCollection en vue de mettre les schémas dans la mémoire cache en vue d'optimiser la validation XML.

Les documents XML contiennent des éléments et des attributs. Ils constituent une méthode flexible et performante d'échange de données entre des applications et des organisations. Pour spécifier la structure et le contenu autorisés pour un document XML, vous pouvez écrire un schéma DTD, XDR ou XSD. Bien que les schémas XSD constituent la méthode privilégiée pour spécifier des grammaires XML dans Microsoft .NET Framework, les schémas DTD et XDR sont également pris en charge.

Conditions requises

Cet article suppose que vous connaissez les sujets suivants :
  • Syntaxe Microsoft Visual C# .NET ou Microsoft Visual Basic .NET
  • Concepts XML, y compris les problèmes liés à la validation

Création d'un document XML

  1. Ouvrez Visual Studio .NET.
  2. Créez un nouveau fichier XML sur votre ordinateur local.
  3. Ajoutez les données suivantes au document XML pour présenter un produit dans un catalogue :
    <Product ProductID="123">
       
    <ProductName>
    Maillot de rugby
    </ProductName>
    </Product>
    
  4. Enregistrez le fichier sous le nom Product.xml dans un nouveau dossier nommé C:\Dossier.

Utilisation de la DTD

Création de la DTD et liaison vers le document XML

  1. Dans Visual Studio .NET, créez un fichier texte vide.
  2. Ajoutez les déclarations DTD suivantes au fichier afin de décrire la grammaire du document XML :
    <!ELEMENT Product (ProductName)>
    <!ATTLIST Product ProductID CDATA #REQUIRED>
    <!ELEMENT ProductName (#PCDATA)>
    
  3. Enregistrez le fichier sous le nom Product.dtd dans le répertoire C:\Dossier.
  4. Ouvrez Product.xml dans Visual Studio .NET.
  5. Ajoutez l'instruction DOCTYPE suivante au début du fichier Product.xml afin de lier le document XML au fichier DTD :
    <?xml version='1.0' encoding='utf-16'?>
    <!DOCTYPE Product SYSTEM "Product.dtd">
    
  6. Enregistrez le document XML modifié sous le nom ProductWithDTD.xml.

Utilisation de la DTD en vue de la validation du document XML

  1. Dans Visual Studio .NET, créez une nouvelle application de console Visual C# appelée ValidateXml.
  2. Ajoutez deux instructions using au début de Class1.cs comme suit :
    using System.Xml;        // pour XmlTextReader et XmlValidatingReader
    using System.Xml.Schema; // pour XmlSchemaCollection (utilisé ultérieurement)
  3. Dans Class1.cs, déclarez un champ booléen du nom de isValid avant de démarrer la méthode Main comme suit :
    private static bool isValid = true;      // Si une erreur de validation se produit,
                                             // cette balise a pour valeur False dans le
                                             // Gestionnaire d'événements de validation.
  4. Créez un objet XmlTextReader afin de lire un document XML à partir d'un fichier texte avec la méthode Main, puis créez un objet XmlValidatingReader afin de valider ces données XML comme suit :
    XmlTextReader r = new XmlTextReader("C:\\Dossier\\ProductWithDTD.xml");
    XmlValidatingReader v = new XmlValidatingReader(r);
  5. La propriété ValidationType de l'objet XmlValidatingReader indique le type de validation requis (DTD, XDR ou Schema). Réglez cette propriété sur DTD comme suit :
    v.ValidationType = ValidationType.DTD;
  6. Si une erreur de validation se produit, le lecteur de validation crée un événement de validation. Ajoutez le code suivant afin d'enregistrer un gestionnaire d'événements de validation (vous serez amené à utiliser la méthode MyValidationEventHandler dans l'étape 8) :
    v.ValidationEventHandler += 
       new ValidationEventHandler(MyValidationEventHandler);
  7. Ajoutez le code suivant afin de lire et valider le document XML. Si une erreur de validation quelconque se produit, MyValidationEventHandler est appelé afin de rectifier l'erreur. Cette méthode règle le certificat isValid sur False (voir l'étape 8). Vous pouvez vérifier le statut de isValid à l'issue de la validation afin de vous assurer si le document est valide ou non.
    while (v.Read())
    {
       // Permet d'ajouter du code ici afin de traiter le contenu.
    }
    v.Close();
    // Permet de vérifier si le document est valide ou non.
    if (isValid)
       Console.WriteLine(" Le document est valide ");
    else
       Console.WriteLine(" Le document n'est pas valide ");
  8. Écrivez la méthode MyValidationEventHandler après la méthode Main comme suit :
    public static void MyValidationEventHandler(object sender, 
                                                ValidationEventArgs args) 
    {
       isValid = false;
       Console.WriteLine("Validation event\n" + args.Message);
    }
  9. Construisez et exécutez l'application. L'application doit signaler que le document XML est valide.
  10. Dans Visual Studio .NET, modifiez ProductWithDTD.xml afin de le désactiver (par exemple, supprimez l'élément "<ProductName>Maillot de rugby</ProductName>").
  11. Exécutez à nouveau l'application. Vous devez alors recevoir le message d'erreur suivant :
    Événement de validation
    L'élément 'Product' a un contenu non valide. 'ProductName' attendu.
    Une erreur s'est produite dans le fichier :C:/Dossier/ProductWithDTD.xml(4, 5).
    Le document n'est pas valide

Utilisation du schéma XDR

Création du schéma XDR et liaison vers le document XML

  1. Dans Visual Studio .NET, créez un fichier texte vide.
  2. Ajoutez les définitions de schéma XDR suivantes au fichier afin de décrire la grammaire du document XML :
    <?xml version='1.0' encoding='utf-16'?>
    <Schema name="ProductSchema" 
            xmlns="urn:schemas-microsoft-com:xml-data"
            xmlns:dt="urn:schemas-microsoft-com:datatypes">
       
    <ElementType name="Product" content="eltOnly">
          
    <attribute type="ProductID" required="yes"/>
          
    <element type="ProductName"/>
       
    </ElementType>
       
    <AttributeType name="ProductID" dt:type="int"/>
       
    <ElementType name="ProductName" dt:type="string"/>
    </Schema>
    
  3. Enregistrez le fichier sous le nom Product.xdr dans le répertoire C:\Dossier.
  4. Ouvrez le fichier Product.xml original, puis liez-le au schéma XDR comme suit :
    <?xml version='1.0' encoding='utf-16'?>
    <Product ProductId="123" xmlns="x-schema:Product.xdr">
     
       
    <ProductName>
    Maillot de rugby
    </ProductName>
    </Product>
    
  5. Enregistrez le document XML ainsi modifié sous le nom ProductWithXDR.xml.

Utilisation du schéma XDR en vue de la validation du document XML

  1. Modifiez votre application de sorte que XmlTextReader charge le fichier ProductWithXDR.xml comme suit :
    XmlTextReader r = new XmlTextReader("C:\\Dossier\\ProductWithXDR.xml");
  2. Réglez ValidationType sur XDR de sorte que le lecteur de validation réalise la validation XDR :
    v.ValidationType = ValidationType.XDR;
  3. Construisez et exécutez l'application. L'application doit signaler que le document XML est valide.
  4. Modifiez ProductWithXDR.xml afin de le désactiver.
  5. Construisez et exécutez l'application à nouveau. Vous devez recevoir une erreur de validation.

Utilisation du schéma XSD

Création du schéma XSD et liaison vers le document XML

  1. Dans Visual Studio .NET, créez un fichier texte vide.
  2. Ajoutez au fichier les définitions de schéma XSD suivantes afin de décrire la grammaire du document XML :
    <?xml version='1.0' encoding='utf-16'?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
       
    <xsd:element name="Product">
          
    <xsd:complexType>
             
    <xsd:sequence>
                
    <xsd:element name="ProductName" type="xsd:string"/>
             
    </xsd:sequence>
             
    <xsd:attribute name="ProductId" use="required" type="xsd:int"/>
          
    </xsd:complexType>
       
    </xsd:element>
    </xsd:schema>
    
  3. Enregistrez le fichier sous le nom Product.xsd dans le répertoire C:\Dossier.
  4. Ouvrez le fichier Product.xml d'origine, puis liez-le au schéma XSD comme suit :
    <?xml version='1.0' encoding='utf-16'?>
    <Product ProductId="123" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:noNamespaceSchemaLocation="Product.xsd">
       
    <ProductName>
    Maillot de rugby
    </ProductName>
    </Product>
    
  5. Enregistrez le document XML ainsi modifié sous le nom ProductWithXSD.xml.

Utilisation du schéma XSD en vue de la validation du document XML

  1. Modifiez votre application de sorte que XmlTextReader charge ProductWithXSD.xml comme suit :
    XmlTextReader r = new XmlTextReader("C:\\Dossier\\ProductWithXSD.xml");
  2. Réglez ValidationType sur Schema de sorte que le lecteur de validation réalise la validation XSD :
    v.ValidationType = ValidationType.Schema;
  3. Construisez et exécutez l'application afin d'utiliser le schéma XSD pour valider le document XML.

Utilisation des espaces de noms dans le schéma XSD

  1. Dans Visual Studio .NET, ouvrez ProductWithXSD.xml.
  2. Déclarez un espace de noms par défaut urn:MyNamespace dans le document. Par ailleurs, modifiez le lien XSD de sorte qu'il spécifie le schéma XSD afin de valider le contenu dans cet espace de noms :
    <?xml version='1.0' encoding='utf-16'?>
    <Product ProductId="123" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns="urn:MyNamespace"
             xsi:schemaLocation="urn:MyNamespace Product.xsd">
       
    <ProductName>
    Maillot de rugby
    </ProductName>
    </Product>
    
  3. Enregistrez les modifications effectuées dans ProductWithXSD.xml.
  4. Ouvrez Product.xsd. Modifiez la balise de début <xsd:schema> comme suit, de sorte que le schéma s'applique à l'espace de noms urn:MyNamespace :
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                targetNamespace="urn:MyNamespace"
                elementFormDefault="qualified">
    
  5. Enregistrez les modifications effectuées dans Product.xsd.
  6. Construisez et exécutez l'application afin d'utiliser le schéma XSD pour valider le document XML.

Mise en cache des espaces de noms

  1. Dans Visual Studio .NET, ouvrez Class1.cs. Créez un objet XmlSchemaCollection au début de la méthode Main comme suit :
    XmlSchemaCollection cache = new XmlSchemaCollection();
  2. L'objet XmlSchemaCollection vous permet de mettre les schémas dans la mémoire cache en vue d'améliorer les performances. Chaque schéma est associé à un espace de noms différent. Ajoutez le code suivant afin de mettre en cache Product.xsd :
    cache.Add("urn:MyNamespace", "C:\\Dossier\\Product.xsd");
  3. Ajoutez l'instruction suivante après le code créant l'objet XmlValidatingReader afin d'ajouter le cache du schéma à XmlValidatingReader, de sorte que le lecteur puisse utiliser les schémas en mémoire :
    v.Schemas.Add(cache);

Vérification du fonctionnement

  1. Construisez et exécutez l'application.
  2. Vérifiez que le document XML est toujours comparé au schéma XSD.
  3. Modifiez le fichier ProductWithXSD.xml afin de le rendre non valide.
  4. Assurez-vous que l'application détecte ces erreurs de validation.

Propriétés

Numéro d'article: 307379 - Dernière mise à jour: mercredi 30 avril 2003 - Version: 1.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Visual C# .NET 2002 Initiation
Mots-clés : 
kbhowto kbhowtomaster KB307379
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com