XmlSchemaInference.InferSchema Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Deduz um esquema XSD (linguagem de definição de esquema XML) do documento XML especificado.
Sobrecargas
InferSchema(XmlReader) |
Deduz um esquema XSD (linguagem de definição de esquema XML) do documento XML contido no objeto XmlReader especificado. |
InferSchema(XmlReader, XmlSchemaSet) |
Deduz um esquema XSD (linguagem de definição de esquema XML) do documento XML contido no objeto XmlReader especificado e refina o esquema deduzido usando um esquema existente no objeto XmlSchemaSet especificado com o mesmo namespace de destino. |
InferSchema(XmlReader)
Deduz um esquema XSD (linguagem de definição de esquema XML) do documento XML contido no objeto XmlReader 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 objeto XmlReader que contém o documento XML do qual um esquema será deduzido.
Retornos
Um objeto XmlSchemaSet que contém os esquemas deduzidos.
Exceções
O documento XML não está bem formado.
O objeto XmlReader não está posicionado no nó raiz nem em um elemento. Ocorrerá 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 = 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
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 da 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:schemaLocation
ouxsi: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)
Deduz um esquema XSD (linguagem de definição de esquema XML) do documento XML contido no objeto XmlReader especificado e refina o esquema deduzido usando um esquema existente no objeto XmlSchemaSet 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 objeto XmlReader que contém o documento XML do qual um esquema será deduzido.
- schemas
- XmlSchemaSet
Um objeto XmlSchemaSet que contém um esquema existente usado para refinar o esquema deduzido.
Retornos
Um objeto XmlSchemaSet que contém os esquemas deduzidos.
Exceções
O documento XML não está bem formado.
O objeto XmlReader não está posicionado no nó raiz nem em um elemento. Ocorrerá um erro durante o processo de inferência de esquema.
Exemplos
O código de exemplo a seguir usa o documento XML 1 como uma 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 reader
e 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 = 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
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 da 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:schemaLocation
ouxsi: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 é passado como um parâmetro e o elemento no qual o XmlReader objeto está posicionado é definido em um dos esquemas no XmlSchemaSet, o esquema inferido é usado para refinar um esquema existente no XmlSchemaSet parâmetro com o mesmo namespace de destino; caso contrário, um novo esquema é inferido para o namespace.