Ejercicios de XQuery Ismael Garzón

Post on 29-Dec-2015

1.558 views 36 download

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>