Introducción
XQuery es un lenguaje clave para la consulta y manipulación de datos XML, fundamental 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 mejorar tu comprensión y habilidades en el uso de XQuery.
Archivo XML de Ejemplo
Consideremos el siguiente archivo XML que contiene información sobre un sistema de gestión de cursos, llamado cursos.xml
:
<sistema_cursos>
<curso>
<nombre>Introducción a la Programación</nombre>
<instructor>Juan Pérez</instructor>
<categoria>Informática</categoria>
<precio>50</precio>
<fecha_inicio>2023-01-15</fecha_inicio>
<estudiantes_inscritos>30</estudiantes_inscritos>
</curso>
<curso>
<nombre>Diseño Gráfico Básico</nombre>
<instructor>Maria Lopez</instructor>
<categoria>Diseño</categoria>
<precio>70</precio>
<fecha_inicio>2023-02-20</fecha_inicio>
<estudiantes_inscritos>25</estudiantes_inscritos>
</curso>
<curso>
<nombre>Desarrollo Web Avanzado</nombre>
<instructor>Carlos Fernandez</instructor>
<categoria>Informática</categoria>
<precio>100</precio>
<fecha_inicio>2023-03-10</fecha_inicio>
<estudiantes_inscritos>15</estudiantes_inscritos>
</curso>
</sistema_cursos>
Ejercicio 1: Selección de Cursos por Categoría
Pregunta: Escribe una consulta XQuery que retorne los nombres de los cursos de la categoría «Informática».
Solución:
for $curso in doc("cursos.xml")//curso
where $curso/categoria = "Informática"
return $curso/nombre
Ejercicio 2: Filtrar Cursos por Instructor
Pregunta: Escribe una consulta XQuery que retorne los nombres y precios de los cursos impartidos por «Maria Lopez».
Solución:
for $curso in doc("cursos.xml")//curso
where $curso/instructor = "Maria Lopez"
return <curso>
<nombre>{$curso/nombre}</nombre>
<precio>{$curso/precio}</precio>
</curso>
Ejercicio 3: Ordenar Cursos por Fecha de Inicio
Pregunta: Escribe una consulta XQuery que retorne los cursos ordenados por fecha de inicio en orden ascendente.
Solución:
for $curso in doc("cursos.xml")//curso
order by $curso/fecha_inicio
return $curso
Ejercicio 4: Calcular el Precio Promedio de los Cursos
Pregunta: Escribe una consulta XQuery que calcule y retorne el precio promedio de todos los cursos en el sistema.
Solución:
let $precios := doc("cursos.xml")//curso/precio
let $promedio := avg($precios)
return <precio_promedio>{$promedio}</precio_promedio>
Ejercicio 5: Agrupar Cursos por Instructor
Pregunta: Escribe una consulta XQuery que agrupe los cursos por instructor y muestre el número de cursos que imparte cada uno.
Solución:
let $cursos := doc("cursos.xml")//curso
for $instructor in distinct-values($cursos/instructor)
let $conteo := count($cursos[instructor = $instructor])
return <instructor>
<nombre>{$instructor}</nombre>
<cantidad_cursos>{$conteo}</cantidad_cursos>
</instructor>
Ejercicio 6: Cursos con Más de 20 Estudiantes Inscritos
Pregunta: Escribe una consulta XQuery que retorne los nombres de los cursos que tienen más de 20 estudiantes inscritos.
Solución:
for $curso in doc("cursos.xml")//curso
where $curso/estudiantes_inscritos > 20
return $curso/nombre
Ejercicio 7: Calcular el Ingreso Total por Curso
Pregunta: Escribe una consulta XQuery que calcule y retorne el ingreso total de cada curso (precio * estudiantes inscritos).
Solución:
for $curso in doc("cursos.xml")//curso
let $ingreso_total := $curso/precio * $curso/estudiantes_inscritos
return <curso>
<nombre>{$curso/nombre}</nombre>
<ingreso_total>{$ingreso_total}</ingreso_total>
</curso>
Conclusión
Estos ejercicios prácticos cubren una variedad de aspectos fundamentales de XQuery, desde la selección y filtrado de datos hasta la manipulación y agrupamiento avanzado. Practicar con estos ejemplos te ayudará a desarrollar una comprensión sólida de XQuery y te preparará mejor para tus exámenes de DAW. ¡Sigue practicando para perfeccionar tus habilidades en el manejo de datos XML!
Gracias por visitar mi blog de informática, mi nombre es Tomás y soy formador y desarrollador web. Si quiere usted dejarme alguna sugerencia, ayuda o quiere un servicio de formación estoy escuchando ofertas en tomas.gonzalez@infogonzalez.com, en Facebook a https://www.facebook.com/Infogonzalez estoy deseando escucharle. Su duda o sugerencia NO molesta.