Está en la página 1de 7

Realizar los ejercicios de XQuery:

XQuery Bsico 1 (https://sites.google.com/site/todoxmldtd/ejercicios/enunciados/55-ejercicios-dexquery/ejercicio-xquery-b) XQuery Bsico 2 (https://sites.google.com/site/todoxmldtd/ejercicios/enunciados/55-ejercicios-dexquery/ejercicio-xquery-basico-1)

XQuery Bsico 1 1. Listar el ttulo de todos los libros. doc("libros.xml")//libro/titulo o tambin for $libros in doc("libros.xml")/bib/libro/titulo return $libros 2. Listar ao y ttulo de todos los libros, ordenados por el ao. 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 ao 2000 for $a in doc("libros.xml")//libro where $a/@anyo < "2000" return $a 5. Listar ao y ttulo de los libros publicados por Addison-Wesley despus del ao 1992. for $a in doc("libros.xml")/bib/libro where $a/editorial = "Addison-Wesley" return <libro ao="{ $a/@anyo }"> { $a/titulo } </libro>

6. Listar ao y ttulo de los libros que tienen ms de un autor. for $a in doc("libros.xml")//libro let $cont := $a//autor where count($cont) >= 2 return $a/ titulo 7. Listar ao y ttulo 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 alfabticamente. 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 ttulo y el nmero 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 ttulo y editorial irn 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 informacin de los libros del autor Stevens. El valor precio total es un campo calculado utilizando una consulta con una clusula 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 Bsico 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 ttulo "Situacin de los libros" y en la que se muestren las columnas: cdigo de libro, ttulo, ao y situacin (comprado o pendiente). <html> <body> <table> <tr> <th>Situacin 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 ttulo "Listado de libros de categoras" y que tenga las columnas: categora y nro.de ttulos. <html> <body> <h1>Listado de libros de categoras</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 ttulo "Listado de libros" y que tenga las columnas: cdigo, categora, ttulo, autor, ao y precio. En la columna autor deber figurar "varios" si hay ms de un autor.

5. Realizar una tabla html con el ttulo "listado de libros pendientes anteriores a 2004" con las columnas: cdigo, categora, titulo y precio. <html> <body> <h1>listado de libros pendientes anteriores a 2004</h1> <table> <tr> <th>Cdigo</th> <th>Categora</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>