Compartir a través de


Carga de información de esquema del conjunto de datos desde XML

El esquema de un DataSet (sus tablas, columnas, relaciones y restricciones) se puede definir mediante programación, ser creado por los métodos Fill o FillSchema de un DataAdapter, o cargado desde un documento XML. Para cargar DataSet información de esquema desde un documento XML, puede usar el ReadXmlSchema o el InferXmlSchema método de DataSet. ReadXmlSchema permite cargar o deducir DataSet información de esquema del documento que contiene el esquema del lenguaje de definición de esquemas XML (XSD) o un documento XML con esquema XML insertado. InferXmlSchema permite deducir el esquema del documento XML al omitir determinados espacios de nombres XML que especifique.

Nota:

Puede que no se conserve el orden de las tablas en una DataSet al usar servicios web o serialización XML para transferir un DataSet creado en memoria mediante constructos de XSD (como relaciones anidadas). Por lo tanto, el destinatario de DataSet no debe depender de la ordenación de tablas en este caso. Sin embargo, el orden de las tablas siempre se conserva si el esquema del DataSet que se transfiere se ha leído desde archivos XSD, en lugar de ser creado en memoria.

ReadXmlSchema

Para cargar el esquema de un DataSet desde un documento XML sin cargar datos, puede usar el ReadXmlSchema método de DataSet. ReadXmlSchema crea un esquema DataSet definido mediante el lenguaje de definición XML Schema (XSD).

El ReadXmlSchema método toma un único argumento de un nombre de archivo, una secuencia o un XmlReader objeto que contiene el documento XML que se va a cargar. El documento XML solo puede contener esquema o puede contener esquemas alineados con elementos XML que contienen datos. Para más información sobre cómo escribir un esquema alineado como esquema XML, consulte Derivación de una estructura relacional de un conjunto de datos a partir de un esquema XML (XSD).

Si el documento XML pasado a ReadXmlSchema no contiene información de esquema insertada, ReadXmlSchema deducirá el esquema de los elementos del documento XML. DataSet Si ya contiene un esquema, el esquema actual se extenderá agregando nuevas tablas si aún no existen. Las nuevas columnas no se agregarán a las tablas existentes. Si una columna que se está añadiendo ya existe en DataSet pero tiene un tipo incompatible con la columna que se encuentra en el XML, se produce una excepción. Para obtener más información sobre cómo ReadXmlSchema deduce un esquema de un documento XML, consulte Inferencia de la estructura relacional del DataSet a partir de XML.

Aunque ReadXmlSchema carga o deduce solo el esquema de un DataSet, el ReadXml método de DataSet carga o deduce tanto el esquema como los datos contenidos en el documento XML. Para obtener más información, consulte Carga de un conjunto de datos a partir de XML.

En los ejemplos de código siguientes se muestra cómo cargar un esquema desde un DataSet documento o secuencia XML. En el primer ejemplo se muestra un nombre de archivo de esquema XML que se pasa al ReadXmlSchema método . En el segundo ejemplo se muestra system.IO.StreamReader.

Dim dataSet As DataSet = New DataSet
dataSet.ReadXmlSchema("schema.xsd")
DataSet dataSet = new DataSet();
dataSet.ReadXmlSchema("schema.xsd");
Dim xmlStream As 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();

InferXmlSchema

También puede indicar a que DataSet infiera su esquema desde un documento XML mediante el InferXmlSchema método de DataSet. InferXmlSchema funciona de la misma manera que ReadXml con un XmlReadMode de InferSchema (carga los datos e infiere el esquema), ReadXmlSchema si el documento que se lee no contiene ningún esquema insertado. Sin embargo, InferXmlSchema proporciona la funcionalidad adicional de permitir especificar espacios de nombres XML concretos que se omitirán cuando se infiere el esquema. InferXmlSchema toma dos argumentos necesarios: la ubicación del documento XML, especificado por un nombre de archivo, una secuencia o xmlReader; y una matriz de cadenas de espacios de nombres XML que la operación omitirá.

Por ejemplo, considere el siguiente 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>

Debido a los atributos especificados para los elementos del documento XML anterior, tanto el ReadXmlSchema método como el ReadXml método con un XmlReadMode de InferSchema crearían tablas para cada elemento del documento: Categories, CategoryID, CategoryName, Description, Products, ProductID, ReorderLevel y Discontinued. (Para obtener más información, vea Inferring DataSet Relational Structure from XML).) Sin embargo, una estructura más adecuada sería crear solo las Categories tablas y Products y, a continuación, crear CategoryID, CategoryName y Description columnas en la Categories tabla, y ProductID, ReorderLevel y Discontinued columnas de la Products tabla. Para asegurarse de que el esquema inferido omite los atributos especificados en los elementos XML, use el InferXmlSchema método y especifique el espacio de nombres XML para officedata que se omita, como se muestra en el ejemplo siguiente.

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");

Consulte también