XmlReaderSettings.Schemas XmlReaderSettings.Schemas XmlReaderSettings.Schemas XmlReaderSettings.Schemas Property

定義

スキーマの検証を行うときに使用する XmlSchemaSet を取得または設定します。Gets or sets the XmlSchemaSet to use when performing schema validation.

public:
 property System::Xml::Schema::XmlSchemaSet ^ Schemas { System::Xml::Schema::XmlSchemaSet ^ get(); void set(System::Xml::Schema::XmlSchemaSet ^ value); };
public System.Xml.Schema.XmlSchemaSet Schemas { get; set; }
member this.Schemas : System.Xml.Schema.XmlSchemaSet with get, set
Public Property Schemas As XmlSchemaSet

プロパティ値

スキーマ検証を実行するときに使用する XmlSchemaSetThe XmlSchemaSet to use when performing schema validation. 既定値は空の XmlSchemaSet オブジェクトです。The default is an empty XmlSchemaSet object.

次の例ではXmlReaderSettings 、オブジェクトXmlReader.Createとメソッドを使用して、スキーマを XML ドキュメントに関連付けます。The example below uses the XmlReaderSettings object and the XmlReader.Create method to associate a schema with an XML document. スキーマは、 Schemas XmlReaderSettingsオブジェクトのプロパティに追加されます。The schema is added to the Schemas property of the XmlReaderSettings object. Schemasプロパティの値XmlSchemaSetはオブジェクトです。The value of the Schemas property is an XmlSchemaSet object. スキーマは、XML ドキュメントがスキーマコンテンツモデルに準拠していることを検証するために使用されます。The schema is used to validate that the XML document conforms to the schema content model. スキーマ検証エラーおよび警告は、 ValidationEventHandler XmlReaderSettingsオブジェクトで定義されているによって処理されます。Schema validation errors and warnings are handled by the ValidationEventHandler defined in the XmlReaderSettings object.

#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.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

この例では、books.xml ファイルを入力として使用します。The example uses the books.xml file as input.

<bookstore xmlns="http://www.contoso.com/books">
  <book genre="autobiography" publicationdate="1981" 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" 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" ISBN="1-861001-57-6">
    <title>The Gorgias</title>
    <author>
      <name>Plato</name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

この例では、入力として books.xml ファイルを使用します。The example uses the books.xsd file as an input.

<?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:unsignedShort" use="required" />
                        <xs:attribute name="ISBN" type="xs:string" use="required" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

注釈

重要

  • 不明または信頼できないソースまたは場所のスキーマは使用しないでください。Do not use schemas from unknown or untrusted sources or locations. そうすることで、コードのセキュリティが損なわれます。Doing so will compromise the security of your code.
  • XML スキーマ (インラインスキーマを含む) は、サービス拒否攻撃に対して本質的に脆弱です。信頼されていないシナリオでは受け入れないでください。XML schemas (including inline schemas) are inherently vulnerable to denial of service attacks; do not accept them in untrusted scenarios.
  • スキーマ検証エラーメッセージと例外によって、コンテンツモデルまたはスキーマファイルへの URI パスに関する機密情報が公開される場合があります。Schema validation error messages and exceptions may expose sensitive information about the content model or URI paths to the schema file. この情報を信頼されていない呼び出し元に公開しないように注意してください。Be careful not to expose this information to untrusted callers.
  • 詳細については、「セキュリティに関する考慮事項」を参照してください。For additional information, see the "Security considerations" section.

クラスXmlSchemaSetは、XML スキーマ定義言語 (XSD) スキーマのみをサポートしています。The XmlSchemaSet class only supports XML Schema definition language (XSD) schemas. XmlReaderXML データ削減 ( Create XDR) スキーマ検証を有効にするように、メソッドによって作成されたインスタンスを構成することはできません。XmlReader instances created by the Create method cannot be configured to enable XML-Data Reduced (XDR) schema validation.

セキュリティの考慮事項Security considerations

  • 不明または信頼できないソースのスキーマは使用しないでください。Do not use schemas from unknown or untrusted sources. そうすることで、コードのセキュリティが損なわれます。Doing so will compromise the security of your code. クラスXmlUrlResolverは、既定で外部スキーマを解決するために使用されます。The XmlUrlResolver class is used to resolve external schemas by default. スキーマの include、import、および redefine 要素の解決を無効にするにはXmlSchemaSet.XmlResolver 、プロパティnullをに設定します。To disable resolution of include, import, and redefine elements of a schema, set the XmlSchemaSet.XmlResolver property to null.

  • クラスを使用XmlSchemaSetした結果として発生した例外XmlSchemaExceptionには、信頼されていないシナリオで公開すべきではない機密情報が含まれている場合があります。Exceptions raised as a result of using the XmlSchemaSet class, such as the XmlSchemaException class may contain sensitive information that should not be exposed in untrusted scenarios. たとえば、 SourceUri XmlSchemaExceptionのプロパティは、例外の原因となったスキーマファイルへの URI パスを返します。For example, the SourceUri property of an XmlSchemaException returns the URI path to the schema file that caused the exception. 信頼SourceUriされていないシナリオでは、プロパティを公開しないでください。The SourceUri property should not be exposed in untrusted scenarios. この機密情報が信頼できないシナリオで公開されないように、例外を適切に処理する必要があります。Exceptions should be properly handled so that this sensitive information is not exposed in untrusted scenarios.

適用対象

こちらもご覧ください