Compartir a través de


Validación frente a DTD con XmlValidatingReader

La validación de la DTD (Document Type Definition, definición de tipo de documento) se implementa mediante las restricciones de validez definidas en la recomendación de Extensible Markup Language (XML) 1.0 del W3C (World Wide Web Consortium). Las DTD utilizan una gramática formal para describir la estructura y la sintaxis de documentos que cumplen la especificación XML; especifican el contenido y los valores permitidos para el documento XML.

Para realizar la validación frente a una DTD, XmlValidatingReader utiliza la DTD definida en la declaración DOCTYPE de un documento XML. La declaración DOCTYPE puede apuntar a una DTD en línea o hacer referencia a un archivo DTD externo.

En el ejemplo de código siguiente se crea un XmlValidatingReader que acepta un XmlTextReader. El archivo de entrada, HeadCount.xml, se valida con respecto a un archivo DTD externo, HeadCount.dtd. Se muestran los tipos de gravedad y los mensajes de error que pueda haber.

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);
      }
   }
}

A continuación se describe el contenido del archivo de entrada, HeadCount.xml, que se va a validar.

<!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>

A continuación se describe el contenido del archivo DTD externo, HeadCount.dtd, que se usará como referencia para la validación.

<!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">

Vea también

Validación de XML con XmlValidatingReader | Validación de XML con esquemas | XmlValidatingReader.ValidationType (Propiedad)