XQuery y bases de datos XML

www.altova.com Imprimir este apartado Página anterior Subir un nivel Página siguiente

Inicio >  Guía y referencia del usuario > XQuery >

XQuery y bases de datos XML

Puede usar un documento XQuery para consultar una base de datos XML (BD XML). De momento, esta función de XQuery sólo es compatible con las bases de datos DB2 de IBM. El mecanismo para consultar una BD XML con un documento XQuery consiste en: (i) indicar al motor XQuery que debe consultar datos XML en una base de datos (en lugar de datos XML en un documento XML) y (ii) acceder a los datos XML de la base de datos.

 

Estos son los pasos necesarios para implementar este mecanismo:

 

1.Configurar el documento XQuery para consultar la BD XML, insertando la palabra clave XQUERY al principio del documento.
2.Habilitar la compatibilidad con BD (en la ventana Información) para el documento activo y conectarse a la BD (desde el cuadro de diálogo "Conexión rápida").
3.Insertar extensiones de XQuery propias de BD para poder acceder a los datos de la BD y ponerlos a disposición de las operaciones de XQuery.
4.Ejecutar el documento XQuery en XMLSpy.

 

Configurar el documento XQuery a fin de consultar la BD XML

Para configurar el documento XQuery a fin de consultar la BD XML, abra el documento XQuery (o cree un documento XQuery nuevo) y escriba la palabra clave XQUERY (en mayúsculas o minúsculas, da igual) al principio del documento (antes del prólogo) como en los ejemplos que aparecen a continuación.

 

XQUERY (: Recuperar detalles de todos los clientes :)

declare default element namespace "http://www.altova.com/xquery/databases/db2";

<a> {db2-fn:xmlcolumn("CUSTOMER.INFO")} </a>

 

Es necesario insertar la palabra clave XQUERY aunque el documento use la expresión opcional xquery version:

 

XQUERY xquery version "1.0"; (: Recuperar detalles de todos los clientes :)

declare default element namespace "http://http://www.altova.com/xquery/databases/db2";

<a> {db2-fn:xmlcolumn("CUSTOMER.INFO")} </a>

 

Nota:los motores XQuery integrados de XMLSpy leen la palabra clave XQUERY y entienden que es necesario acceder a una BD XML. Por tanto, se producirá un error si intenta ejecutar un documento XQuery que contenga la palabra clave XQUERY en un documento XML que no esté en una BD XML.

 

Habilitar la compatibilidad con BD y conectarse a la BD

Para habilitar la compatibilidad del documento XQuery con bases de datos, marque la casilla Habilitar compatibilidad con bases de datos de la ventana Información (ver imagen siguiente). Tenga en cuenta que es necesario habilitar esta opción en cada documento XQuery y cada vez que abra el documento XQuery.

XQEnableDBSupport

Al marcar la casilla Habilitar compatibilidad con bases de datos, aparece un cuadro de diálogo de conexión rápida a bases de datos. De momento, esta función es compatible sólo con bases de datos DB2 de IBM. Para más información sobre cómo conectarse a una base de datos, consulte la sección Conectarse a un origen de datos. Si ya existen conexiones a orígenes de datos, estas aparecen en el cuadro combinado Origen de datos de la ventana Información (imagen siguiente) y puede seleccionar uno de estos orígenes de datos como origen de datos para el documento XQuery activo. En la ventana Información también puede seleccionar el objeto raíz en el cuadro combinado Objeto raíz.

XQDataSourceComboBox

Para acceder al cuadro de diálogo de conexión rápida a bases de datos (que le permite conectarse a una BD) basta con hacer clic en el icono XQicQuickConnect de la ventana Información.

Nota:cuando se cierra un documento XQuery también se cierra la conexión con la BD. Cuando vuelva a abrir el documento XQuery, también deberá volver a conectarse a la BD.

 

Extensiones del lenguaje XQuery propias de DB2 IBM

Hay dos funciones propias de DB2 IMB que se pueden usar en documentos XQuery para recuperar datos desde una base de datos DB2 de IBM:

 

db2-fn:xmlcolumn recupera una columna XML entera sin realizar búsquedas ni aplicar filtros a la columna.
db2-fn:sqlquery recupera valores de acuerdo con una instrucción SQL SELECT

 

Los datos XML que se recuperen usando estas funciones se pueden manipular con construcciones XQuery estándar (ver los ejemplos que aparecen a continuación).

 

db2-fn:xmlcolumn: el argumento de la función es un literal de cadena (que distingue entre mayúsculas y minúsculas) que identifica una columna XML en una tabla. El argumento del literal de cadena debe ser un nombre completo de columna de tipo XML. La función devuelve todos los datos XML de la columna en forma de secuencia, sin aplicarle una condición de búsqueda. En el ejemplo que sigue, todos los datos de la columna XML INFO de la tabla CUSTOMER se devuelven dentro de un elemento de nivel superior <newdocelement>:

 

XQUERY (: Recuperar detalles de todos los clientes :)

declare default element namespace "http://www.altova.com/xquery/databases/db2";

<newdocelement> {db2-fn:xmlcolumn("CUSTOMER.INFO")} </newdocelement>

 

Después se puede realizar una consulta en los datos recuperados usando construcciones XQuery. En el ejemplo que sigue los datos XML recuperados de la columna XML INFO de la tabla CUSTOMER se filtran usando una construcción XQuery a fin de recuperar sólo los perfiles de los clientes de Toronto.

 

XQUERY (: Recuperar detalles de los clientes de Toronto :)

declare default element namespace "http://www.altova.com/xquery/databases/db2";

<newdocelement> {db2-fn:xmlcolumn("CUSTOMER.INFO")/customerinfo[addr/city='Toronto']</newdocelement>

 

Nota:en el ejemplo anterior el elemento de documento de los archivos XML en cada celda es customerinfo y el nodo raíz de la secuencia XML devuelta por db2-fn:xmlcolumn se considera nodo abstracto sobre los nodos customerinfo.

 

db2-fn:sqlquery: la función toma como argumento una instrucción SQL SELECT y devuelve una secuencia de valores XML. Después se puede realizar una consulta en la secuencia recuperada usando construcciones XQuery. En el ejemplo que sigue la columna INFO se filtra para recuperar los registros de la tabla CUSTOMER que tengan un campo CID cuyo valor esté entre 1000 y 1004. Tenga en cuenta que SQL no distingue entre mayúsculas y minúsculas, pero XQuery sí lo hace.

 

XQUERY (: Recuperar detalles de clientes según su Id de cliente:)

declare default element namespace "http://www.altova.com/xquery/databases/db2";

 

<persons>

   {db2-fn:sqlquery("SELECT info FROM customer WHERE CID>1000 AND CID<1004")/

   <person>

      <id>{data(@Cid)}</id>

      <name>{data(name)}</name>

   </person>}

</persons>

 

El documento XQuery anterior devuelve este resultado:

 

<persons xmlns="http://www.altova.com/xquery/databases/db2">

   <person>

 <id>1001</id>

 <name>Kathy Smith</name>

   </person>

   <person>

 <id>1002</id>

 <name>Jim Jones</name>

   </person>

   <person>

 <id>1003</id>

 <name>Robert Shoemaker</name>

   </person>

</persons>

 

Tenga en cuenta estos aspectos:

 

La declaración default element namespace del prólogo afecta a todo el documento XQuery y se utiliza tanto para navegar por el documento XML como para construir elementos nuevos. Esto significa que el selector XQuery name se expande a <default-element-namespace>:name y que los elementos construidos, como persons, están en el espacio de nombres de elemento predeterminado.
La instrucción SQL Select no distingue entre mayúsculas y minúsculas.
La cláusula WHERE de la instrucción Select debe hacer referencia a otro elemento de la base de datos y no a un nodo del archivo XML al que se accede.
La barra "/" situada después de la función db2-fn:sqlquery representa el primer elemento de la secuencia devuelta y este elemento es el nodo de contexto que se utilizará para navegar por el documento.

 

Ejecutar el documento XQuery

Para ejecutar el documento XQuery, seleccione el comando XSL/XQuery | Ejecutar XQuery. También puede pulsar la combinación de teclas Alt+F10 o hacer clic en el icono "Ejecutar XQuery" ic_xquery_transform. El resultado de la ejecución aparece en un documento nuevo.

 


© 2019 Altova GmbH