Chargement des informations de schéma de DataSet à partir de XMLLoading DataSet Schema Information from XML

Le schéma d’un DataSet (ses tables, colonnes, relations et contraintes) peut être défini par programme, créé par les méthodes Fill ou FillSchema d’un DataAdapterou chargé à partir d’un document XML.The schema of a DataSet (its tables, columns, relations, and constraints) can be defined programmatically, created by the Fill or FillSchema methods of a DataAdapter, or loaded from an XML document. Pour charger les informations de schéma d’un DataSet à partir d’un document XML, vous pouvez utiliser la méthode ReadXmlSchema ou InferXmlSchema du DataSet.To load DataSet schema information from an XML document, you can use either the ReadXmlSchema or the InferXmlSchema method of the DataSet. ReadXmlSchema vous permet de charger ou de déduire des informations de schéma de DataSet à partir du document contenant le schéma en langage XSD (XML Schema Definition) ou d’un document XML avec un schéma XML inline.ReadXmlSchema allows you to load or infer DataSet schema information from the document containing XML Schema definition language (XSD) schema, or an XML document with inline XML Schema. InferXmlSchema vous permet de déduire le schéma à partir du document XML tout en ignorant certains espaces de noms XML que vous spécifiez.InferXmlSchema allows you to infer the schema from the XML document while ignoring certain XML namespaces that you specify.

Notes

L’ordre des tables dans un DataSet peut ne pas être préservé quand vous utilisez des services Web ou la sérialisation XML pour transférer un DataSet qui a été créé en mémoire à l’aide de constructions XSD (telles que les relations imbriquées).Table ordering in a DataSet might not be preserved when you use Web services or XML serialization to transfer a DataSet that was created in-memory by using XSD constructs (such as nested relations). Par conséquent, le destinataire du DataSet ne doit pas dépendre de l’ordre des tables dans ce cas.Therefore, the recipient of the DataSet should not depend on table ordering in this case. Toutefois, l’ordre des tables est toujours préservé si le schéma du jeu de données transféré a été lu à partir de fichiers XSD, au lieu d’être créé en mémoire.However, table ordering is always preserved if the schema of the DataSet being transferred was read from XSD files, instead of being created in-memory.

ReadXmlSchemaReadXmlSchema

Pour charger le schéma d’un DataSet à partir d’un document XML sans charger de données, vous pouvez utiliser la méthode ReadXmlSchema du DataSet.To load the schema of a DataSet from an XML document without loading any data, you can use the ReadXmlSchema method of the DataSet. ReadXmlSchema crée un schéma de DataSet défini à l’aide du schéma en langage XSD (XML Schema Definition).ReadXmlSchema creates DataSet schema defined using XML Schema definition language (XSD) schema.

La méthode ReadXmlSchema accepte un seul argument d’un nom de fichier, un flux ou un XmlReader contenant le document XML à charger.The ReadXmlSchema method takes a single argument of a file name, a stream, or an XmlReader containing the XML document to be loaded. Le document XML peut contenir uniquement le schéma ou contenir le schéma inline avec des éléments XML contenant des données.The XML document can contain only schema, or can contain schema inline with XML elements containing data. Pour plus d’informations sur l’écriture d’un schéma Inline en tant que schéma XML, consultez dérivation de la structure relationnelle d’un DataSet à partir d’un schéma XML (XSD).For details about writing inline schema as XML Schema, see Deriving DataSet Relational Structure from XML Schema (XSD).

Si le document XML passé à ReadXmlSchema ne contient aucune information de schéma Inline, ReadXmlSchema déduira le schéma à partir des éléments du document XML.If the XML document passed to ReadXmlSchema contains no inline schema information, ReadXmlSchema will infer the schema from the elements in the XML document. Si le jeu de données contient déjà un schéma, le schéma actuel est étendu par l’ajout de nouvelles tables s’ils n’existent pas déjà.If the DataSet already contains a schema, the current schema will be extended by adding new tables if they do not already exist. De nouvelles colonnes ne seront pas ajoutées aux tables existantes.New columns will not be added to added to existing tables. Si une colonne ajoutée existe déjà dans le DataSet mais possède un type incompatible avec la colonne trouvée dans le XML, une exception est levée.If a column being added already exists in the DataSet but has an incompatible type with the column found in the XML, an exception is thrown. Pour plus d’informations sur la façon dont ReadXmlSchema déduit un schéma à partir d’un document XML, consultez déduction de la structure relationnelle d’un jeu de données à partir de XML.For details about how ReadXmlSchema infers a schema from an XML document, see Inferring DataSet Relational Structure from XML.

Bien que ReadXmlSchema charge ou déduit uniquement le schéma d’un DataSet, la méthode ReadXml du DataSet charge ou déduit le schéma et les données contenues dans le document XML.Although ReadXmlSchema loads or infers only the schema of a DataSet, the ReadXml method of the DataSet loads or infers both the schema and the data contained in the XML document. Pour plus d’informations, consultez chargement d’un DataSet à partir de XML.For more information, see Loading a DataSet from XML.

Les exemples de code suivants montrent comment charger un schéma de DataSet à partir d’un document ou d’un flux XML.The following code examples show how to load a DataSet schema from an XML document or stream. Le premier exemple montre un nom de fichier de schéma XML passé à la méthode ReadXmlSchema .The first example shows an XML Schema file name being passed to the ReadXmlSchema method. Le deuxième exemple montre un System. IO. StreamReader.The second example shows a System.IO.StreamReader.

Dim dataSet As DataSet = New DataSet  
dataSet.ReadXmlSchema("schema.xsd")  
DataSet dataSet = new DataSet();  
dataSet.ReadXmlSchema("schema.xsd");  
Dim xmlStream As System.IO.StreamReader = New System.IO.StreamReader ("schema.xsd");  
Dim dataSet As DataSet = New DataSet  
dataSet.ReadXmlSchema(xmlStream)  
xmlStream.Close()  
System.IO.StreamReader xmlStream = new System.IO.StreamReader("schema.xsd");  
DataSet dataSet = new DataSet();  
dataSet.ReadXmlSchema(xmlStream);  
xmlStream.Close();  

InferXmlSchemaInferXmlSchema

Vous pouvez également demander au DataSet de déduire son schéma à partir d’un document XML à l’aide de la méthode InferXmlSchema du DataSet.You can also instruct the DataSet to infer its schema from an XML document using the InferXmlSchema method of the DataSet. InferXmlSchema fonctionne de la même façon que ReadXml avec un XmlReadMode de InferSchema (charge des données et déduit le schéma), et ReadXmlSchema si le document en cours de lecture ne contient pas de schéma Inline.InferXmlSchema functions the same as do both ReadXml with an XmlReadMode of InferSchema (loads data as well as infers schema), and ReadXmlSchema if the document being read contains no inline schema. Toutefois, InferXmlSchema offre la possibilité supplémentaire de vous permettre de spécifier des espaces de noms XML particuliers à ignorer lorsque le schéma est déduit.However, InferXmlSchema provides the additional capability of allowing you to specify particular XML namespaces to be ignored when the schema is inferred. InferXmlSchema prend deux arguments requis : l’emplacement du document XML, spécifié par un nom de fichier, un flux ou un XmlReader; et un tableau de chaînes d’espaces de noms XML qui doivent être ignorés par l’opération.InferXmlSchema takes two required arguments: the location of the XML document, specified by a file name, a stream, or an XmlReader; and a string array of XML namespaces to be ignored by the operation.

Examinons, par exemple, le code XML suivant :For example, consider the following XML:

<NewDataSet xmlns:od="urn:schemas-microsoft-com:officedata">  
<Categories>  
  <CategoryID od:adotype="3">1</CategoryID>   
  <CategoryName od:maxLength="15" od:adotype="130">Beverages</CategoryName>   
  <Description od:adotype="203">Soft drinks and teas</Description>   
</Categories>  
<Products>  
  <ProductID od:adotype="20">1</ProductID>   
  <ReorderLevel od:adotype="3">10</ReorderLevel>   
  <Discontinued od:adotype="11">0</Discontinued>   
</Products>  
</NewDataSet>  

En raison des attributs spécifiés pour les éléments du document XML précédent, la méthode ReadXmlSchema et la méthode ReadXml avec un XmlReadMode de InferSchema créent des tables pour chaque élément de l’élément document Catégories, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevelet Discontinued.Because of the attributes specified for the elements in the preceding XML document, both the ReadXmlSchema method and the ReadXml method with an XmlReadMode of InferSchema would create tables for every element in the document: Categories, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevel, and Discontinued. (Pour plus d’informations, consultez déduction de la structure relationnelle d’un DataSet à partir de XML.) Toutefois, une structure plus appropriée consiste à créer uniquement les tables categories et Products , puis à créer les colonnes CategoryID, CategoryNameet Description dans la table categories , etLes colonnes ProductID, ReorderLevelet discontinues de la table Products .(For more information, see Inferring DataSet Relational Structure from XML.) However, a more appropriate structure would be to create only the Categories and Products tables, and then to create CategoryID, CategoryName, and Description columns in the Categories table, and ProductID, ReorderLevel, and Discontinued columns in the Products table. Pour vous assurer que le schéma inféré ignore les attributs spécifiés dans les éléments XML, utilisez la méthode InferXmlSchema et spécifiez que l’espace de noms XML de officedata doit être ignoré, comme illustré dans l’exemple suivant.To ensure that the inferred schema ignores the attributes specified in the XML elements, use the InferXmlSchema method and specify the XML namespace for officedata to be ignored, as shown in the following example.

Dim dataSet As DataSet = New DataSet  
dataSet.InferXmlSchema("input_od.xml", New String() {"urn:schemas-microsoft-com:officedata"})  
DataSet dataSet = new DataSet();  
dataSet.InferXmlSchema("input_od.xml", new string[] "urn:schemas-microsoft-com:officedata");  

Voir aussiSee also