Convalida rispetto a DTD con XmlValidatingReader

La convalida DTD (document type definition) viene implementata utilizzando i vincoli di validità definiti nella raccomandazione Extensible Markup Language (XML) 1.0 del World Wide Web Consortium (W3C). Le convalide DTD utilizzano una grammatica formale per descrivere la struttura e la sintassi di documenti compatibili con XML. Esse infatti specificano il contenuto e i valori consentiti per il documento XML.

Per eseguire la convalida rispetto a un DTD (document type definition), XmlValidatingReader utilizza il DTD definito nella dichiarazione DOCTYPE di un documento XML. La dichiarazione DOCTYPE può puntare a un DTD inline oppure può essere un riferimento a un file DTD esterno.

Nell'esempio di codice che segue viene creato un XmlValidatingReader che accetta un XmlTextReader. Il file di input, denominato HeadCount.xml, viene convalidato rispetto a un file DTD esterno, denominato HeadCount.dtd. Viene visualizzato qualsiasi livello di gravità e di messaggio di errore.

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

Di seguito viene indicato il contenuto del file di input, HeadCount.xml, da convalidare.

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

Di seguito viene indicato il contenuto del file DTD esterno, HeadCount.dtd, rispetto al quale eseguire la convalida.

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

Vedere anche

Convalida del linguaggio XML con XmlValidatingReader | Convalida del linguaggio XML con schemi | Proprietà XmlValidatingReader.ValidationType