Ejercicios de XQuery Ismael Garzón

7
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>

Transcript of Ejercicios de XQuery Ismael Garzón

Page 1: 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>

Page 2: Ejercicios de XQuery Ismael Garzón

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>

Page 3: Ejercicios de XQuery Ismael Garzón

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>

Page 4: Ejercicios de XQuery Ismael Garzón

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>

Page 5: Ejercicios de XQuery Ismael Garzón

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>

Page 6: Ejercicios de XQuery Ismael Garzón

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

Page 7: Ejercicios de XQuery Ismael Garzón

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>