다음을 통해 공유


XmlSchemaInference.InferSchema 메서드

정의

지정된 XML 문서에서 XSD(XML 스키마 정의 언어) 스키마를 유추합니다.

오버로드

InferSchema(XmlReader)

지정된 XmlReader 개체에 포함된 XML 문서에서 XSD(XML 스키마 정의 언어) 스키마를 유추합니다.

InferSchema(XmlReader, XmlSchemaSet)

지정된 XmlReader 개체에 포함된 XML 문서에서 XSD(XML 스키마 정의 언어) 스키마를 유추한 후 이 스키마를 XmlSchemaSet 개체에서 대상 네임스페이스가 같은 기존 스키마를 사용하여 구체화합니다.

InferSchema(XmlReader)

Source:
Infer.cs
Source:
Infer.cs
Source:
Infer.cs

지정된 XmlReader 개체에 포함된 XML 문서에서 XSD(XML 스키마 정의 언어) 스키마를 유추합니다.

public:
 System::Xml::Schema::XmlSchemaSet ^ InferSchema(System::Xml::XmlReader ^ instanceDocument);
public System.Xml.Schema.XmlSchemaSet InferSchema (System.Xml.XmlReader instanceDocument);
member this.InferSchema : System.Xml.XmlReader -> System.Xml.Schema.XmlSchemaSet
Public Function InferSchema (instanceDocument As XmlReader) As XmlSchemaSet

매개 변수

instanceDocument
XmlReader

스키마를 유추할 XML 문서가 포함된 XmlReader 개체입니다.

반환

유추된 스키마가 포함된 XmlSchemaSet 개체입니다.

예외

XML 문서가 제대로 구성되지 않은 경우

XmlReader 개체가 루트 노드 또는 요소에 없는 경우. 스키마를 유추하는 동안 오류가 발생합니다.

예제

이 예제에서는 XML 파일을 입력으로 사용하고 예제 XML의 유효성을 검사할 수 있는 스키마를 생성합니다.

XmlReader^ reader = XmlReader::Create("contosoBooks.xml");
XmlSchemaSet^ schemaSet = gcnew XmlSchemaSet();
XmlSchemaInference^ schema = gcnew XmlSchemaInference();

schemaSet = schema->InferSchema(reader);

for each (XmlSchema^ s in schemaSet->Schemas())
{
    s->Write(Console::Out);
}
XmlReader reader = XmlReader.Create("contosoBooks.xml");
XmlSchemaSet schemaSet = new XmlSchemaSet();
XmlSchemaInference schema = new XmlSchemaInference();

schemaSet = schema.InferSchema(reader);

foreach (XmlSchema s in schemaSet.Schemas())
{
    s.Write(Console.Out);
}
Dim reader As XmlReader = XmlReader.Create("contosoBooks.xml")
Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()
Dim schema As XmlSchemaInference = New XmlSchemaInference()

schemaSet = schema.InferSchema(reader)

For Each s As XmlSchema In schemaSet.Schemas()
    s.Write(Console.Out)
Next

다음은 입력 XML 파일입니다.

<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 문서에서 유추된 스키마입니다.

<?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>

설명

메서드는 InferSchema 지정된 개체에 포함된 XML 인스턴스 문서에서 하나 이상의 W3C XSD(XML 스키마 정의 언어) 스키마를 XmlReader 유추합니다. XML 문서에 여러 네임스페이스의 요소와 특성이 포함된 경우 문서에 사용되는 각 네임스페이스에 대해 하나씩 여러 스키마가 생성됩니다. 기본 스키마는 전체 XML 문서의 유효성을 검사할 수 있는 스키마이며 대상 네임스페이스는 XML 문서의 문서 요소 네임스페이스와 동일합니다.

다음은 메서드를 사용할 때 고려해야 할 중요한 참고 사항입니다 InferSchema .

  • 메서드는 InferSchema XML 문서의 모든 , xsi:schemaLocation또는 xsi:noNamespaceSchemaLocation 특성을 무시xsi:type합니다.

  • 개체를 XmlReader 입력하면 포함된 형식 정보가 무시됩니다.

  • 개체가 XmlReader XML 문서의 루트 요소가 아닌 요소에 배치되면 해당 요소에 대해서만 스키마가 유추됩니다. 개체가 XmlReader 요소에 배치되지 않은 경우 요소가 Read 발생할 때까지(예: 가 인 경우NodeType) 매개 변수에서 XmlReader 메서드가 호출됩니다Element. 이 시점에서 유추 프로세스는 해당 요소에서 시작됩니다. 문서가 끝날 때까지 요소가 없으면 이 ArgumentException throw됩니다.

적용 대상

InferSchema(XmlReader, XmlSchemaSet)

Source:
Infer.cs
Source:
Infer.cs
Source:
Infer.cs

지정된 XmlReader 개체에 포함된 XML 문서에서 XSD(XML 스키마 정의 언어) 스키마를 유추한 후 이 스키마를 XmlSchemaSet 개체에서 대상 네임스페이스가 같은 기존 스키마를 사용하여 구체화합니다.

public:
 System::Xml::Schema::XmlSchemaSet ^ InferSchema(System::Xml::XmlReader ^ instanceDocument, System::Xml::Schema::XmlSchemaSet ^ schemas);
public System.Xml.Schema.XmlSchemaSet InferSchema (System.Xml.XmlReader instanceDocument, System.Xml.Schema.XmlSchemaSet schemas);
member this.InferSchema : System.Xml.XmlReader * System.Xml.Schema.XmlSchemaSet -> System.Xml.Schema.XmlSchemaSet
Public Function InferSchema (instanceDocument As XmlReader, schemas As XmlSchemaSet) As XmlSchemaSet

매개 변수

instanceDocument
XmlReader

스키마를 유추할 XML 문서가 포함된 XmlReader 개체입니다.

schemas
XmlSchemaSet

유추된 스키마를 구체화하는 데 사용할 기존 스키마가 포함된 XmlSchemaSet 개체입니다.

반환

유추된 스키마가 포함된 XmlSchemaSet 개체입니다.

예외

XML 문서가 제대로 구성되지 않은 경우

XmlReader 개체가 루트 노드 또는 요소에 없는 경우. 스키마를 유추하는 동안 오류가 발생합니다.

예제

다음 예제 코드는 XML 문서 1을 입력으로 사용하고 XML 문서 1의 유효성을 검사할 수 있는 스키마를 생성합니다. 그런 다음 예제 코드는 XML 문서 2를 사용하고 XML 문서 2에 있는 변경 내용에 따라 XML 문서 1에서 생성된 스키마를 구체화합니다.

다음은 XML 문서 1입니다.

<?xml version="1.0" encoding="utf-8"?>
<item xmlns="http://www.contoso.com/items" productID="123456789">
    <name>Hammer</name>
    <price>9.95</price>
    <supplierID>1929</supplierID>
</item>

다음은 XML 문서 2입니다.

<?xml version="1.0" encoding="utf-8"?>
<item xmlns="http://www.contoso.com/items" productID="A53-246">
    <name>Paint</name>
    <price>12.50</price>
</item>

다음 예제 코드는 에 포함된 첫 번째 XML 문서에서 스키마를 유추한 reader다음 에 포함된 두 번째 XML 문서에 있는 reader1변경 내용으로 유추된 스키마를 구체화합니다. 예제 코드는 첫 번째 오버로드된 InferSchema 메서드를 사용하여 스키마를 유추하고 두 번째 오버로드된 InferSchema 메서드를 사용하여 개체의 기존 스키마를 XmlSchemaSet 구체화합니다.

XmlReader^ reader = XmlReader::Create("item1.xml");
XmlReader^ reader1 = XmlReader::Create("item2.xml");
XmlSchemaSet^ schemaSet = gcnew XmlSchemaSet();
XmlSchemaInference^ inference = gcnew XmlSchemaInference();
schemaSet = inference->InferSchema(reader);

// Display the inferred schema.
Console::WriteLine("Original schema:\n");
for each (XmlSchema^ schema in schemaSet->Schemas("http://www.contoso.com/items"))
{
    schema->Write(Console::Out);
}

// Use the additional data in item2.xml to refine the original schema.
schemaSet = inference->InferSchema(reader1, schemaSet);

// Display the refined schema.
Console::WriteLine("\n\nRefined schema:\n");
for each (XmlSchema^ schema in schemaSet->Schemas("http://www.contoso.com/items"))
{
    schema->Write(Console::Out);
}
XmlReader reader = XmlReader.Create("item1.xml");
XmlReader reader1 = XmlReader.Create("item2.xml");
XmlSchemaSet schemaSet = new XmlSchemaSet();
XmlSchemaInference inference = new XmlSchemaInference();
schemaSet = inference.InferSchema(reader);

// Display the inferred schema.
Console.WriteLine("Original schema:\n");
foreach (XmlSchema schema in schemaSet.Schemas("http://www.contoso.com/items"))
{
    schema.Write(Console.Out);
}

// Use the additional data in item2.xml to refine the original schema.
schemaSet = inference.InferSchema(reader1, schemaSet);

// Display the refined schema.
Console.WriteLine("\n\nRefined schema:\n");
foreach (XmlSchema schema in schemaSet.Schemas("http://www.contoso.com/items"))
{
    schema.Write(Console.Out);
}
Dim reader As XmlReader = XmlReader.Create("item1.xml")
Dim reader1 As XmlReader = XmlReader.Create("item2.xml")
Dim schemaSet As XmlSchemaSet = New XmlSchemaSet()
Dim inference As XmlSchemaInference = New XmlSchemaInference()
schemaSet = inference.InferSchema(reader)

' Display the inferred schema.
Console.WriteLine("Original schema:\n")
For Each schema As XmlSchema In schemaSet.Schemas("http://www.contoso.com/items")
    schema.Write(Console.Out)
Next

' Use the additional data in item2.xml to refine the original schema.
schemaSet = inference.InferSchema(reader1, schemaSet)

' Display the refined schema.
Console.WriteLine("\n\nRefined schema:\n")
For Each schema As XmlSchema In schemaSet.Schemas("http://www.contoso.com/items")
    schema.Write(Console.Out)
Next

다음 스키마는 XML 문서 1에서 유추된 스키마입니다.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/items" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="item">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="name" type="xs:string" />
        <xs:element name="price" type="xs:decimal" />
        <xs:element name="supplierID" type="xs:unsignedShort" />
      </xs:sequence>
      <xs:attribute name="productID" type="xs:unsignedInt" use="required" />
    </xs:complexType>
  </xs:element>
</xs:schema>

다음 스키마는 XML 문서 2를 기반으로 위의 스키마의 구체화된 버전입니다.

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://www.contoso.com/items" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="item">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="name" type="xs:string" />
        <xs:element name="price" type="xs:decimal" />
        <xs:element minOccurs="0" name="supplierID" type="xs:unsignedShort" />
      </xs:sequence>
      <xs:attribute name="productID" type="xs:string" use="required" />
    </xs:complexType>
  </xs:element>
</xs:schema>

설명

메서드는 InferSchema 지정된 개체에 포함된 XML 인스턴스 문서에서 하나 이상의 W3C XSD(XML 스키마 정의 언어) 스키마를 XmlReader 유추합니다. XML 문서에 여러 네임스페이스의 요소와 특성이 포함된 경우 문서에 사용되는 각 네임스페이스에 대해 하나씩 여러 스키마가 생성됩니다. 기본 스키마는 전체 XML 문서의 유효성을 검사할 수 있는 스키마이며 대상 네임스페이스는 XML 문서의 문서 요소 네임스페이스와 동일합니다.

다음은 메서드를 사용할 때 고려해야 할 중요한 참고 사항입니다 InferSchema .

  • 메서드는 InferSchema XML 문서의 모든 , xsi:schemaLocation또는 xsi:noNamespaceSchemaLocation 특성을 무시xsi:type합니다.

  • 개체를 XmlReader 입력하면 포함된 형식 정보가 무시됩니다.

  • 개체가 XmlReader XML 문서의 루트 요소가 아닌 요소에 배치되면 해당 요소에 대해서만 스키마가 유추됩니다. 개체가 XmlReader 요소에 배치되지 않은 경우 요소가 Read 발생할 때까지(예: 가 인 경우NodeType) 매개 변수에서 XmlReader 메서드가 호출됩니다Element. 이 시점에서 유추 프로세스는 해당 요소에서 시작됩니다. 문서가 끝날 때까지 요소가 없으면 이 ArgumentException throw됩니다.

  • 개체가 XmlSchemaSet 매개 변수로 전달되고 개체가 배치되는 XmlReader 요소가 의 스키마 XmlSchemaSet중 하나에 정의된 경우 유추된 스키마는 동일한 대상 네임스페이스를 사용하여 매개 변수의 XmlSchemaSet 기존 스키마를 구체화하는 데 사용됩니다. 그렇지 않으면 네임스페이스에 대해 새 스키마가 유추됩니다.

적용 대상