XmlReader による DTD を使用した検証
更新 : November 2007
ドキュメント型定義 (DTD: Document Type Definition) 検証は、W3C (World Wide Web Consortium) 勧告『Extensible Markup Language (XML) 1.0』で定義されている検証制約を使用して実装されます。DTD は、公式の文法を使用して、仕様に準拠する XML ドキュメントの構造と構文を記述しています。つまり、XML ドキュメントで使用できる内容や値を指定しています。
DTD を基準として検証を実行する場合、XmlReader は、XML ドキュメントの DOCTYPE 宣言で定義されている DTD を使用します。DOCTYPE 宣言では、インラインの DTD を指定するか、または外部 DTD ファイルへの参照を指定できます。
XmlReaderSettings.ProhibitDtd プロパティを false に設定します。
XmlReaderSettings.ValidationType プロパティを ValidationType.DTD に設定します。
DTD が認証を必要とするネットワーク上に格納された外部ファイルの場合は、XmlResolver オブジェクトを必要な資格情報と共に Create メソッドに渡します。
例
DTD ファイルを使用して XML ファイルの検証を行う例を次に示します。
Imports System
Imports System.Xml
Imports System.Xml.Schema
Imports System.IO
public class Sample
public shared sub Main()
' Set the validation settings.
Dim settings as XmlReaderSettings = new XmlReaderSettings()
settings.ProhibitDtd = false
settings.ValidationType = ValidationType.DTD
AddHandler settings.ValidationEventHandler, AddressOf ValidationCallBack
' Create the XmlReader object.
Dim reader as XmlReader = XmlReader.Create("itemDTD.xml", settings)
' Parse the file.
while reader.Read()
end while
end sub
' Display any validation errors.
private shared sub ValidationCallBack(sender as object, e as ValidationEventArgs)
Console.WriteLine("Validation Error: {0}", e.Message)
end sub
end class
using System;
using System.Xml;
using System.Xml.Schema;
using System.IO;
public class Sample {
public static void Main() {
// Set the validation settings.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ProhibitDtd = false;
settings.ValidationType = ValidationType.DTD;
settings.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);
// Create the XmlReader object.
XmlReader reader = XmlReader.Create("itemDTD.xml", settings);
// Parse the file.
while (reader.Read());
}
// Display any validation errors.
private static void ValidationCallBack(object sender, ValidationEventArgs e) {
Console.WriteLine("Validation Error: {0}", e.Message);
}
}
#using <System.Xml.dll>
using namespace System;
using namespace System::Xml;
using namespace System::Xml::Schema;
using namespace System::IO;
// Display any validation errors.
static void ValidationCallBack( Object^ /*sender*/, ValidationEventArgs^ e )
{
Console::WriteLine( L"Validation Error: {0}", e->Message );
}
int main()
{
// Set the validation settings.
XmlReaderSettings^ settings = gcnew XmlReaderSettings;
settings->ProhibitDtd = false;
settings->ValidationType = ValidationType::DTD;
settings->ValidationEventHandler += gcnew ValidationEventHandler( ValidationCallBack );
// Create the XmlReader object.
XmlReader^ reader = XmlReader::Create( L"itemDTD.xml", settings );
// Parse the file.
while ( reader->Read() )
;
return 1;
}
入力
この例は、itemDTD.xml ファイルを入力として使用します。
<!--XML file using a DTD-->
<!DOCTYPE store [
<!ELEMENT store (item)*>
<!ELEMENT item (name,dept,price)>
<!ATTLIST item type CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>]>
<store>
<item type="supplies" ISBN="2-3631-4">
<name>paint</name>
<price>16.95</price>
</item>
</store>