XmlValidatingReader を使用した XDR 検証

更新 : November 2007

XDR (XML-Data Reduced) スキーマ検証は、MSXML (Microsoft XML Parser) スキーマ仕様で定義されている検証制約を使用して実装されます。XmlValidatingReader クラスは、XML ドキュメント内の x-schema: 名前空間宣言を使用して、検証の基準となるスキーマが XDR スキーマかどうかを確認します。次の例では、データ ファイルのルート要素が <HeadCount xmlns='x-schema:HeadCount.xdr'> になっています。

e87e33y6.alert_note(ja-jp,VS.90).gifメモ :

.NET Framework version 2.0 では、XmlValidatingReader クラスが廃止されています。XmlReaderSettings クラスと Create メソッドを使用して、検証用の XmlReader インスタンスを作成できます。詳細については、「XmlReader による XML データの検証」を参照してください。

XmlTextReader を受け取る XmlValidatingReader を作成するコード サンプルを次に示します。XDR スキーマ ファイル HeadCount.xdr を基準として、入力ファイル HeadCount.xml を検証します。

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

検証対象の入力ファイル HeadCount.xml の内容について、次に概略を示します。

<HeadCount xmlns='x-schema:HeadCount.xdr'>
   <Name>Waldo Pepper</Name>
   <Name>Red Pepper</Name>
</HeadCount>

検証の基準とする XDR スキーマ ファイル HeadCount.xdr の内容について、次に概略を示します。

<Schema xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
   <ElementType name="Name" content="textOnly"/>
   <AttributeType name="Bldg" default="2"/>
   <ElementType name="HeadCount" content="eltOnly">
      <element type="Name"/>
      <attribute type="Bldg"/>
   </ElementType>
</Schema>

参照

概念

XmlReader による XML の読み取り

その他の技術情報

XmlReader クラスの使用