現在オフラインです。再接続するためにインターネットの接続を待っています

Visual C# .NET で DTD、XDR、または XSD を使用して XML ドキュメントを検証する方法

この記事は、以前は次の ID で公開されていました: JP307379
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
概要
この資料では、ドキュメント型定義 (DTD)、Microsoft XML-Data Reduced (XDR) スキーマ、または XML スキーマ定義言語 (XSD) スキーマを XML (Extensible Markup Language) ドキュメントに適用する方法を紹介します。また、XmlValidatingReader クラスを使用して XML ドキュメントを指定された文法に照らして検証する方法、および XML の検証を最適化するために XmlSchemaCollection クラスを使用してスキーマをメモリにキャッシュする方法についても説明します。

XML ドキュメントには、要素と属性が含まれています。これらは、アプリケーションと組織の間でデータを交換するための柔軟で強力な手段を提供するものです。使用可能な XML ドキュメントの構造と内容を指定するには、DTD、XDR スキーマ、または XSD スキーマを記述します。Microsoft .NET Framework で XML の文法を指定する方法としては XSD スキーマが推奨されていますが、DTD および XDR スキーマもサポートされています。

先頭に戻る

必要条件

この資料は、以下のトピックについて詳しい知識のあるユーザーを対象としています。
  • Microsoft Visual C# .NET または Microsoft Visual Basic .NET の構文
  • XML の概念 (検証に関する知識を含む)
先頭に戻る

XML ドキュメントの作成

  1. Visual Studio .NET を起動します。
  2. ローカル コンピュータ上に新しい XML ファイルを作成します。
  3. XML ドキュメントに、カタログ内の製品を表す以下のデータを追加します。
    <Product ProductID="123">   <ProductName>Rugby jersey</ProductName></Product>					
  4. C:\MyFolder という名前で作成した新しいフォルダの中に、このファイルを Product.xml という名前で保存します。
先頭に戻る

DTD を使用した検証

DTD の作成と XML ドキュメントへのリンク

  1. Visual Studio .NET で、空のテキスト ファイルを作成します。
  2. このファイルに、XML ドキュメントの文法を記述した以下のような DTD 宣言を入力します。
    <!ELEMENT Product (ProductName)><!ATTLIST Product ProductID CDATA #REQUIRED><!ELEMENT ProductName (#PCDATA)>					
  3. このファイルを C:\MyFolder ディレクトリに Product.dtd という名前で保存します。
  4. Visual Studio .NET で Product.xml を開きます。
  5. Product.xml の先頭に次の DOCTYPE ステートメントを追加して、XML ドキュメントを DTD ファイルにリンクします。
    <?xml version="1.0"?><!DOCTYPE Product SYSTEM "Product.dtd">					
  6. 変更後の XML ドキュメントを ProductWithDTD.xml という名前で保存します。
先頭に戻る

DTD を使用した XML ドキュメントの検証

  1. Visual Studio .NET で、ValidateXml という名前の新しい Visual C# コンソール アプリケーション プロジェクトを作成します。
  2. Class1.cs の先頭に次の 2 つの using ステートメントを追加します。
    using System.Xml;        // for XmlTextReader and XmlValidatingReaderusing System.Xml.Schema; // for XmlSchemaCollection (which is used later)					
  3. Class1.cs で、Main メソッドを開始する前に isValid という名前のブール型変数を宣言します。
    private static bool isValid = true;      // If a validation error occurs,                                         // set this flag to false in the                                         // validation event handler. 
  4. Main メソッドの中でテキスト ファイルから XML ドキュメントを読み取るための XmlTextReader オブジェクトを作成した後、この XML データを検証する XmlValidatingReader を作成します。
    XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithDTD.xml");XmlValidatingReader v = new XmlValidatingReader(r);					
  5. XmlValidatingReader オブジェクトの ValidationType プロパティは、必要な検証の種類 (DTD、XDR、または Schema) を表します。このプロパティを DTD に設定します。
    v.ValidationType = ValidationType.DTD;					
  6. 検証エラーが発生した場合、検証リーダーにより検証イベントが生成されます。次のコードを追加して、検証イベント ハンドラを登録します (MyValidationEventHandler メソッドは手順 8. で実装します)。
    v.ValidationEventHandler +=    new ValidationEventHandler(MyValidationEventHandler);					
  7. 次のコードを追加して、XML ドキュメントの読み取りと検証を実行します。検証エラーが発生すると、MyValidationEventHandler がエラーに対処するために呼び出されます。このメソッドにより、isValid が False に設定されます (手順 8. 参照)。検証後に isValid のステータスをチェックして、ドキュメントが有効か無効かを調べることができます。
    while (v.Read()){   // Can add code here to process the content.}v.Close();// Check whether the document is valid or invalid.if (isValid)   Console.WriteLine("Document is valid");else   Console.WriteLine("Document is invalid");					
  8. Main メソッドの後に MyValidationEventHandler メソッドを記述します。
    public static void MyValidationEventHandler(object sender,                                             ValidationEventArgs args) {   isValid = false;   Console.WriteLine("Validation event\n" + args.Message);}					
  9. アプリケーションをビルドし、実行します。XML ドキュメントは有効であると報告されます。
  10. Visual Studio .NET で、ProductWithDTD.xml を無効になるように変更します (たとえば、"<ProductName>Rugby jersey</ProductName>" 要素を削除します)。
  11. 再びアプリケーションを実行します。次のようなエラー メッセージが表示されます。
    Validation event
    要素 'Product' には無効な内容が含まれています。'ProductName' を指定してください。
    file:///C:/MyFolder/ProductWithDTD.xml(4, 5) でエラーが発生しました。
    Document is invalid
先頭に戻る

XDR スキーマを使用した検証

XDR スキーマの作成と XML ドキュメントへのリンク

  1. Visual Studio .NET で、空のテキスト ファイルを作成します。
  2. このファイルに、XML ドキュメントの文法を記述した以下のような XDR スキーマ定義を入力します。
    <?xml version="1.0"?><Schema name="ProductSchema"         xmlns="urn:schemas-microsoft-com:xml-data"        xmlns:dt="urn:schemas-microsoft-com:datatypes">   <ElementType name="Product" content="eltOnly">      <attribute type="ProductID" required="yes"/>      <element type="ProductName"/>   </ElementType>   <AttributeType name="ProductID" dt:type="int"/>   <ElementType name="ProductName" dt:type="string"/></Schema>					
  3. このファイルを C:\MyFolder ディレクトリに Product.xdr という名前で保存します。
  4. 元の Product.xml ファイルを開き、XDR スキーマにリンクします。
    <?xml version="1.0"?><Product ProductID="123" xmlns="x-schema:Product.xdr">    <ProductName>Rugby jersey</ProductName></Product>					
  5. 変更後の XML ドキュメントを ProductWithXDR.xml という名前で保存します。
先頭に戻る

XDR スキーマを使用した XML ドキュメントの検証

  1. アプリケーションを次のように変更し、XmlTextReader によって ProductWithXDR.xml が読み込まれるようにします。
    XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithXDR.xml");					
  2. ValidationType を XDR に設定し、検証リーダーによって XDR による検証が実行されるようにします。
    v.ValidationType = ValidationType.XDR;					
  3. アプリケーションをビルドし、実行します。XML ドキュメントは有効であると報告されます。
  4. ProductWithXDR.xml を変更し、XML ドキュメントが無効になるようにします。
  5. 再びアプリケーションをビルドし、実行します。検証エラーが表示されます。
先頭に戻る

XSD スキーマを使用した検証

XSD スキーマの作成と XML ドキュメントへのリンク

  1. Visual Studio .NET で、空のテキスト ファイルを作成します。
  2. このファイルに、XML ドキュメントの文法を記述した以下のような XSD スキーマ定義を入力します。
    <?xml version="1.0"?><xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">   <xsd:element name="Product">      <xsd:complexType>         <xsd:sequence>            <xsd:element name="ProductName" type="xsd:string"/>         </xsd:sequence>         <xsd:attribute name="ProductID" use="required" type="xsd:int"/>      </xsd:complexType>   </xsd:element></xsd:schema>					
  3. このファイルを C:\MyFolder ディレクトリに Product.xsd という名前で保存します。
  4. 元の Product.xml ファイルを開き、XSD スキーマにリンクします。
    <?xml version="1.0"?><Product ProductID="123"          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:noNamespaceSchemaLocation="Product.xsd">   <ProductName>Rugby jersey</ProductName></Product>					
  5. 変更後の XML ドキュメントを ProductWithXSD.xml という名前で保存します。
先頭に戻る

XSD スキーマを使用した XML ドキュメントの検証

  1. アプリケーションを次のように変更し、XmlTextReader によって ProductWithXSD.xml が読み込まれるようにします。
    XmlTextReader r = new XmlTextReader("C:\\MyFolder\\ProductWithXSD.xml");					
  2. ValidationType を Schema に設定し、検証リーダーによって XSD スキーマによる検証が実行されるようにします。
    v.ValidationType = ValidationType.Schema;					
  3. アプリケーションをビルドして実行し、XSD スキーマを使用して XML ドキュメントを検証します。
先頭に戻る

XSD スキーマでの名前空間の使用

  1. Visual Studio .NET で、ProductWithXSD.xml を開きます。
  2. ドキュメント内で、デフォルトの名前空間 urn:MyNamespace を宣言します。さらに、XSD リンクを変更して、XSD スキーマによってこの名前空間の内容が検証されるようにします。
    <?xml version="1.0"?><Product ProductID="123"          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xmlns="urn:MyNamespace"         xsi:schemaLocation="urn:MyNamespace Product.xsd">   <ProductName>Rugby jersey</ProductName></Product>					
  3. ProductWithXSD.xml への変更を保存します。
  4. Product.xsd を開きます。<xsd:schema> 開始タグを次のように変更し、スキーマが名前空間 urn:MyNamespace に適用されるようにします。
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"            targetNamespace="urn:MyNamespace"            elementFormDefault="qualified">					
  5. Product.xsd への変更を保存します。
  6. アプリケーションをビルドして実行し、XSD スキーマを使用して XML ドキュメントを検証します。
先頭に戻る

名前空間のキャッシュ

  1. Visual Studio .NET で、Class1.cs を開きます。Main メソッドの開始時に、次のように XmlSchemaCollection オブジェクトを作成します。
    XmlSchemaCollection cache = new XmlSchemaCollection();					
  2. XmlSchemaCollection オブジェクトを使用すると、スキーマをメモリにキャッシュしてパフォーマンスを強化することができます。各スキーマは、異なる名前空間に関連付けられます。次のコードを追加して Product.xsd をキャッシュします。
    cache.Add("urn:MyNamespace", "C:\\MyFolder\\Product.xsd");					
  3. XmlValidatingReader オブジェクトを作成するコードの後に、スキーマ キャッシュを XmlValidatingReader に追加する次のステートメントを追加し、リーダーがメモリ内のスキーマを使用できるようにします。
    v.Schemas.Add(cache);					
先頭に戻る

動作の検証

  1. アプリケーションをビルドして実行します。
  2. XML ドキュメントが依然として XSD スキーマに照らして検証されることを確認します。
  3. ProductWithXSD.xml を変更し、XML ドキュメントが無効になるようにします。
  4. 上記の検証エラーが検出されることを確認します。
先頭に戻る
プロパティ

文書番号:307379 - 最終更新日: 12/06/2015 05:25:25 - リビジョン: 3.2

  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft .NET Framework 1.1
  • Microsoft .NET Framework 1.0
  • kbnosurvey kbarchive kbhowtomaster KB307379
フィードバック