1. n DataSet de ADO.NET es una vista, una vista relacional de datos que puede representarse
en XML. En Visual Studio y .NET Framework, XML es el formato para almacenar y trasmitir
datos de todos tipos. La relación entre DataSet y XML le permite aprovechar las siguientes
funciones del DataSet:
La estructura de un DataSet, sus tablas, columnas, relaciones y limitaciones
pueden definirse en un esquema XML. Los esquemas XML son un formato basado en
estándares del W3C para definir la estructura de datos XML. Los DataSets pueden
usar los métodos ReadXmlSchema y WriteXmlSchema para leer y escribir
esquemas que almacenan información estructurada. Si no hay un esquema
disponible, el DataSet puede inferir uno (a través de su
método InferXmlSchema) de los datos en un documento XML que está
estructurado de manera relacional.
Puede generar una clase DataSet que incorpore información de esquemas para
definir sus estructuras de datos (como tablas y columnas) como miembros de
clases.
Puede leer un documento o flujo XML en un DataSet que use el método DataSet's
ReadXml y puede escribir un DataSet de un XML utilizando el método DataSet's
WriteXml. Debido a que XML es un formato estándar de intercambio para datos
entre distintas aplicaciones, esto significa que puede cargar un DataSet con
información formateada en XML enviada por otras aplicaciones. De manera similar,
un DataSet puede escribir sus datos como un flujo o documento XML, para ser
compartido con otras aplicaciones o simplemente almacenado en formato estándar.
Puede crear una vista XML (un objeto XmlDataDocument) de los contenidos de
un DataSet y luego ver y manipular los datos utilizando métodos relacionales (a
través de DataSet) o métodos XML. Las dos vistas se sincronizan automáticamente
a medida que van cambiando.
La clase XmlDataDocument le permite cargar datos relacionales o datos XML y
manipularlos utilizando el DOM de W3C.
XmlDataDocument tiene una afiliación cercana con la clase DataSet, la cual proporciona
una vista relacional de los datos XML cargados. Cualquier cambio hecho
a XmlDataDocument se refleja en el DataSet, y viceversa.
Para cargar datos relacionales, especifique el DataSet que contiene los datos relacionales
como el parámetro en el constructor XmlDataDocument.
Con ADO.NET es posible llenar un DataSet a partir de una secuencia o un documento XML. Se
puede utilizar la secuencia o el documento XML para suministrar datos al DataSet, información de
esquema o ambas cosas. La información suministrada desde la secuencia o el documento XML
puede combinarse con datos o información de esquema existente ya presente en el DataSet.
ADO.NET también permite crear una representación XML de un DataSet, con o sin su esquema,
para transportar el DataSet a través de HTTP con el fin de que lo utilice otra aplicación u otra
plataforma compatible con XML. En una representación XML de un DataSet, los datos se escriben
en XML y el esquema, si está incluido en línea en la representación, se escribe utilizando el lenguaje
de definición de esquemas XML (XSD). XML y el esquema XML proporcionan un formato cómodo
para transferir el contenido de un DataSet a y desde clientes remotos.
2. n ADO.NET es posible escribir una representación XML de un DataSet, con o sin su esquema. Si la
información de esquema está incluida en línea con el código XML, se escribirá con el lenguaje de
definición de esquemas XML (XSD). El esquema contiene las definiciones de tabla del DataSet, así
como las definiciones de relaciones y restricciones.
Cuando un DataSet se escribe como datos XML, las filas del DataSet se escriben en sus versiones
actuales. Sin embargo, el DataSet también se puede escribir como un DiffGram, de forma que se
incluyan los valores actuales y originales de las filas.
La representación XML del DataSet se puede escribir en un archivo, una secuencia, un XmlWriter o
una cadena. Estas opciones ofrecen una gran flexibilidad en cuanto a la forma de transportar la
representación XML del DataSet. Para obtener la representación XML del DataSet como una
cadena, utilice el métodoGetXml, como se muestra en el ejemplo siguiente.
C#
VB
string xmlDS = custDS.GetXml();
GetXml devuelve la representación XML del DataSet sin información del esquema. Para escribir la
información de esquema del DataSet (como esquema XML) en una cadena, utilice GetXmlSchema.
Para escribir un DataSet en un archivo, una secuencia o XmlWriter, utilice el método WriteXml. El
primer parámetro que se pasa a WriteXml es el destino del resultado XML. Por ejemplo, pasar una
cadena que contiene un nombre de archivo, un objeto System.IO.TextWriter, etc. Puede pasar un
segundo parámetro opcional de un XmlWriteMode para especificar cómo se va a escribir el
resultado XML.
En la siguiente tabla se muestran las opciones de XmlWriteMode.
Al escribir una representación XML de un DataSet que contiene objetos DataRelation, lo más
probable es que desee que el código XML resultante tenga las filas secundarias de cada relación
anidadas dentro de sus elementos primarios relacionados. Para ellos establezca la
propiedad Nested de la DataRelation en truecuando agregue la DataRelation al DataSet. Para
obtener más información, vea DataRelations anidadas.
XML significa "eXtensible Markup Language" (lenguaje de marcas extensible), mientras que
XSD significa "XML Schema definition" (definición de esquemas XML). Los documentos XML
transfieren datos hacia y desde servicios web. XSD define la estructura y el tipo de datos de
los elementos de un documento XML. Utiliza XSD para validar el contenido de un documento
XML. Es posible que tengas que modificar el XSD generado automáticamente para cumplir
con los requerimientos de un negocio.
Como el XSD generado automáticamente y modificado representa el documento XML, valida
el archivo (por ejemplo, empleados_lista.xml) con respecto al archivo XSD (por ejemplo,
3. empleados_lista.xsd) utilizando un validador en línea desde w3.org. Antes de hacerlo,
transfiere los archivos XML y XSD a un servidor. Luego, en el cuadro de texto "Address"
(Dirección) en el validador en línea, ingresa la dirección URL del nombre del archivo XML,
luego la dirección URL del nombre del archivo XSD con un espacio entre los nombres.
Presiona la opción "Get Results" (Obtener resultados). Si aparecen mensajes de error,
entonces modifica el contenido del archivo XSD y pruébalo. Hazlo varias veces hasta que no
aparezca ningún error.
XML dispone de su propio sistema de definición: XSD (XML Schema Definition). Con XSD puede
definirse un lenguaje XML con un nivel de detalle mucho mayor del que permite DTD, por
ejemplo, XSD permite especificar el tipo de dato que contendrá cada elemento o atributo, como
fechas, enteros o incluso expresiones regulares.
El sistema XSD está inspirado en los lenguajes de programación orientados a objetos. Una XSD
es una instancia del esquema XMLSchema, además los XML finales basados en el XSD se
consideran instancias del XSD. Para implementar la instanciación de documentos, se introduce el
concepto de espacio de nombres (namespace):
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="urn:test:biblioteca"
...>
Esta declaración en el XSD indica que el XSD en sí es una instancia de XMLSchema (y se indica
la URL donde encontrarlo). La declaración indica también que el XSD crea un nuevo lenguaje en
el espacio de nombres indicado por targetNamespace, y en este caso se indica con un URN. Los
documentos finales, basados en este XSD deberán declarar que usan este espacio de nombres
con
<?xml version="1.0" encoding="UTF-8"?>
<biblioteca xmlns="urn:test:biblioteca">
...
</biblioteca>
e observa que el XSD es más complejo que la DTD, pero a cambio permite definir el nuevo
lenguaje XML a un nivel de detalle muy superior que la DTD. Además, el XSD está escrito en
XML, por lo que los procesadores y validadores del propio XSD pueden reutilizar código y
beneficiarse de la sencillez de procesado de XML.
Notas:
La declaración xmlns=“urn:test:biblioteca” indica que usaremos los nombres definidos
en el XSD.
Al definir un elemento, si no se especifican minOccurs o maxOccurs, se considera que
estas valen “1”. El valor maxOccurs=“unbounded” indica que no hay límite superior.
Al definir un atributo, use=“required” indica que dicho atributo es obligatorio, por
defecto se asume que un atributo es opcional, aunque también se puede indicar con
use=“optional”.
Las definiciones de tipo se pueden extraer, como se ha hecho con el tipo “idType”, que
define un tipo para todos los id. Procediendo así, se puede reutilizar dicha definición de
tipo para varios elementos.
4. Introducción general
El propósito del estándar XML Schema es definir la estructura de los
documentos XML que estén asignados a tal esquema y los tipos de datos válidos
para cada elemento y atributo. En este sentido lasposibilidades de control sobre la
estructura y los tipos de datos son muy amplias.
Al restringir el contenido de los ficheros XML es
posible intercambiar información entre aplicaciones con gran seguridad.
Disminuye el trabajo de comprobar la estructura de los ficheros y el tipo de los
datos.
XML Schema tiene un enfoque modular que recuerda a la programación
orientada a objetos y que facilita la reutilización de código.
Los tipos de datos tienen en XML Schema la función de las clases en la POO. El
usuario puede construir tipos de datos a partir de tipos predefinidos, agrupando
elementos y atributos de una determinada forma y con mecanismos de extensión
parecidos a la herencia. Los tipos de datos se clasifican en función de los
elementos y atributos que contienen.
Los tipos de datos en XML Schema pueden ser simples o complejos:
1. Definiciones de tipos simples.
2. Definiciones de tipos complejos.
XML Schema incluye el uso de namespaces. Los "espacios de nombres"
permiten definir elementos con igual nombre dentro del mismo contexto, siempre
y cuando se anteponga un prefijo al nombre del elemento. El uso
de namespaces también evita confusiones en la reutilización de código.
Es posible agrupar atributos, haciendo más comprensible el uso de un grupo de
aspectos de varios elementos distintos, pero con denominador común, que deben
ir juntos en cada uno de estos elementos.
Los ficheros XML Schema se escriben en el propio lenguaje XML.
Tipos simples
Tipos simples son aquellos que no tienen ni elementos hijos ni atributos.
Son tipos simples:
5. Tipos predefinidos de XML: string, double, boolean, etc.
List (lista de datos separados por espacios).
Union (tipo de dato derivado de la unión de tipos predefinidos).
Tipos complejos
Son tipos complejos aquellos que tienen elementos hijos y/o atributos.
Pueden tener nombre o ser anónimos. Si tienen nombre pueden
ser reutilizados dentro del mismo XML Schema o por otros XML Schemas.
Es posible "mezclar" o combinar elementos y texto.