Partilhar via


Inferindo colunas

Depois que ADO.NET determinou a partir de um documento XML quais elementos inferir como tabelas para um DataSet, ele infere as colunas para essas tabelas. ADO.NET 2.0 introduziu um novo mecanismo de inferência de esquema que infere um tipo de dados fortemente tipado para cada elemento simpleType . Em versões anteriores, o tipo de dados de um elemento simpleType inferido era sempre xsd:string.

Migração e compatibilidade com versões anteriores

O método ReadXml usa um argumento do tipo InferSchema. Esse argumento permite especificar o comportamento de inferência compatível com versões anteriores. Os valores disponíveis para a enumeração InferSchema são mostrados na tabela a seguir.

InferSchema
Fornece compatibilidade com versões anteriores sempre inferindo um tipo simples como String.

InferTypedSchema
Infere um tipo de dados fortemente tipado. Lança uma exceção se usado com um DataTablearquivo .

IgnoreSchema
Ignora qualquer esquema embutido e lê dados no esquema existente DataSet .

Atributos

Conforme definido em Inferring Tables, um elemento com atributos será inferido como uma tabela. Os atributos desse elemento serão então inferidos como colunas para a tabela. A propriedade ColumnMapping das colunas será definida como MappingType.Attribute, para garantir que os nomes das colunas sejam gravados como atributos se o esquema for gravado novamente em XML. Os valores dos atributos são armazenados em uma linha na tabela. Por exemplo, considere o seguinte XML:

<DocumentElement>  
  <Element1 attr1="value1" attr2="value2"/>  
</DocumentElement>  

O processo de inferência produzirá uma tabela chamada Element1 com duas colunas, attr1 e attr2. A propriedade ColumnMapping de ambas as colunas será definida como MappingType.Attribute.

DataSet: DocumentElement

Tabela: Element1

ATTR1 ATTR2
valor1 valor2

Elementos sem atributos ou elementos filho

Se um elemento não tiver elementos ou atributos filho, ele será inferido como uma coluna. A propriedade ColumnMapping da coluna será definida como MappingType.Element. O texto para elementos filho é armazenado em uma linha na tabela. Por exemplo, considere o seguinte XML:

<DocumentElement>  
  <Element1>  
    <ChildElement1>Text1</ChildElement1>  
    <ChildElement2>Text2</ChildElement2>  
  </Element1>  
</DocumentElement>  

O processo de inferência produzirá uma tabela chamada Element1 com duas colunas, ChildElement1 e ChildElement2. A propriedade ColumnMapping de ambas as colunas será definida como MappingType.Element.

DataSet: DocumentElement

Tabela: Element1

ChildElement1 ChildElement2
Texto1 Texto2

Consulte também