Aracılığıyla paylaş


XmlSchemaInference.InferSchema Yöntem

Tanım

Belirtilen XML belgesinden bir XML Şema Tanımlama Dili (XSD) şeması çıkarsar.

Aşırı Yüklemeler

InferSchema(XmlReader)

Belirtilen nesnede bulunan XML belgesinden bir XML Şema Tanımlama Dili (XSD) şeması çıkarsar XmlReader .

InferSchema(XmlReader, XmlSchemaSet)

Belirtilen nesnede XmlReader bulunan XML belgesinden bir XML Şema Tanımlama Dili (XSD) şeması çıkarsar ve aynı hedef ad alanıyla belirtilen nesnede var olan bir şemayı kullanarak çıkarsanan şemayı XmlSchemaSet daraltır.

InferSchema(XmlReader)

Belirtilen nesnede bulunan XML belgesinden bir XML Şema Tanımlama Dili (XSD) şeması çıkarsar XmlReader .

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

Parametreler

instanceDocument
XmlReader

Şema XmlReader çıkarılması için XML belgesini içeren nesne.

Döndürülenler

XmlSchemaSet

Çıkarsanan XmlSchemaSet şemaları içeren bir nesne.

Özel durumlar

XML belgesi iyi biçimlendirilmemiş.

XmlReader Nesne kök düğüme veya bir öğeye konumlandırılmaz. Şema çıkarımı işlemi sırasında bir hata oluşur.

Örnekler

Bu örnek, giriş olarak bir XML dosyası alır ve örnek XML'yi doğrulayan bir şema oluşturur.

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

Giriş XML dosyası aşağıdadır.

<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 belgesinden çıkarılan şema aşağıdadır.

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

Açıklamalar

yöntemi, InferSchema belirtilen nesnede bulunan XML örneği belgesinden bir veya daha fazla W3C XML Şema Tanımlama Dili (XSD) şeması çıkartır XmlReader . XML belgesi birden çok ad alanından öğeler ve öznitelikler içeriyorsa, birden çok şema oluşturulur: belgede kullanılan her ad alanı için bir şema. Birincil şema, XML belgesinin tamamını doğrulayan şemadır ve hedef ad alanı XML belgesinin belge öğesinin ad alanıyla aynıdır.

Yöntemi kullanılırken InferSchema dikkate alınması gereken önemli notlar aşağıdadır.

  • yöntemi, InferSchema XML belgesindeki tüm xsi:type, xsi:schemaLocationveya xsi:noNamespaceSchemaLocation özniteliklerini yoksayar.

  • XmlReader Nesne yazılırsa, içerdiği tür bilgileri yoksayılır.

  • XmlReader Nesne, XML belgesinin kök öğesi olmayan bir öğeye konumlandırıldıysa, yalnızca bu öğe için bir şema çıkarılır. XmlReader Nesne bir öğeye konumlandırılmazsa, Read bir öğeyle karşılaşılana kadar (örneğin, olduğundaNodeType) yöntemi parametresinde XmlReader çağrılırElement. Bu noktada çıkarım işlemi bu öğeden başlar. Belgenin sonuna kadar hiçbir öğeyle karşılaşılmadıysa, bir ArgumentException oluşturulur.

Şunlara uygulanır

InferSchema(XmlReader, XmlSchemaSet)

Belirtilen nesnede XmlReader bulunan XML belgesinden bir XML Şema Tanımlama Dili (XSD) şeması çıkarsar ve aynı hedef ad alanıyla belirtilen nesnede var olan bir şemayı kullanarak çıkarsanan şemayı XmlSchemaSet daraltır.

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

Parametreler

instanceDocument
XmlReader

Şema XmlReader çıkarılması için XML belgesini içeren nesne.

schemas
XmlSchemaSet

Çıkarsanan XmlSchemaSet şemayı daraltmak için kullanılan mevcut şemayı içeren bir nesne.

Döndürülenler

XmlSchemaSet

Çıkarsanan XmlSchemaSet şemaları içeren bir nesne.

Özel durumlar

XML belgesi iyi biçimlendirilmemiş.

XmlReader Nesne kök düğüme veya bir öğeye konumlandırılmaz. Şema çıkarımı işlemi sırasında bir hata oluşur.

Örnekler

Aşağıdaki örnek kod, GIRIŞ olarak XML belgesi 1'i alır ve XML belge 1'i doğrulayan bir şema oluşturur. Örnek kod daha sonra XML belgesi 2'yi alır ve XML belge 1'den oluşturulan şemayı, XML belge 2'de bulunan değişikliklere göre daraltır.

Xml belgesi 1 aşağıdadır.

<?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 belgesi 2 aşağıdadır.

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

Aşağıdaki örnek kod, içinde readeryer alan ilk XML belgesinden bir şema çıkartır ve ardından, içindeki ikinci XML belgesinde bulunan değişikliklerle çıkarılmış şemayı iyileştirmektedir reader1. Örnek kod, şemayı çıkarsamak için ilk aşırı yüklenmiş InferSchema yöntemi ve nesnedeki mevcut şemayı XmlSchemaSet daraltmak için ikinci aşırı yüklenmiş InferSchema yöntemi kullanır.

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

Aşağıdaki şema, XML belgesi 1'den çıkarılan şemadır.

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

Aşağıdaki şema, XML belgesi 2'ye göre yukarıdaki şemanın geliştirilmiş sürümüdür.

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

Açıklamalar

yöntemi, InferSchema belirtilen nesnede bulunan XML örneği belgesinden bir veya daha fazla W3C XML Şema Tanımlama Dili (XSD) şeması çıkartır XmlReader . XML belgesi birden çok ad alanından öğeler ve öznitelikler içeriyorsa, birden çok şema oluşturulur: belgede kullanılan her ad alanı için bir şema. Birincil şema, XML belgesinin tamamını doğrulayan şemadır ve hedef ad alanı XML belgesinin belge öğesinin ad alanıyla aynıdır.

Yöntemi kullanılırken InferSchema dikkate alınması gereken önemli notlar aşağıdadır.

  • yöntemi, InferSchema XML belgesindeki tüm xsi:type, xsi:schemaLocationveya xsi:noNamespaceSchemaLocation özniteliklerini yoksayar.

  • XmlReader Nesne yazılırsa, içerdiği tür bilgileri yoksayılır.

  • XmlReader Nesne, XML belgesinin kök öğesi olmayan bir öğeye konumlandırıldıysa, yalnızca bu öğe için bir şema çıkarılır. XmlReader Nesne bir öğeye konumlandırılmazsa, Read bir öğeyle karşılaşılana kadar (örneğin, olduğundaNodeType) yöntemi parametresinde XmlReader çağrılırElement. Bu noktada çıkarım işlemi bu öğeden başlar. Belgenin sonuna kadar hiçbir öğeyle karşılaşılmadıysa, bir ArgumentException oluşturulur.

  • Bir XmlSchemaSet nesne parametre olarak geçirilirse ve nesnenin XmlReader konumlandırıldığı öğe içindeki XmlSchemaSetşemalardan birinde tanımlanırsa, aynı hedef ad alanına sahip parametredeki XmlSchemaSet mevcut şemayı daraltmak için çıkarsanan şema kullanılır; aksi takdirde ad alanı için yeni bir şema çıkarılır.

Şunlara uygulanır