Colaboraciones en el Guille

Funcionalidad XML de SQL Server

[Acceso a SQL Server mediante una URL]

 
Fecha: 04/Dic/2005 (04-12-05)
Autor: Percy Reyes Paredes - smartcode.net@hotmail.com

          percy's blog               percy's artículos Microsoft .NET Y SQL Server


Introducción a XML

Pues eso, empezaremos a explicar este artículo entendiendo la funcionalidad de esta tecnología que promete revolucionar, especialmente, la forma en que se representan los datos de orígenes de filas en una base de datos.

XML es un lenguaje de programación de hipertextos que se puede utilizar para describir el contenido de un conjunto de datos y cómo se deben presentar esos datos a un dispositivo o en una página Web. Los lenguajes de marcado se originaron como medio para que los publicadores indicaran a las impresoras cómo se debía organizar el contenido de un periódico, una revista o un libro. Los lenguajes de marcado para datos electrónicos desempeñan la misma función para documentos electrónicos que se pueden mostrar en diferentes tipos de equipos electrónicos.

De esta manera, el estándar de datos XML y las extensiones XML permitirán una gran variedad de nuevos usos, desde luego, todos basados en una representación estándar para el transporte de datos estructurados por todo el world wide Web, posiblemente dejando al margen las páginas HTML. Y como dicen por allí: "el XML supondrá una revolución porque va a permitir la comunicación entre las máquinas".

y ¿ Qué es de HTML ?

El HTML no indica lo que está representando, se preocupa principalmente de que eso tiene que ir con un tamaño de 2 y color verde,  poner cursiva, negrita, pero no te dice que lo que está mostrando es el nombre de un empleado o el stock de un producto. El XML hace precisamente esto: describe el contenido de lo que etiqueta .

XML y HTML (Lenguaje de marcado de hipertexto) se derivan de SGML (Lenguaje de marcado generalizado estándar). SGML es un lenguaje muy extenso y complejo que es difícil de utilizar totalmente para publicar datos en el Web. HTML es un lenguaje de marcado más sencillo y especializado que SGML, pero tiene una serie de limitaciones a la hora de trabajar con datos en el Web. XML es más reducido que SGML y más sólido que HTML, por lo que está adquiriendo gran importancia en el intercambio de datos electrónicos a través del Web o de intranets corporativas. De aquì que siempre se escucha decir: "El XML más que un HTML++ hay que considerarlo como un SGML-- optimizado para su utilización en Internet.

XML y, "el fulano" de Microsoft, .NET Framework

Algo que vale la pena mencionar, aunque no forma parte del .NET Framework, son el grupo de clases administradas definidas como extensiones XML para SQL Server. Un conocimiento global de la funcionalidad XML en SQL Server significa tratar el acceso a esa funcionalidad mediante T-SQL, los esquemas y plantillas XML, y el protocolo de transferencia de hipertexto (HTTP). Todo esto es muy importante porque XML promete revolucionar el modo en que las bases de datos y los programadores web implementan el acceso y la manipulación de datos en sus soluciones.

Cuando instalas el SQL Server 2000, se instala también una consola para configurar la compatibilidad SQLXML en IIS(versión 1.0), pues bien, es esta consola, la que nos permitirá configurar adecuadamente las opciones para aprovechar la funcionalidad XML. Yo estoy trabajando con la version 3.0, sólo tienes que descargarlo del site de Microsoft (SQLXML 3.0), la cual también instalará las DLLs necesarias para aprovechar las bondades de XML desde Visual Studio .NET, es decir, expone de manera explícita el modelo de objetos de SQLXML a este señor "el fulano" Framework .net de Microsoft. Usando estas clases administradas los programadores de Visual Basic .net y Visual C# .net pueden aplicar DiffGrams como alternativa a Updategram en tareas de manipulación de datos.

Para aprender la funcionalidad XML se requiere saber las características XML disponibles en las distintas versiones de Microsoft SQL Server: versión web 1.0, versión web release 2.0, y la "versión" Web Services ToolKit. El Web Services ToolKit se basa en SqlXML 3.0 e incluye el paquete de instalación. Por otra parte, Microsoft cuenta que las características introducidas en SQLXML 1.0 y SQLXML 2.0 se incluyen en el paquete de instalación de SQLXML 3.0. Pues  bien, existen otras versiones recientes de estas clases administradas, sin embargo, para la versión SQL Server 2005, estas clases ya vienen integradas, y desde luego son super interesantes, es así que no nos molestaremos en estar descargándolo del site de Microsoft. Este artículo, se basaré en la versión SQLXML 3.0 Service Pack 3.

Nuestra majestad, XML

Para entender mejor esta tecnología, le recomiendo se familiarice con las convenciones XML que se encuentran en el site del W3C (http://www.w3c.org/XML). Cuando avance en el estudio de esta tecnología, se verá en la necesidad de comprender otras tecnologías basadas en XML, como por ejemplo, Schema XML, XSL, XPath y XSLT. Pues bien, para avanzar, doy por hecho que usted conoce la estructura de un documento XML, y si no es así le recomiendo antes de seguir, se sirva de otras fuentes para afianzar esto, ya que no me afanaré, por esta vez, en ser yo, quien le explique toda la manera de crear un documento XML y toda su estructura. Recuerde, el objetivo de este artículo va más allá de esto: Aprovechar la funcionalidad de XML en SQL Server. Continuemos entonces...

Como sabéis, todo documento tiene un esquema o armazón en la que se sienta. Por ejemplo, este sería un documento XML

documento xml

y esto sería su esquema...

esquema

Lo anterior no esperes que te explique a detalle, pues tan sólo mostré el ejemplo para que te hagas la idea. Ya te dije, sino sabéis XML... es mejor que no sigas leyendo este artículo. De ahora en adelante me centraré en los objetivos de este artículo, es decir la funcionalidad XML en SQL, y dale con lo mismo.... je, je, je...

Características de la funcionalidad XML en SQL Server 

En resumen, estas son las características principales:

  1. Posibilidad de acceder a SQL Server vía HTTP.
  2. Soporte para esquemas XRD(XML-Data Reduced).
  3. Recuperación y escritura de datos XML, usando la cláusula FOR XML de la sentencia SELECT de T-SQL.
  4. Uso de Updategram, los cuales permiten la manipulación de datos basada en transacciones utilizando XML.
  5. XML Bulk load dirigido a trasladar cantidades enormes de datos basados en XML a SQL Server.
  6. Posibilidad de definir mediante un parámetro el retorno de datos binarios desde un origen de datos SQL Server.
  7. Funcionalidad totalmente adaptada al estándar XSD, es decir, en conformidad con la definición de esquema W3C conocido como XML Schema Definition(XSD).
  8. El formato del lado del cliente permite que se formatee el XML de los conjuntos de filas SQL Server en el servidor IIS en lugar de en el servidor de base de datos.

aléjate de lo "tradicional"

Todos estamos acostumbrados a realizar consultas en SQL Server de manera "tradicional", es decir, "levantas" el analizador de consultas, y escribes esto:

SELECT CustomerId, ContactName, CompanyName FROM CUSTOMERS WHERE Country='USA'

SELECT CustomerId, ContactName, CompanyName FROM CUSTOMERS WHERE Country='USA'

y con SQLXML puedes hacer cosas más interesantes. Que te parece si escribes esto en la barra de direcciones:

consulta for xml

Bueno, no te asustes ...! a continuación detallaré algunas cosillas al respecto que te facilitarán el aprendizaje de cómo aprovechar XML en SQL. Para acceder a SQL mediante una consulta mediante una URL, es necesario que previamente tengas configurado el IIS de la manera correcta. Pues bien, a continuación te enseñaré a configurarlo en este artículo, y luego regresa a terminar de leerte este artículo.

Acceso a SQL Server mediante una URL

Empecemos a descifrar esta consulta:

        http://localhost/VirtualNorthwind?sql=select+*+from+customers+for+xml+auto+&root=Root

En primer lugar, cada palabra de la consulta debe estar separada por un signo "+", aunque podría haber dejado un espacio, es aconsejable hacerlo con un signo "mas". Si usted deja un espacio, verá que al momento de realizarse la acción de consulta estos espacios se convierten en un "%20". Sigamos... VirtualNorthwind es el nombre del directorio virtual  que se configuró previamente en este artículo, luego se escribe un "?" antes del sql que especifica que es una consulta SQL seguido de un signo igual (=). La cláusula FOR XML es la parte clave de esta consulta, de esta manera se dice al servidor que debe devolvernos los registros en formato XML. La palabra "auto"  hace referencia a un modo para la cláusula FOR XML. Finalmente &root=Root, establece la parte o elemento raíz que encapsulará el resultado XML. En este caso, se dice que la raíz será "Root", aunque pudo haberse cambiado "Root" por cualquier otro nombre. Esos son los resultados parciales.

http://localhost/VirtualNorthwind?sql=select+*+from+customers+for+xml+auto+&root=Root

Esta vez haremos una consulta de campos específicos:

http://localhost/VirtualNorthwind?sql=select+country,+contactname+from+customers+group+by+country,+contactname+order+by+country+ for+xml+nested+&root=root

http://localhost/VirtualNorthwind?sql=select+country,+contactname+from+customers+group+by+country,+contactname+order+by+country+ for+xml+nested+&root=root

Lo nuevo en la consulta anterior es el modo Nested, pues este se usa cuando hacemos uso de cláusula Group by.

Los resultados devueltos por las consultas anteriores se basan en atributos. Para hacer que los resultados sean devuelvos en elementos haremos uso de "elements". Así, de esta manera:

http://localhost/VirtualNorthwind?sql=select+ContactName,+CompanyName+from+Customers+for+xml+auto,+elements&root=rootCustomer

Aquí están los resultados parciales....

http://localhost/VirtualNorthwind?sql=select+ContactName,+CompanyName+from+Customers+for+xml+auto,+elements&root=rootCustomer

 

A contiuación intentaremos trabajar con la tabla categorias que contiene un campo binario, que viene a ser la foto de la categoria.

http://localhost/VirtualNorthwind?sql=select+*+from+Categories++for+xml+auto,+elements&root=RaizCategorias

nuevamente aquí están los resultados parciales en XML.

http://localhost/VirtualNorthwind?sql=select+*+from+Categories++for+xml+auto,+elements&root=RaizCategorias

cuando efectuamos la consulta vemos que los resultados en lo que respecta al campo es devuelto dentro de un "dbobject", es decir, dentro de un objeto de base de datos. Para visualizar la foto en el explorador, debemos hacer una consulta de la siguiente manera. Primero debe usted crear un nombre virtual ayudándose de la utilidad de administración de directorios virtuales. En la imagen puede usted apreciar que hemos creado un nombre virtual  llamado Picture, para direccionar la imagen que deseemos mostrar.

Creación de un objetoPicture

Pues bien, una vez hecho esto, pasemos a consultar una imagen a la base de datos de la siguiente manera:

                                http://localhost/VirtualNorthwind/Picture/Categories[@CategoryId='8']/@picture

http://localhost/VirtualNorthwind/Picture/Categories[@CategoryId='8']/@picture

Una manera más "dificil" de realizar una consulta de este tipo es la siguiente:

                            http://localhost/VirtualNorthwind/Picture/Categories[@CategoryId=$id]/@picture?id=7

http://localhost/VirtualNorthwind/Picture/Categories[@CategoryId=$id]/@picture?id=7

Existen otras maneras de  aprovechar este tipo de funcionalidad, tampoco espere que le explique todo un libro de estas cosillas, porque si fuere así no habría que dormir, y pues yo ya tengo algo de sueño. Bueno, en otros artículos detallaré acerca de otros tipos de consultas que pueden realizarse ya sea mediante plantillas, esquemas, consultas XPath, o como también direccionar procedimientos almacenados mediante una URL... y mucho más. Descanse en paz y vaya con Dios. Nos vemos....

Espero le haya sido útil este pequeño aporte.

Percy Reyes Paredes
Microsoft Certified Professional

Saludos desde Trujillo - Perú

Por favor, califica este artículo en PanoramaBox, así me animarás a continuar colaborando contigo.


ir al índice principal del Guille