Compartilhar via


XmlSchemaInference.InferSchema Método

Definição

Infere um esquema XSD (Linguagem de Definição de Esquema XML) do documento XML especificado.

Sobrecargas

Nome Description
InferSchema(XmlReader)

Infere um esquema XSD (Linguagem de Definição de Esquema XML) do documento XML contido no XmlReader objeto especificado.

InferSchema(XmlReader, XmlSchemaSet)

Infere um esquema XSD (Linguagem de Definição de Esquema XML) do documento XML contido no XmlReader objeto especificado e refina o esquema inferido usando um esquema existente no XmlSchemaSet objeto especificado com o mesmo namespace de destino.

InferSchema(XmlReader)

Origem:
Infer.cs
Origem:
Infer.cs
Origem:
Infer.cs
Origem:
Infer.cs
Origem:
Infer.cs

Infere um esquema XSD (Linguagem de Definição de Esquema XML) do documento XML contido no XmlReader objeto especificado.

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

Parâmetros

instanceDocument
XmlReader

Um XmlReader objeto que contém o documento XML do qual inferir um esquema.

Retornos

Um XmlSchemaSet objeto que contém os esquemas inferidos.

Exceções

O documento XML não está bem formado.

O XmlReader objeto não está posicionado no nó raiz ou em um elemento. Ocorre um erro durante o processo de inferência de esquema.

Exemplos

Este exemplo usa um arquivo XML como entrada e gera um esquema que pode validar o XML de exemplo.

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

Veja a seguir o arquivo XML de entrada.

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

Veja a seguir o esquema inferido do documento 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>

Comentários

O InferSchema método infere um ou mais esquemas XSD (Linguagem de Definição de Esquema XML) W3C do documento de instância XML contido no XmlReader objeto especificado. Se o documento XML contiver elementos e atributos de vários namespaces, vários esquemas serão gerados: um para cada namespace usado no documento. O esquema primário é o esquema que pode validar todo o documento XML e seu namespace de destino é o mesmo que o namespace do elemento de documento do documento XML.

Veja a seguir notas importantes a serem consideradas ao usar o InferSchema método.

  • O InferSchema método ignora qualquer xsi:type, xsi:schemaLocationou xsi:noNamespaceSchemaLocation atributos no documento XML.

  • Se o XmlReader objeto for digitado, as informações de tipo que ele contém serão ignoradas.

  • Se o XmlReader objeto estiver posicionado em um elemento que não seja o elemento raiz do documento XML, um esquema será inferido apenas para esse elemento. Se o XmlReader objeto não estiver posicionado em um elemento, o Read método será chamado no XmlReader parâmetro até que um elemento seja encontrado (por exemplo, quando NodeType é Element). Neste ponto, o processo de inferência começa a partir desse elemento. Se nenhum elemento for encontrado até o final do documento, um ArgumentException será gerado.

Aplica-se a

InferSchema(XmlReader, XmlSchemaSet)

Origem:
Infer.cs
Origem:
Infer.cs
Origem:
Infer.cs
Origem:
Infer.cs
Origem:
Infer.cs

Infere um esquema XSD (Linguagem de Definição de Esquema XML) do documento XML contido no XmlReader objeto especificado e refina o esquema inferido usando um esquema existente no XmlSchemaSet objeto especificado com o mesmo namespace de destino.

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

Parâmetros

instanceDocument
XmlReader

Um XmlReader objeto que contém o documento XML do qual inferir um esquema.

schemas
XmlSchemaSet

Um XmlSchemaSet objeto que contém um esquema existente usado para refinar o esquema inferido.

Retornos

Um XmlSchemaSet objeto que contém os esquemas inferidos.

Exceções

O documento XML não está bem formado.

O XmlReader objeto não está posicionado no nó raiz ou em um elemento. Ocorre um erro durante o processo de inferência de esquema.

Exemplos

O código de exemplo a seguir usa o documento XML 1 como entrada e gera um esquema que pode validar o documento XML 1. Em seguida, o código de exemplo usa o documento XML 2 e refina o esquema gerado do documento XML 1, com base nas alterações encontradas no documento XML 2.

Veja a seguir o documento 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>

Veja a seguir o documento 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>

O código de exemplo a seguir infere um esquema do primeiro documento XML contido e, em readerseguida, refina o esquema inferido com as alterações encontradas no segundo documento XML contido em reader1. O código de exemplo usa o primeiro método sobrecarregado InferSchema para inferir o esquema e o segundo método sobrecarregado InferSchema para refinar o esquema existente no XmlSchemaSet objeto.

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

O esquema a seguir é o esquema inferido do documento 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>

O esquema a seguir é a versão refinada do esquema acima, com base no documento 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>

Comentários

O InferSchema método infere um ou mais esquemas XSD (Linguagem de Definição de Esquema XML) W3C do documento de instância XML contido no XmlReader objeto especificado. Se o documento XML contiver elementos e atributos de vários namespaces, vários esquemas serão gerados: um para cada namespace usado no documento. O esquema primário é o esquema que pode validar todo o documento XML e seu namespace de destino é o mesmo que o namespace do elemento de documento do documento XML.

Veja a seguir notas importantes a serem consideradas ao usar o InferSchema método.

  • O InferSchema método ignora qualquer xsi:type, xsi:schemaLocationou xsi:noNamespaceSchemaLocation atributos no documento XML.

  • Se o XmlReader objeto for digitado, as informações de tipo que ele contém serão ignoradas.

  • Se o XmlReader objeto estiver posicionado em um elemento que não seja o elemento raiz do documento XML, um esquema será inferido apenas para esse elemento. Se o XmlReader objeto não estiver posicionado em um elemento, o Read método será chamado no XmlReader parâmetro até que um elemento seja encontrado (por exemplo, quando NodeType é Element). Neste ponto, o processo de inferência começa a partir desse elemento. Se nenhum elemento for encontrado até o final do documento, um ArgumentException será gerado.

  • Se um XmlSchemaSet objeto for passado como um parâmetro e o elemento no qual o XmlReader objeto está posicionado for definido em um dos esquemas no XmlSchemaSetesquema inferido, o esquema inferido será usado para refinar um esquema existente no XmlSchemaSet parâmetro com o mesmo namespace de destino; caso contrário, um novo esquema será inferido para o namespace.

Aplica-se a