Ejercicios de XQuery Ismael Garzón
-
Upload
ismael-garzon-exposito -
Category
Documents
-
view
1.558 -
download
36
Transcript of Ejercicios de XQuery Ismael Garzón
Realizar los ejercicios de XQuery:
XQuery Básico 1
(https://sites.google.com/site/todoxmldtd/ejercicios/enunciados/55-ejercicios-de-
xquery/ejercicio-xquery-b)
XQuery Básico 2
(https://sites.google.com/site/todoxmldtd/ejercicios/enunciados/55-ejercicios-de-
xquery/ejercicio-xquery-basico-1)
XQuery Básico 1
1. Listar el título de todos los libros.
doc("libros.xml")//libro/titulo
o también
for $libros in doc("libros.xml")/bib/libro/titulo
return $libros
2. Listar año y título de todos los libros, ordenados por el año.
for $a in doc("libros.xml")//libro
order by $a/@anyo
return
<libro>
{$a/@anyo}
{$a/titulo}
</libro>
3. Listar los libros cuyo precio sea 65.95
for $a in doc("libros.xml")//libro
where $a/precio = "65.95"
return $a
4. Listar los libros publicados antes del año 2000
for $a in doc("libros.xml")//libro
where $a/@anyo < "2000"
return $a
5. Listar año y título de los libros publicados por Addison-Wesley después del año
1992.
for $a in doc("libros.xml")/bib/libro
where $a/editorial = "Addison-Wesley"
return
<libro año="{ $a/@anyo }">
{ $a/titulo }
</libro>
6. Listar año y título de los libros que tienen más de un autor.
for $a in doc("libros.xml")//libro
let $cont := $a//autor
where count($cont) >= 2
return $a/ titulo
7. Listar año y título de los libros que tienen no tienen autor.
for $a in doc("libros.xml")//libro
let $cont := $a//autor
where count($cont) = 0
return $a/ titulo
8. Mostrar los apellidos de los autores que aparecen en el documento, sin
repeticiones, ordenados alfabéticamente.
for $a in distinct-values(doc("libros.xml")
//(autor)/apellido)
order by $a
return <apellidos>{ $a }</apellidos>
9. Por cada libro, listar agrupado en un elemento <result> su titulo y autores
for $a in doc("libros.xml")
//libro
return
<result>
<titulo>{$a/titulo}</titulo>
<autor>{$a/autor}</autor>
</result>
10. Por cada libro, obtener su título y el número de autores, agrupados en un
elemento <libro>
for $b in doc("libros.xml")//libro
let $c := $b/autor
return
<libro>{ $b/titulo, <autores>{ count($c) }</autores>}</libro>
11. Generar un documento html con un encabezado que diga “Listado de libros”
seguido de una tabla de 3 columnas, en la que se muestre el titulo, editorial y
precio de cada libro. La tabla deberá tener bordes y la primera fila tendrá un
formato especial con los nombres de las columnas. Las columnas de título y
editorial irán alineadas a la izquierda, y el precio a la derecha.
<html>
<body>
<table>
<tr>
<th>Titulo</th>
<th>Editorial</th>
<th>Precio</th>
</tr>
{
for $a in doc("Libros.xml")//libro
return
<tr>
<td>{$a /titulo}</td>
<td>{$a /editorial}</td>
<td>{$a /precio}</td>
</tr>
}
</table>
</body>
</html>
12. Generar el siguiente documento html con la información de los libros del autor
Stevens. El valor precio total es un campo calculado utilizando una consulta con
una cláusula let.
let $total:= doc("libros.xml")//libro/autor[apellido='Stevens']/..
return
<html>
<body>
<h1>Libros de Stevens</h1>
<table border="1">
<tr>
<th>Titulo</th>
<th>Precio</th>
</tr>
{
for $a in doc("libros.xml")//libro
where $a/autor/apellido='Stevens'
return
<tr>
<td>{$a/titulo}</td>
<td>{$a/precio}</td>
</tr>
}
<tr>
<td>Precio Total</td>
<td>{sum($total/precio)}</td>
</tr>
</table>
</body>
</html>
XQuery Básico 2
El alumno debe hacer, con los ficheros que se muestran, las sentencias XQuery
necesarias para mostrar los resultados siguientes:
1. Realizar una tabla html con el título "Situación de los libros" y en la que se
muestren las columnas: código de libro, título, año y situación (comprado o
pendiente).
<html>
<body>
<table>
<tr> <th>Situación de los libros</th> </tr>
{
for $a in doc("libros.xml")//libro
return
<tr>
<td>{$a/@codigo}</td>
<td>{$a/titulo}</td>
<td>{$a/anyo}</td>
<td>
{
let $com_pen := doc("librosalmacen.xml")//almacen/comprados
return if ($com_pen/codigo=$a/@codigo)
then Comprado
else Pendiente
}
</td>
</tr>
}
</table>
</body>
</html>
2. Realizar un lista ordenada html de nombre de autores.
<html>
<body>
for $a in doc("libros.xml")//libro
order by $a/titulo
return <ul><li>{$a /titulo}</li></ul>
</body>
</html>
3. Realizar una tabla html con el título "Listado de libros de categorías" y que
tenga las columnas: categoría y nro.de títulos.
<html>
<body>
<h1>Listado de libros de categorías</h1>
<table>
<tr>
<th>Categoria</th>
<th>Nº Libros</th>
</tr>
{
for $a in distinct-values(doc("libros.xml")//libro/@categoria)
return
<tr>
<td>{$a}</td>
<td>
{
let $num := doc("libros.xml")//libro[@categoria=$a]
return count($num)
}
</td>
</tr>
}
</table>
</body>
</html>
4. Realizar una tabla html con el título "Listado de libros" y que tenga las
columnas: código, categoría, título, autor, año y precio. En la columna autor
deberá figurar "varios" si hay más de un autor.
5. Realizar una tabla html con el título "listado de libros pendientes anteriores a
2004" con las columnas: código, categoría, titulo y precio.
<html>
<body>
<h1>listado de libros pendientes anteriores a 2004</h1>
<table>
<tr>
<th>Código</th>
<th>Categoría</th>
<th>Titulo</th>
<th>Precio</th>
</tr>
{
for $a in doc("libros.xml")//libro
where $a/anyo<2004
return
<tr>
<td>{$a/@codigo}</td>
<td>{$a/@categoria}</td>
<td>{$a/titulo}</td>
<td>{$a/precio}</td>
</tr>
}
</table>
</body>
</html>