Freigeben über


Gültigkeitsprüfung auf DTD mit XmlValidatingReader

DTD (Dokumenttypdefinition)-Überprüfungen werden unter Verwendung von Gültigkeitsbeschränkungen implementiert, die in der Empfehlung "Extensible Markup Language (XML) 1.0 Recommendation" (nur auf Englisch verfügbar) des W3C (World Wide Web Consortium) definiert sind. DTDs verwenden eine formale Grammatik zur Beschreibung der Struktur und Syntax kompatibler XML-Dokumente und legen fest, welche Inhalte und Werte dafür zulässig sind.

Zur Ausführung einer DTD-Überprüfung verwendet XmlValidatingReader die in der DOCTYPE-Deklaration eines XML-Dokuments definierte DTD. Die DOCTYPE-Deklaration kann entweder auf eine Inline-DTD oder auf eine externe DTD-Datei verweisen.

Im folgenden Codebeispiel wird ein XmlValidatingReader erstellt, der XmlTextReader übernimmt. Die Eingabedatei HeadCount.xml wird anhand einer externen DTD-Datei (HeadCount.dtd) überprüft. Alle Angaben zum Schweregrad und Fehlermeldungen werden angezeigt.

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

Im folgenden Beispiel wird der Inhalt der zu überprüfenden Eingabedatei HeadCount.xml dargestellt.

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

Im folgenden Beispiel wird der Inhalt der externen DTD-Datei HeadCount.dtd dargestellt, die zur Überprüfung herangezogen wird.

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

Siehe auch

XML-Gültigkeitsprüfung mit XmlValidatingReader | Gültigkeitsprüfung von XML mit Schemas | XmlValidatingReader.ValidationType-Eigenschaft