XmlReaderSettings.Schemas 속성

정의

스키마 유효성 검사를 수행할 때 사용할 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

속성 값

스키마 유효성 검사를 수행할 때 사용할 XmlSchemaSet입니다.The 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.xsd 파일을 사용합니다.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. XmlReader 만든 인스턴스에 Create Xml-data Reduced (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. 포함, 가져오기의 해상도 사용 하지 않도록 설정 하 고 스키마의 요소를 다시 정의 설정 합니다 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.

적용 대상

추가 정보