Partager via


Validation par rapport à une DTD à l'aide de XmlValidatingReader

La validation de définition de type de document (DTD) est implémentée à l'aide des contraintes de validité définies par la recommandation du World Wide Web Consortium (W3C) sur le langage XML (Extensible Markup Language) 1.0. Les DTD utilisent une grammaire formelle pour décrire la structure et la syntaxe des documents XML conformes. Elles définissent le contenu et les valeurs admises dans un document XML.

Pour effectuer une validation par rapport à une DTD, l'objet XmlValidatingReader utilise la DTD définie dans la déclaration DOCTYPE d'un document XML. La déclaration DOCTYPE peut soit pointer vers une DTD inline, soit servir de référence à un fichier DTD externe.

RemarqueRemarque

La classe XmlValidatingReader est obsolète dans le .NET Framework version 2.0.Vous pouvez créer une instance de l'objet XmlReader de validation à l'aide de la classe XmlReaderSettings et de la méthode Create.Pour plus d'informations, voir Validation de données XML avec XmlReader.

Exemple

L'exemple de code suivant crée un objet XmlValidatingReader qui prend un objet XmlTextReader. Le fichier d'entrée, HeadCount.xml, est validé par rapport à un fichier DTD externe, HeadCount.dtd. Les éventuels types de gravité et messages d'erreur sont affichés.

Imports System
Imports System.IO
Imports System.Xml
Imports System.Xml.Schema

public class ValidationSample

      public shared sub Main()
         Dim tr As XmlTextReader = new XmlTextReader("HeadCount.xml")
         Dim vr As XmlValidatingReader = new XmlValidatingReader(tr)

         vr.ValidationType = ValidationType.DTD
         AddHandler vr.ValidationEventHandler, AddressOf ValidationCallback
         while(vr.Read())
         end while
         Console.WriteLine("Validation finished")

      end sub      

      public shared sub ValidationCallBack (sender As object, args As ValidationEventArgs)
      
         Console.WriteLine("***Validation error")
         Console.WriteLine("Severity:{0}", args.Severity)
         Console.WriteLine("Message:{0}", args.Message)
     end sub
end class
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;

namespace ValidationSample
{
   class Sample
   {
      public static void Main()
      {
         XmlTextReader tr = new XmlTextReader("HeadCount.xml");
         XmlValidatingReader vr = new XmlValidatingReader(tr);

         vr.ValidationType = ValidationType.DTD;
         vr.ValidationEventHandler += new ValidationEventHandler (ValidationHandler);

         while(vr.Read());
         Console.WriteLine("Validation finished");
      }

      public static void ValidationHandler(object sender, ValidationEventArgs args)
      {
         Console.WriteLine("***Validation error");
         Console.WriteLine("\tSeverity:{0}", args.Severity);
         Console.WriteLine("\tMessage  :{0}", args.Message);
      }
   }
}

Le code suivant présente le contenu du fichier d'entrée, HeadCount.xml, à valider.

<!DOCTYPE HeadCount SYSTEM "HeadCount.dtd">
<HeadCount>
  <Name First="Waldo" Last="Pepper">
    <Name First="Salt" Last="Pepper" Relation="spouse"/>
    <Name First="Red" Last="Pepper" Relation="child"/>
  </Name>
  <Name First="&MyFirst;" Last="&MyLast;">
    <Name First="Sharon" Last="&MyLast;" Relation="spouse"/>
    <Name First="Morgan" Last="&MyLast;" Relation="child"/>
    <Name First="Shelby" Last="&MyLast;" Relation="child"/>
  </Name>
</HeadCount>

Le code suivant présente le contenu du fichier DTD externe, HeadCount.dtd, par rapport auquel la validation doit s'effectuer.

<!ELEMENT HeadCount (Name)*>
<!ELEMENT Name (Name)*>
<!ATTLIST Name First CDATA #REQUIRED>
<!ATTLIST Name Last CDATA #REQUIRED>
<!ATTLIST Name Relation (self | spouse | child) "self">
<!ENTITY MyFirst "Jeff">
<!ENTITY MyLast "Smith">

Voir aussi

Concepts

Lecture de XML avec XmlReader

Autres ressources

Utilisation de la classe XmlReader