XmlSchemaSet 클래스

정의

XSD(XML 스키마 정의 언어) 스키마의 캐시를 포함합니다.

public ref class XmlSchemaSet
public class XmlSchemaSet
type XmlSchemaSet = class
Public Class XmlSchemaSet
상속
XmlSchemaSet

예제

다음 예제에서는 에 저장된 스키마를 사용하여 XML 파일의 유효성을 XmlSchemaSet검사합니다. XML 파일 urn:bookstore-schema의 네임스페이스는 유효성 검사에 XmlSchemaSet 사용할 스키마를 식별합니다. 예제의 출력은 XML 파일에 두 가지 스키마 위반이 있음을 보여 줍니다.

  • 첫 번째 <book> 요소에는 <author> 요소가 포함되지만 요소가 포함되지 않습니다 <price> <title>.

  • <author> 마지막 <book> 요소의 요소에 a <first-name> 및 <last-name> 요소가 누락되고 대신 잘못된 <name> 요소가 있습니다.

#using <System.Xml.dll>

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

// Display any validation errors.
static void ValidationCallBack( Object^ /*sender*/, ValidationEventArgs^ e )
{
   Console::WriteLine( L"Validation Error:\n   {0}", e->Message );
   Console::WriteLine();
}

int main()
{
   // Create the XmlSchemaSet class.
   XmlSchemaSet^ sc = gcnew XmlSchemaSet;

   // Add the schema to the collection.
   sc->Add( L"urn:bookstore-schema", L"books.xsd" );

   // Set the validation settings.
   XmlReaderSettings^ settings = gcnew XmlReaderSettings;
   settings->ValidationType = ValidationType::Schema;
   settings->Schemas = sc;
   settings->ValidationEventHandler += gcnew ValidationEventHandler(ValidationCallBack);

   // Create the XmlReader object.
   XmlReader^ reader = XmlReader::Create( L"booksSchemaFail.xml", settings );

   // Parse the file. 
   while ( reader->Read() )
      ;

   return 1;
}
// The example displays output like the following:
//   Validation Error: 
//        The element 'book' in namespace 'urn:bookstore-schema' has invalid child element 'author' 
//        in namespace 'urn:bookstore-schema'. List of possible elements expected: 'title' in 
//        namespace 'urn:bookstore-schema'.
//
//    Validation Error: 
//       The element 'author' in namespace 'urn:bookstore-schema' has invalid child element 'name' 
//       in namespace 'urn:bookstore-schema'. List of possible elements expected: 'first-name' in 
//       namespace 'urn:bookstore-schema'.
using System;
using System.Xml;
using System.Xml.Schema;
using System.IO;

public class Sample
{
  public static void Main() {

    // Create the XmlSchemaSet class.
    XmlSchemaSet sc = new XmlSchemaSet();

    // Add the schema to the collection.
    sc.Add("urn:bookstore-schema", "books.xsd");

    // Set the validation settings.
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.ValidationType = ValidationType.Schema;
    settings.Schemas = sc;
    settings.ValidationEventHandler += ValidationCallBack;

    // Create the XmlReader object.
    XmlReader reader = XmlReader.Create("booksSchemaFail.xml", settings);

    // Parse the file.
    while (reader.Read());
  }

  // Display any validation errors.
  private static void ValidationCallBack(object sender, ValidationEventArgs e) {
    Console.WriteLine($"Validation Error:\n   {e.Message}\n");
  }
}
// The example displays output like the following:
//   Validation Error:
//        The element 'book' in namespace 'urn:bookstore-schema' has invalid child element 'author'
//        in namespace 'urn:bookstore-schema'. List of possible elements expected: 'title' in
//        namespace 'urn:bookstore-schema'.
//
//    Validation Error:
//       The element 'author' in namespace 'urn:bookstore-schema' has invalid child element 'name'
//       in namespace 'urn:bookstore-schema'. List of possible elements expected: 'first-name' in
//       namespace 'urn:bookstore-schema'.
Imports System.Xml
Imports System.Xml.Schema
Imports System.IO

Public Module Sample 
  Public Sub Main() 

    ' Create the XmlSchemaSet class.
    Dim sc as XmlSchemaSet = new XmlSchemaSet()

    ' Add the schema to the collection.
    sc.Add("urn:bookstore-schema", "books.xsd")

    ' Set the validation settings.
    Dim settings as XmlReaderSettings = new XmlReaderSettings()
    settings.ValidationType = ValidationType.Schema
    settings.Schemas = sc
    AddHandler settings.ValidationEventHandler, AddressOf ValidationCallBack
 
    ' Create the XmlReader object.
    Dim reader as XmlReader = XmlReader.Create("booksSchemaFail.xml", settings)

    ' Parse the file. 
    While reader.Read()
    End While
    
  End Sub

  ' Display any validation errors.
  Private Sub ValidationCallBack(sender as object, e as ValidationEventArgs) 
    Console.WriteLine($"Validation Error:{vbCrLf}   {e.Message}")
    Console.WriteLine()
  End Sub
End Module
' The example displays output like the following:
'   Validation Error: 
'        The element 'book' in namespace 'urn:bookstore-schema' has invalid child element 'author' 
'        in namespace 'urn:bookstore-schema'. List of possible elements expected: 'title' in 
'        namespace 'urn:bookstore-schema'.
'
'    Validation Error: 
'       The element 'author' in namespace 'urn:bookstore-schema' has invalid child element 'name' 
'       in namespace 'urn:bookstore-schema'. List of possible elements expected: 'first-name' in 
'       namespace 'urn:bookstore-schema'.

입력

샘플에서는 다음 두 개의 입력 파일을 사용합니다.

booksSchemaFail.xml:

<?xml version='1.0'?>
<bookstore xmlns="urn:bookstore-schema">
  <book>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
  </book>
  <book genre="novel">
    <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">
    <title>The Gorgias</title>
    <author>
      <name>Plato</name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

books.xsd:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="urn:bookstore-schema"
    elementFormDefault="qualified"
    targetNamespace="urn:bookstore-schema">

 <xsd:element name="bookstore" type="bookstoreType"/>

 <xsd:complexType name="bookstoreType">
  <xsd:sequence maxOccurs="unbounded">
   <xsd:element name="book"  type="bookType"/>
  </xsd:sequence>
 </xsd:complexType>

 <xsd:complexType name="bookType">
  <xsd:sequence>
   <xsd:element name="title" type="xsd:string"/>
   <xsd:element name="author" type="authorName"/>
   <xsd:element name="price"  type="xsd:decimal"/>
  </xsd:sequence>
  <xsd:attribute name="genre" type="xsd:string"/>
 </xsd:complexType>

 <xsd:complexType name="authorName">
  <xsd:sequence>
   <xsd:element name="first-name"  type="xsd:string"/>
   <xsd:element name="last-name" type="xsd:string"/>
  </xsd:sequence>
 </xsd:complexType>

</xsd:schema>

설명

중요

  • 알 수 없거나 신뢰할 수 없는 출처 또는 위치에서 스키마를 사용 하지 마세요. 이렇게 하면 코드의 보안이 손상 됩니다.
  • XML 스키마 (인라인 스키마 포함)는 서비스 거부 공격;에 기본적으로 취약 이러한 신뢰할 수 없는 시나리오에서 허용 하지 않습니다.
  • 스키마 유효성 검사 오류 메시지 및 예외 콘텐츠 모델 또는 스키마 파일에 URI 경로 대 한 중요 한 정보를 노출할 수 있습니다. 신뢰할 수 없는 호출자에 게이 정보를 노출 하지 않도록 주의 해야 합니다.
  • 추가 보안 고려 사항은 "보안 고려 사항" 섹션에서 다룹니다.

XmlSchemaSet 는 XSD(XML 스키마 정의 언어) 스키마를 저장할 수 있는 캐시 또는 라이브러리입니다. XmlSchemaSet 는 파일 또는 URL에서 스키마에 액세스하는 대신 메모리에서 스키마를 캐싱하여 성능을 향상시킵니다. 각 스키마는 스키마가 집합에 추가될 때 지정된 네임스페이스 URI 및 위치로 식별됩니다. 이 XmlReaderSettings.Schemas 속성을 사용하여 XML 판독기에서 XmlSchemaSet 데이터 유효성 검사에 사용해야 하는 개체를 할당합니다.

보안 고려사항

  • 알 수 없거나 신뢰할 수 없는 원본의 스키마를 사용하지 마세요. 이렇게 하면 코드의 보안이 손상 됩니다. 스키마의 포함, 가져오기 및 다시 정의 요소에서 참조되는 외부 네임스페이스 또는 위치는 스키마를 포함하거나 가져오는 스키마의 기본 URI와 관련하여 확인됩니다. 예를 들어 포함 또는 가져오기 스키마의 기본 URI가 비어 있거나 null외부 위치가 현재 디렉터리와 관련하여 확인됩니다. 클래스 XmlUrlResolver 는 기본적으로 외부 스키마를 확인하는 데 사용됩니다. 스키마의 포함, 가져오기 및 다시 정의 요소의 확인을 사용하지 않도록 설정하려면 속성을 null.로 설정합니다XmlSchemaSet.XmlResolver.

  • 클래스는 XmlSchemaSet 클래스를 System.Text.RegularExpressions.Regex 사용하여 XML 스키마의 정규식을 구문 분석하고 일치합니다. XML 스키마에서 정규식을 사용하는 패턴 패싯의 유효성 검사에는 CPU 사용량이 증가할 수 있으며 고가용성 시나리오에서는 피해야 합니다.

  • 클래스를 사용한 XmlSchemaSet 결과로 발생한 예외(예: XmlSchemaException 클래스)에는 신뢰할 수 없는 시나리오에서 노출되어서는 안 되는 중요한 정보가 포함될 수 있습니다. 예를 들어, 속성 XmlSchemaExceptionSourceUri 예외를 발생시킨 스키마 파일에 대한 URI 경로를 반환합니다. SourceUri 신뢰할 수 없는 시나리오에서는 속성을 노출해서는 안 됩니다. 이 중요한 정보가 신뢰할 수 없는 시나리오에서 노출되지 않도록 예외를 올바르게 처리해야 합니다.

생성자

XmlSchemaSet()

XmlSchemaSet 클래스의 새 인스턴스를 초기화합니다.

XmlSchemaSet(XmlNameTable)

지정된 XmlSchemaSet를 사용하여 XmlNameTable 클래스의 새 인스턴스를 초기화합니다.

속성

CompilationSettings

XmlSchemaCompilationSettingsXmlSchemaSet를 가져오거나 설정합니다.

Count

XmlSchemaSet에 포함된 논리 XSD(XML 스키마 정의 언어) 스키마의 개수를 가져옵니다.

GlobalAttributes

XmlSchemaSet에 포함된 모든 XSD(XML 스키마 정의 언어) 스키마에 있는 전역 특성을 모두 가져옵니다.

GlobalElements

XmlSchemaSet에 포함된 모든 XSD(XML 스키마 정의 언어) 스키마에 있는 전역 요소를 모두 가져옵니다.

GlobalTypes

XmlSchemaSet에 포함된 모든 XSD(XML 스키마 정의 언어) 스키마에 있는 전역 단순 및 복합 형식을 모두 가져옵니다.

IsCompiled

XmlSchemaSet에 포함된 XSD(XML 스키마 정의 언어) 스키마가 컴파일되었는지 여부를 나타내는 값을 가져옵니다.

NameTable

새 XSD(XML 스키마 정의 언어) 스키마를 로드할 때 XmlNameTable에서 사용하는 기본 XmlSchemaSet을 가져옵니다.

XmlResolver

스키마의 include 및 import 요소에서 참조하는 네임스페이스 또는 위치를 확인하는 데 사용되는 XmlResolver를 설정합니다.

메서드

Add(String, String)

지정된 URL에 있는 XSD(XML 스키마 정의 언어) 스키마를 XmlSchemaSet에 추가합니다.

Add(String, XmlReader)

XmlReader에 포함된 XSD(XML 스키마 정의 언어) 스키마를 XmlSchemaSet에 추가합니다.

Add(XmlSchema)

지정된 XmlSchemaXmlSchemaSet에 추가합니다.

Add(XmlSchemaSet)

지정된 XmlSchemaSet에 포함된 모든 XSD(XML 스키마 정의 언어) 스키마를 XmlSchemaSet에 추가합니다.

Compile()

XmlSchemaSet에 추가된 XSD(XML 스키마 정의 언어) 스키마를 하나의 논리 스키마로 컴파일합니다.

Contains(String)

지정된 대상 네임스페이스 URI가 있는 XSD(XML 스키마 정의 언어) 스키마가 XmlSchemaSet에 있는지 여부를 나타냅니다.

Contains(XmlSchema)

지정된 XSD(XML 스키마 정의 언어) XmlSchema 개체가 XmlSchemaSet에 있는지 여부를 나타냅니다.

CopyTo(XmlSchema[], Int32)

지정된 인덱스부터 시작하여 XmlSchema의 모든 XmlSchemaSet 개체를 지정된 배열에 복사합니다.

Equals(Object)

지정된 개체가 현재 개체와 같은지 확인합니다.

(다음에서 상속됨 Object)
GetHashCode()

기본 해시 함수로 작동합니다.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.

(다음에서 상속됨 Object)
Remove(XmlSchema)

지정된 XSD(XML 스키마 정의 언어) 스키마를 XmlSchemaSet에서 제거합니다.

RemoveRecursive(XmlSchema)

지정된 XSD(XML 스키마 정의 언어) 스키마와 해당 스키마에 가져온 모든 스키마를 XmlSchemaSet에서 제거합니다.

Reprocess(XmlSchema)

XmlSchemaSet에 이미 있는 XSD(XML 스키마 정의 언어) 스키마를 다시 처리합니다.

Schemas()

XmlSchemaSet에 포함된 모든 XSD(XML 스키마 정의 언어) 스키마의 컬렉션을 반환합니다.

Schemas(String)

XmlSchemaSet에서 지정된 네임스페이스에 속하는 모든 XSD(XML 스키마 정의 언어) 스키마의 컬렉션을 반환합니다.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.

(다음에서 상속됨 Object)

이벤트

ValidationEventHandler

XSD(XML 스키마 정의 언어) 스키마 유효성 검사 오류에 대한 정보를 받을 이벤트 처리기를 지정합니다.

적용 대상