XmlSchemaSet 클래스

정의

XSD(XML 스키마 정의 언어) 스키마의 캐시를 포함합니다.Contains a cache of XML Schema definition language (XSD) schemas.

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

예제

다음 예제에서는 XmlSchemaSet에 저장된 스키마를 사용하여 XML 파일의 유효성을 검사합니다.The following example validates an XML file using schemas stored in the XmlSchemaSet. XML 파일의 네임스페이스 urn:bookstore-schemaXmlSchemaSet에서 유효성 검사에 사용할 스키마를 식별합니다.The namespace in the XML file, urn:bookstore-schema, identifies which schema in the XmlSchemaSet to use for validation. 예제의 출력은 XML 파일에 두 가지 스키마 위반이 있음을 보여 줍니다.Output from the example shows that the XML file has two schema violations:

  • 첫 번째 <book > 요소는 author <> 요소를 포함 하지만 <제목 > 또는 <가격 > 요소는 포함 하지 않습니다.The first <book> element contains an <author> element but no <title> or <price> element.

  • < <Last < book< >요소에있는author>요소에firstname>및lastname>요소가없고<대신 잘못 된 이름 > 요소가 있습니다.The <author> element in the last <book> element is missing a <first-name> and <last-name> element and instead has an invalid <name> element.

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

입력Input

이 샘플에서는 다음 두 입력 파일을 사용합니다.The sample uses the following two input files.

booksSchemaFail.xml: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: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>

설명

중요

  • 알 수 없거나 신뢰할 수 없는 출처 또는 위치에서 스키마를 사용 하지 마세요.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.
  • 추가 보안 고려 사항 "보안 고려 사항" 섹션에 나와 있습니다.Additional security considerations are covered in the "Security Considerations" section.

XmlSchemaSet 캐시 또는 라이브러리 XML 스키마 정의 언어 (XSD) 스키마를 저장할 수 있습니다.XmlSchemaSet is a cache or library where you can store XML Schema definition language (XSD) schemas. XmlSchemaSet은 파일 또는 URL에서 스키마에 액세스하는 대신 메모리에 있는 스키마를 캐시하여 성능을 향상시킵니다.XmlSchemaSet improves performance by caching schemas in memory instead of accessing them from a file or a URL. 각 스키마 네임 스페이스 URI로 식별 되 고 위치를 지정 된 스키마 집합에 추가 될 때입니다.Each schema is identified by the namespace URI and location that was specified when the schema was added to the set. 사용할 합니다 XmlReaderSettings.Schemas 할당할 속성은 XmlSchemaSet 개체 데이터 유효성 검사 XML 판독기를 사용 해야 합니다.You use the XmlReaderSettings.Schemas property to assign the XmlSchemaSet object an XML reader should use for data validation.

보안 고려 사항Security Considerations

  • 알 수 없거나 신뢰할 수 없는 소스에서 스키마를 사용 하지 마세요.Do not use schemas from unknown or untrusted sources. 이렇게 하면 코드의 보안이 손상 됩니다.Doing so will compromise the security of your code. 외부 네임 스페이스 또는 위치 참조를 포함, 가져오기 및 redefine 요소의 스키마를 포함 하거나 가져오는 스키마의 기본 URI를 기준으로 확인 됩니다.External namespaces or locations referenced in include, import, and redefine elements of a schema are resolved with respect to the base URI of the schema that includes or imports them. 예를 들어, 포함 하거나 가져오는 스키마의 기본 URI를 비어 있는 경우 또는 null, 외부 위치가 현재 디렉터리를 기준으로 확인 됩니다.For example, if the base URI of the including or importing schema is empty or null, the external locations are resolved with respect to the current directory. 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 클래스가 사용 하는 System.Text.RegularExpressions.Regex 구문 분석 하 고 XML 스키마에서 정규식과 일치 하는 클래스입니다.The XmlSchemaSet class uses the System.Text.RegularExpressions.Regex class to parse and match regular expressions in an XML schema. 유효성 검사 XML 스키마에서 정규식 패턴 패싯의 CPU 사용량이 증가 될 수 있습니다 및 고가용성 시나리오에서 피해 야 합니다.Validation of pattern facets with regular expressions in an XML schema may involve increased CPU usage and should be avoided in high availability scenarios.

  • 사용 하 여 결과로 발생 하는 예외를 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.

생성자

XmlSchemaSet()

XmlSchemaSet 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the XmlSchemaSet class.

XmlSchemaSet(XmlNameTable)

지정된 XmlSchemaSet를 사용하여 XmlNameTable 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the XmlSchemaSet class with the specified XmlNameTable.

속성

CompilationSettings

XmlSchemaCompilationSettingsXmlSchemaSet를 가져오거나 설정합니다.Gets or sets the XmlSchemaCompilationSettings for the XmlSchemaSet.

Count

XmlSchemaSet에 포함된 논리 XSD(XML 스키마 정의 언어) 스키마의 개수를 가져옵니다.Gets the number of logical XML Schema definition language (XSD) schemas in the XmlSchemaSet.

GlobalAttributes

XmlSchemaSet에 포함된 모든 XSD(XML 스키마 정의 언어) 스키마에 있는 전역 특성을 모두 가져옵니다.Gets all the global attributes in all the XML Schema definition language (XSD) schemas in the XmlSchemaSet.

GlobalElements

XmlSchemaSet에 포함된 모든 XSD(XML 스키마 정의 언어) 스키마에 있는 전역 요소를 모두 가져옵니다.Gets all the global elements in all the XML Schema definition language (XSD) schemas in the XmlSchemaSet.

GlobalTypes

XmlSchemaSet에 포함된 모든 XSD(XML 스키마 정의 언어) 스키마에 있는 전역 단순 및 복합 형식을 모두 가져옵니다.Gets all of the global simple and complex types in all the XML Schema definition language (XSD) schemas in the XmlSchemaSet.

IsCompiled

XmlSchemaSet에 포함된 XSD(XML 스키마 정의 언어) 스키마가 컴파일되었는지 여부를 나타내는 값을 가져옵니다.Gets a value that indicates whether the XML Schema definition language (XSD) schemas in the XmlSchemaSet have been compiled.

NameTable

새 XSD(XML 스키마 정의 언어) 스키마를 로드할 때 XmlNameTable에서 사용하는 기본 XmlSchemaSet을 가져옵니다.Gets the default XmlNameTable used by the XmlSchemaSet when loading new XML Schema definition language (XSD) schemas.

XmlResolver

스키마의 include 및 import 요소에서 참조하는 네임스페이스 또는 위치를 확인하는 데 사용되는 XmlResolver를 설정합니다.Sets the XmlResolver used to resolve namespaces or locations referenced in include and import elements of a schema.

메서드

Add(String, String)

지정된 URL에 있는 XSD(XML 스키마 정의 언어) 스키마를 XmlSchemaSet에 추가합니다.Adds the XML Schema definition language (XSD) schema at the URL specified to the XmlSchemaSet.

Add(String, XmlReader)

XmlReader에 포함된 XSD(XML 스키마 정의 언어) 스키마를 XmlSchemaSet에 추가합니다.Adds the XML Schema definition language (XSD) schema contained in the XmlReader to the XmlSchemaSet.

Add(XmlSchema)

지정된 XmlSchemaXmlSchemaSet에 추가합니다.Adds the given XmlSchema to the XmlSchemaSet.

Add(XmlSchemaSet)

지정된 XmlSchemaSet에 포함된 모든 XSD(XML 스키마 정의 언어) 스키마를 XmlSchemaSet에 추가합니다.Adds all the XML Schema definition language (XSD) schemas in the given XmlSchemaSet to the XmlSchemaSet.

Compile()

XmlSchemaSet에 추가된 XSD(XML 스키마 정의 언어) 스키마를 하나의 논리 스키마로 컴파일합니다.Compiles the XML Schema definition language (XSD) schemas added to the XmlSchemaSet into one logical schema.

Contains(String)

지정된 대상 네임스페이스 URI가 있는 XSD(XML 스키마 정의 언어) 스키마가 XmlSchemaSet에 있는지 여부를 나타냅니다.Indicates whether an XML Schema definition language (XSD) schema with the specified target namespace URI is in the XmlSchemaSet.

Contains(XmlSchema)

지정된 XSD(XML 스키마 정의 언어) XmlSchema 개체가 XmlSchemaSet에 있는지 여부를 나타냅니다.Indicates whether the specified XML Schema definition language (XSD) XmlSchema object is in the XmlSchemaSet.

CopyTo(XmlSchema[], Int32)

지정된 인덱스부터 시작하여 XmlSchema의 모든 XmlSchemaSet 개체를 지정된 배열에 복사합니다.Copies all the XmlSchema objects from the XmlSchemaSet to the given array, starting at the given index.

Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

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

기본 해시 함수로 작동합니다.Serves as the default hash function.

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

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

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

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

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

지정된 XSD(XML 스키마 정의 언어) 스키마를 XmlSchemaSet에서 제거합니다.Removes the specified XML Schema definition language (XSD) schema from the XmlSchemaSet.

RemoveRecursive(XmlSchema)

지정된 XSD(XML 스키마 정의 언어) 스키마와 해당 스키마에 가져온 모든 스키마를 XmlSchemaSet에서 제거합니다.Removes the specified XML Schema definition language (XSD) schema and all the schemas it imports from the XmlSchemaSet.

Reprocess(XmlSchema)

XmlSchemaSet에 이미 있는 XSD(XML 스키마 정의 언어) 스키마를 다시 처리합니다.Reprocesses an XML Schema definition language (XSD) schema that already exists in the XmlSchemaSet.

Schemas()

XmlSchemaSet에 포함된 모든 XSD(XML 스키마 정의 언어) 스키마의 컬렉션을 반환합니다.Returns a collection of all the XML Schema definition language (XSD) schemas in the XmlSchemaSet.

Schemas(String)

XmlSchemaSet에서 지정된 네임스페이스에 속하는 모든 XSD(XML 스키마 정의 언어) 스키마의 컬렉션을 반환합니다.Returns a collection of all the XML Schema definition language (XSD) schemas in the XmlSchemaSet that belong to the given namespace.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)

이벤트

ValidationEventHandler

XSD(XML 스키마 정의 언어) 스키마 유효성 검사 오류에 대한 정보를 받을 이벤트 처리기를 지정합니다.Specifies an event handler for receiving information about XML Schema definition language (XSD) schema validation errors.

적용 대상