Introducción a XQuery con ejemplos

7
40570

Introducción a XQuery con ejemplos

0. Índice de
contenidos.

1. Entorno

Este tutorial está escrito usando el siguiente entorno:

  • Hardware: Portátil Mac Book Pro 17″ (2,6 Ghz Intel Core i7, 8 GB DDR3)
  • Sistema Operativo: Mac OS X Snow Leopard 10.6.4
  • XQuery 1.0

2. Introducción

XQuery es un lenguaje de consulta que proporciona los medios para extraer y manipular información de cualquier fuente de datos que pueda ser representada en formato XML.

Para su funcionamiento interno se apoya en XPath para poder acceder a la información contenida en nodos del documento XML. La otra utilidad fundamental de este lenguaje es que nos da la posibilidad de transformar un XML en otro distinto o incluso en otro formato. Un ejemplo muy típico es tener una serie de datos en XML y generar un XHTML para que puedan ser mostrados en un navegador.

En este tutorial vamos a empezar a gatear con el lenguaje y vamos a ver cómo recuperar información de un XML a través de varios ejemplos.

3. Creación y configuración de la base de datos de ejemplo

Vamos a trabajar con XML. Por lo tanto lo que primero necesitamos es un fichero .XML con el siguiente contenido:

<tutoriales>
	<tutorial anio="2007">
		<titulo>XMLBeans, una forma de mapear un XML en objetos Java</titulo>
		<autor>
			<nombre>Alejandro</nombre>
			<apellidos>Pérez García</apellidos>
		</autor>
		<categoria>XML</categoria>
		<visitas>25827</visitas>
	</tutorial>
	<tutorial anio="2013">
		<titulo>Spring Security: haciendo uso de un servidor LDAP embebido</titulo>
		<autor>
			<nombre>José Manuel</nombre>
			<apellidos>Sánchez Suárez</apellidos>
		</autor>
		<categoria>Spring</categoria>
		<visitas>1996</visitas>
	</tutorial>
	<tutorial anio="2011">
		<titulo>Mybatis con Maven y Spring</titulo>
		<autor>
			<nombre>Rubén</nombre>
			<apellidos>Aguilera Díaz-Heredero</apellidos>
		</autor>
		<categoria>Mybatis</categoria>
		<visitas>6998</visitas>
	</tutorial>
	<tutorial anio="2011">
		<titulo>Trabajar con XML sabiendo lo mínimo</titulo>
		<autor>
			<nombre>Roberto</nombre>
			<apellidos>Canales Mora</apellidos>
		</autor>
		<categoria>XML</categoria>
		<visitas>34842</visitas>
	</tutorial>
	<tutorial anio="2013">
		<titulo>Introducción a Spring Batch</titulo>
		<autor>
			<nombre>Miguel</nombre>
			<apellidos>Arlandy Rodríguez</apellidos>
		</autor>
		<categoria>Spring</categoria>
		<visitas>1273</visitas>
	</tutorial>
</tutoriales>

Almacenamos el fichero con el nombre que queramos (ej. tutorial_xquery.xml)

Para implementar y probar los ejemplos contra esta base de datos vamos a hacer uso del editor BaseX que podéis descargar aquí

En mac, una vez descargado, descomprimimos el .zip y ejecutamos el fichero BaseX.app. Para poder hacer uso del fichero XML creado anteriormente tenemos que ir a las opciones de menú «Database» –> «New» y seleccionar el fichero XML.

Pulsamos en «OK» y ya tenemos la base de datos en XML preparada para seguir los ejemplos.

4. Ejemplos

En todos los ejemplo vamos a hacer referencia al XML de prueba haciendo uso de la función de XQuery fn:doc(nombre_basedatos). En nuestro caso, fn:doc(«tutorial_query»).

Devolver todos los elementos que cuelgan de un nodo sin incluirlo

En esta expresión utilizamos el * para indicar que queremos todos los elementos que cuelgan de un nodo pero que no queremos incluir el nodo mismo. Este sería el ejemplo para devolver la información de todos los tutoriales.

Devolver todos los elementos que cuelgan de un nodo incluyéndolo

Para esta expresión no hacemos uso del *. Tenemos que poner el path absoluto del nodo que queramos consultar. Este sería el ejemplo para devolver el título de todos los tutoriales.

Una forma de acceder directamente a un nodo sin necesidad de escribir todo su path absoluto es con la notación «//» seguida del nodo.

Devolver atributos ligados a un nodo

Con esta expresión accedemos a los atributos que están ligados a un nodo. Este sería el ejemplo para acceder a la información del año de publicación de cada tutorial.

Devolver elementos que cumplan una determinada condición

Podemos establecer una condición en el atributo de un nodo para que solo se devuelvan los que cumplan con esa condición. Este sería el ejemplo para devolver solo los tutoriales cuyo año de publicación sea menor que «2010».

Igualmente podemos establecer una condición para que devuelva solo determinados nodos. Este sería el ejemplo para devolver solo los tutoriales que sean de la categoría «Mybatis».

También podemos hacer estas condiciones todo lo complejas que necesitemos gracias a las cláusulas and y or. Este sería el ejemplo que devuelve los tutoriales que sean de la categoría «XML» y estén escritos en el anio «2007»

Podemos utilizar otros operandos como: «!=», «», «>=»

Acceso directo a un nodo de una lista

Si conocemos el orden de los elementos de una XML puede ser útil poder acceder directamente a uno de ellos por posición. Este sería el ejemplo que nos devuelve la información del tutorial que se encuentra en la posición 5 de la lista de tutoriales.

Búsquedas textuales

Podemos realizar consultas que incluyan búsquedas textuales sobre un elemento en concreto. Este sería el ejemplo que devuelve los tutoriales donde la palabra «Maven» está contenida dentro de su título.

Devolver el nodo padre de un elemento

Para devolver el nodo padre de un elemento utilizamos la notación «..». Este sería el ejemplo para devolver la información del tutorial donde el nombre del autor sea «Roberto».

5. Conclusiones

Hasta aquí hemos visto como podemos realizar todo tipo de consultas sobre datos estructurados en XML. En posteriores tutoriales veremos como transformar el XML en otro que se ajuste a nuestras necesidades y más utilidades de este lenguaje.

Cualquier duda o sugerencia en la zona de comentarios.

Saludos.

7 COMENTARIOS

  1. Hola amigo, grandioso tutorial, claro y conciso. Sería fantastico que pudieras continuarlo. Gracias por dedicar tiempo a enseñar a los demás, saludos.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad