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

文書翻訳 文書翻訳
文書番号: 307379 - 対象製品
この記事は、以前は次の 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 XmlValidatingReader
    using 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 - 最終更新日: 2007年4月23日 - リビジョン: 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
キーワード:?
kbhowtomaster KB307379
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com