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