Introducción
XQuery es un lenguaje fundamental para la consulta y manipulación de datos XML, utilizado en el desarrollo de aplicaciones web (DAW). En este artículo, presentamos un archivo XML de ejemplo y una serie de ejercicios prácticos con soluciones en XQuery. Estos ejercicios están diseñados para ayudarte a comprender y aplicar XQuery en diferentes contextos, mejorando tu preparación para el examen.
Archivo XML de Ejemplo
Consideremos el siguiente archivo XML que contiene información sobre una tienda de libros, llamado tienda_libros.xml
:
<tienda>
<libro>
<titulo>El Principito</titulo>
<autor>Antoine de Saint-Exupéry</autor>
<genero>Ficción</genero>
<precio>12.99</precio>
<fecha_publicacion>1943-04-06</fecha_publicacion>
<stock>120</stock>
</libro>
<libro>
<titulo>Cien Años de Soledad</titulo>
<autor>Gabriel García Márquez</autor>
<genero>Ficción</genero>
<precio>18.99</precio>
<fecha_publicacion>1967-05-30</fecha_publicacion>
<stock>85</stock>
</libro>
<libro>
<titulo>Breve Historia del Tiempo</titulo>
<autor>Stephen Hawking</autor>
<genero>Ciencia</genero>
<precio>14.99</precio>
<fecha_publicacion>1988-03-01</fecha_publicacion>
<stock>45</stock>
</libro>
</tienda>
Ejercicio 1: Selección de Libros por Género
Pregunta: Escribe una consulta XQuery que retorne los títulos de los libros del género «Ficción».
Solución:
for $libro in doc("tienda_libros.xml")//libro
where $libro/genero = "Ficción"
return $libro/titulo
Ejercicio 2: Filtrar Libros por Autor
Pregunta: Escribe una consulta XQuery que retorne los títulos y precios de los libros escritos por «Gabriel García Márquez».
Solución:
for $libro in doc("tienda_libros.xml")//libro
where $libro/autor = "Gabriel García Márquez"
return <libro>
<titulo>{$libro/titulo}</titulo>
<precio>{$libro/precio}</precio>
</libro>
Ejercicio 3: Ordenar Libros por Fecha de Publicación
Pregunta: Escribe una consulta XQuery que retorne los libros ordenados por fecha de publicación en orden ascendente.
Solución:
for $libro in doc("tienda_libros.xml")//libro
order by $libro/fecha_publicacion
return $libro
Ejercicio 4: Calcular el Precio Promedio de los Libros
Pregunta: Escribe una consulta XQuery que calcule y retorne el precio promedio de todos los libros en la tienda.
Solución:
let $precios := doc("tienda_libros.xml")//libro/precio
let $promedio := avg($precios)
return <precio_promedio>{$promedio}</precio_promedio>
Ejercicio 5: Agrupar Libros por Autor
Pregunta: Escribe una consulta XQuery que agrupe los libros por autor y muestre el número de libros escritos por cada uno.
Solución:
let $libros := doc("tienda_libros.xml")//libro
for $autor in distinct-values($libros/autor)
let $conteo := count($libros[autor = $autor])
return <autor>
<nombre>{$autor}</nombre>
<cantidad_libros>{$conteo}</cantidad_libros>
</autor>
Ejercicio 6: Libros con Más de 50 Unidades en Stock
Pregunta: Escribe una consulta XQuery que retorne los títulos de los libros que tienen más de 50 unidades en stock.
Solución:
for $libro in doc("tienda_libros.xml")//libro
where $libro/stock > 50
return $libro/titulo
Ejercicio 7: Calcular el Valor Total del Stock por Libro
Pregunta: Escribe una consulta XQuery que calcule y retorne el valor total del stock de cada libro (precio * stock).
Solución:
for $libro in doc("tienda_libros.xml")//libro
let $valor_total := $libro/precio * $libro/stock
return <libro>
<titulo>{$libro/titulo}</titulo>
<valor_total>{$valor_total}</valor_total>
</libro>
Ejercicio 8: Libros Publicados Después de 1980
Pregunta: Escribe una consulta XQuery que retorne los títulos de los libros publicados después del 1 de enero de 1980.
Solución:
for $libro in doc("tienda_libros.xml")//libro
where $libro/fecha_publicacion > xs:date("1980-01-01")
return $libro/titulo
Conclusión
Estos ejercicios prácticos proporcionan una comprensión profunda del uso de XQuery para manipular y consultar datos XML, habilidades esenciales para el desarrollo de aplicaciones web. Practicar con estos ejemplos te ayudará a prepararte mejor para tus exámenes de DAW y a desarrollar tu competencia en el manejo de datos XML. ¡Sigue practicando para perfeccionar tus habilidades en XQuery!