Déduction des colonnes

Après avoir déterminé les éléments à déduire en tant que tables pour un objet DataSet à partir d'un document XML, ADO.NET déduit les colonnes pour ces tables. ADO.NET 2.0 a introduit un nouveau moteur d’inférence de schéma qui déduit un type de données fortement typées pour chaque élément simpleType. Dans les versions précédentes, le type de données d’un élément simpleType déduit était toujours xsd:string.

Migration et compatibilité ascendante

La méthode ReadXml prend un argument de type InferSchema. Cet argument vous permet de spécifier un comportement d’inférence compatible avec les versions précédentes. Les valeurs disponibles pour l’énumération InferSchema sont indiquées dans le tableau suivant.

InferSchema
Assure la compatibilité ascendante en déduisant toujours un type simple comme l'objet String.

InferTypedSchema
Déduit un type de données fortement typées. Lève une exception s'il est utilisé avec un objet DataTable.

IgnoreSchema
Ignore tout schéma inline et lit les données dans le schéma DataSet existant.

Attributs

Comme défini dans Déduction de tables, un élément doté d’attributs est déduit sous forme de table. Les attributs de cet élément seront ensuite déduits en tant que colonnes de cette table. La propriété ColumnMapping des colonnes est définie sur MappingType.Attribute afin que les noms des colonnes soient écrits en tant qu’attributs si le schéma est réécrit en XML. Les valeurs des attributs sont stockées dans une ligne de la table. Examinons, par exemple, le code XML suivant :

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

Le processus d’inférence génère une table nommée Element1 avec deux colonnes, attr1 et attr2. La propriété ColumnMapping des deux colonnes est définie sur MappingType.Attribute.

DataSet : DocumentElement

Table : Element1

attr1 attr2
valeur1 valeur2

Éléments dépourvus d'attributs ou d'éléments enfants

Si un élément ne comporte ni éléments enfants, ni attributs, il sera déduit en tant que colonne. La propriété ColumnMapping de la colonne est définie sur MappingType.Element. Le texte des éléments enfants est stocké dans une ligne de la table. Examinons, par exemple, le code XML suivant :

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

Le processus d’inférence produit une table nommée Element1 avec deux colonnes, ChildElement1 et ChildElement2. La propriété ColumnMapping des deux colonnes est définie sur MappingType.Element.

DataSet : DocumentElement

Table : Element1

ChildElement1 ChildElement2
Text1 Text2

Voir aussi