XmlSchemaSet による XML スキーマ (XSD) 検証XML Schema (XSD) Validation with XmlSchemaSet

XML ドキュメントは、XmlSchemaSet の XML スキーマ定義言語 (XSD) スキーマを基準として検証できます。XML documents can be validated against an XML schema definition language (XSD) schema in an XmlSchemaSet.

XML ドキュメントの検証Validating XML Documents

XML ドキュメントは、Create クラスの XmlReader メソッドを使用して検証します。XML documents are validated by the Create method of the XmlReader class. XML ドキュメントを検証するには、XML ドキュメントの検証に使用する XML スキーマ定義言語 (XSD) スキーマを持つ XmlReaderSettings オブジェクトを作成します。To validate an XML document, construct an XmlReaderSettings object that contains an XML schema definition language (XSD) schema with which to validate the XML document.

注意

System.Xml.Schema 名前空間には、LINQ to XML (C#)LINQ to XML (Visual Basic) を使用しているときに XSD ファイルに対する XML ツリーの検証を容易にする拡張メソッドが含まれています。The System.Xml.Schema namespace contains extension methods that make it easy to validate an XML tree against an XSD file when using LINQ to XML (C#) and LINQ to XML (Visual Basic). LINQ to XML を使用した XML ドキュメントの検証に関する詳細については、「方法: XSD を使用して検証する (LINQ to XML) (C#)」および「方法: XSD を使用して検証する (LINQ to XML) (Visual Basic)」を参照してください。For more information on validating XML documents with LINQ to XML, see How to: Validate Using XSD (LINQ to XML) (C#) and How to: Validate Using XSD (LINQ to XML) (Visual Basic).

独立したスキーマまたはスキーマのセット (XmlSchemaSet を使用) を XmlSchemaSet に追加するには、そのどちらかを AddXmlSchemaSet メソッドにパラメーターとして渡します。An individual schema or a set of schemas (as an XmlSchemaSet) can be added to an XmlSchemaSet by passing either one as a parameter to the Add method of XmlSchemaSet. ドキュメントを検証する際には、ドキュメントの対象名前空間がスキーマ セット内のスキーマの対象名前空間と一致している必要があります。Note that when validating a document the target namespace of the document must match the target namespace of the schema in the schema set.

XML ドキュメントのサンプルを次に示します。The following is an example XML document.

<bookstore xmlns="http://www.contoso.com/books">
  <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </book>
  <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </book>
  <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
    <title>The Gorgias</title>
    <author>
      <name>Plato</name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

XML ドキュメントのサンプルを検証するスキーマを次に示します。The following is the schema that validates the example XML document.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/books" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="bookstore">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="book">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="title" type="xs:string" />
                            <xs:element name="author">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element minOccurs="0" name="name" type="xs:string" />
                                        <xs:element minOccurs="0" name="first-name" type="xs:string" />
                                        <xs:element minOccurs="0" name="last-name" type="xs:string" />
                                    </xs:sequence>
                                </xs:complexType>
                            </xs:element>
                            <xs:element name="price" type="xs:decimal" />
                        </xs:sequence>
                        <xs:attribute name="genre" type="xs:string" use="required" />
                        <xs:attribute name="publicationdate" type="xs:date" use="required" />
                        <xs:attribute name="ISBN" type="xs:string" use="required" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

以下のコード サンプルでは、XmlSchemaSet オブジェクトの SchemasXmlReaderSettings プロパティに上記のスキーマが追加されます。In the code example that follows, the schema above is added to the XmlSchemaSetSchemas property of the XmlReaderSettings object. XmlReaderSettings オブジェクトは、上記の XML ドキュメントを検証する Create オブジェクトの XmlReader メソッドにパラメーターとして渡されます。The XmlReaderSettings object is passed as a parameter to the Create method of the XmlReader object, which validates the XML document above.

ValidationType オブジェクトの XmlReaderSettings プロパティが Schema に設定されて、Create オブジェクトの XmlReader メソッドによる XML ドキュメントの検証が行われます。The ValidationType property of the XmlReaderSettings object is set to Schema to enforce validation of the XML document by the Create method of the XmlReader object. XML のドキュメントおよびスキーマの検証中に発見されたエラーによって発生する ValidationEventHandler イベントまたは XmlReaderSettings イベントを処理するために、Warning オブジェクトに Error を追加します。A ValidationEventHandler is added to the XmlReaderSettings object to handle any Warning or Error events raised by errors found during the validation process of both the XML document and the schema.

#using <System.Xml.dll>

using namespace System;
using namespace System::Xml;
using namespace System::Xml::Schema;

static void booksSettingsValidationEventHandler( Object^ /*sender*/, ValidationEventArgs^ e )
{
   if ( e->Severity == XmlSeverityType::Warning )
   {
      Console::Write( L"WARNING: " );
      Console::WriteLine( e->Message );
   }
   else
   if ( e->Severity == XmlSeverityType::Error )
   {
      Console::Write( L"ERROR: " );
      Console::WriteLine( e->Message );
   }
}

int main()
{
   XmlReaderSettings^ booksSettings = gcnew XmlReaderSettings;
   booksSettings->Schemas->Add( L"http://www.contoso.com/books", L"books.xsd" );
   booksSettings->ValidationType = ValidationType::Schema;
   booksSettings->ValidationEventHandler += gcnew ValidationEventHandler( booksSettingsValidationEventHandler );
   XmlReader^ books = XmlReader::Create( L"books.xml", booksSettings );
   while ( books->Read() )
   {}

   return 0;
}

using System;
using System.Xml;
using System.Xml.Schema;

class XmlSchemaSetExample
{
    static void Main()
    {
        XmlReaderSettings booksSettings = new XmlReaderSettings();
        booksSettings.Schemas.Add("http://www.contoso.com/books", "books.xsd");
        booksSettings.ValidationType = ValidationType.Schema;
        booksSettings.ValidationEventHandler += new ValidationEventHandler(booksSettingsValidationEventHandler);

        XmlReader books = XmlReader.Create("books.xml", booksSettings);

        while (books.Read()) { }
    }

    static void booksSettingsValidationEventHandler(object sender, ValidationEventArgs e)
    {
        if (e.Severity == XmlSeverityType.Warning)
        {
            Console.Write("WARNING: ");
            Console.WriteLine(e.Message);
        }
        else if (e.Severity == XmlSeverityType.Error)
        {
            Console.Write("ERROR: ");
            Console.WriteLine(e.Message);
        }
    }
}
Imports System
Imports System.Xml
Imports System.Xml.Schema

Class XmlSchemaSetExample

    Shared Sub Main()

        Dim booksSettings As XmlReaderSettings = New XmlReaderSettings()
        booksSettings.Schemas.Add("http://www.contoso.com/books", "books.xsd")
        booksSettings.ValidationType = ValidationType.Schema
        AddHandler booksSettings.ValidationEventHandler, New ValidationEventHandler(AddressOf booksSettingsValidationEventHandler)

        Dim books As XmlReader = XmlReader.Create("books.xml", booksSettings)

        While books.Read()

        End While

    End Sub

    Shared Sub booksSettingsValidationEventHandler(ByVal sender As Object, ByVal e As ValidationEventArgs)

        If e.Severity = XmlSeverityType.Warning Then
            Console.Write("WARNING: ")
            Console.WriteLine(e.Message)

        ElseIf e.Severity = XmlSeverityType.Error Then
            Console.Write("ERROR: ")
            Console.WriteLine(e.Message)
        End If

    End Sub

End Class

関連項目See also