Validation par rapport à une DTD à l'aide de XmlValidatingReader
La validation de définition de type de document (DTD, Document Type Definition) est implémentée à l'aide des contraintes de validité définies par le World Wide Web Consortium (W3C) dans la recommandation « Extensible Markup Language (XML) 1.0 » (en anglais). 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, la classe XmlValidatingReader utilise la DTD définie dans la déclaration DOCTYPE
d'un document XML. Cette déclaration peut soit pointer vers une DTD inline, soit servir de référence à un fichier DTD externe.
L'exemple de code ci-dessous crée une classe XmlValidatingReader qui prend XmlTextReader. Le fichier d'entrée, HeadCount.xml, est validé par rapport à un fichier DTD externe, HeadCount.dtd. Tout type de gravité ou message d'erreur est affiché.
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
[C#]
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 ci-dessous 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 ci-dessous 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
Validation XML à l'aide de XmlValidatingReader | Validation XML à l'aide de schémas | XmlValidatingReader.ValidationType, propriété