Diferencia entre revisiones de «Solución de XQuery con escenario de libros»
| Línea 1: | Línea 1: | ||
| + | |||
| + | = Solución a cuestións do enunciado 1 = | ||
'''1.''' Listar el título de todos los libros. | '''1.''' Listar el título de todos los libros. | ||
| Línea 197: | Línea 199: | ||
* [http://www.lsi.us.es/docs/informes/LSI-2005-02.pdf XQuery. J. J. Gutiérrez, M. J. Escalona, M. Mejías, J. Torres, D. Villadiego. Universidad de Sevilla. Lenguajes y Sistemas Informáticos] | * [http://www.lsi.us.es/docs/informes/LSI-2005-02.pdf XQuery. J. J. Gutiérrez, M. J. Escalona, M. Mejías, J. Torres, D. Villadiego. Universidad de Sevilla. Lenguajes y Sistemas Informáticos] | ||
* [https://es.scribd.com/document/376964321/Ejercicios-de-XQuery-Pedro-montes-pdf# Exercicios] de Pedro Montes | * [https://es.scribd.com/document/376964321/Ejercicios-de-XQuery-Pedro-montes-pdf# Exercicios] de Pedro Montes | ||
| + | |||
| + | = Solución a cuestións do enunciado 2 = | ||
| + | |||
| + | 1. los títulos de los libros con la etiqueta "titulo". | ||
| + | |||
| + | 2. los libros cuyo precio sea menor o igual a 30. Primero incluyendo la condición en la cláusula "where" y luego en la ruta del XPath. | ||
| + | |||
| + | 3. sólo el título de los libros cuyo precio sea menor o igual a 30. | ||
| + | |||
| + | 4. sólo el título sin atributos de los libros cuyo precio sea menor o igual a 30. | ||
| + | |||
| + | 5. el título y el autor de los libros del año 2005, y etiquetar cada uno de ellos con "lib2005". | ||
| + | |||
| + | 6. los años de publicación, primero con "for" y luego con "let" para comprobar la diferencia entre ellos. Etiquetar la salida con "publicacion". | ||
| + | |||
| + | 7. los libros ordenados primero por "category" y luego por "title" en una sola consulta. | ||
| + | |||
| + | 8. cuántos libros hay, y etiquetarlo con "total". | ||
| + | |||
| + | 9. los títulos de los libros y al final una etiqueta con el número total de libros. | ||
| + | |||
| + | 10. el precio mínimo y máximo de los libros. | ||
| + | |||
| + | 11. el título del libro, su precio y su precio con el IVA incluido, cada uno con su propia etiqueta. Ordénalos por precio con IVA. | ||
| + | |||
| + | 12. la suma total de los precios de los libros con la etiqueta "total". | ||
| + | # cada uno de los precios de los libros, y al final una nueva etiqueta con la suma de los precios. | ||
| + | # el título y el número de autores que tiene cada título en etiquetas diferentes. | ||
| + | # en la misma etiqueta el título y entre paréntesis el número de autores que tiene ese título. | ||
| + | # los libros escritos en años que terminen en "3". | ||
| + | # los libros cuya categoría empiece por "C". | ||
| + | # los libros que tengan una "X" mayúscula o minúscula en el título ordenados de manera descendente. | ||
| + | # el título y el número de caracteres que tiene cada título, cada uno con su propia etiqueta. | ||
| + | # todos los años en los que se ha publicado un libro eliminando los repetidos. Etiquétalos con "año". | ||
| + | # todos los autores eliminando los que se repiten y ordenados por el número de caracteres que tiene cada autor. | ||
Revisión del 14:47 29 ene 2023
Solución a cuestións do enunciado 1
1. Listar el título de todos los libros.
doc("libros.xml")//libro/titulo
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/@ano
return
<libro>
{$a/@ano}
{$a/titulo}
</libro>
3. Listar los libros cuyo precio sea 65.95
for $a in doc("libros.xml")//libro
where $a/prezo = "65.95"
return $a
4. Listar los libros publicados antes del año 2000
for $a in doc("libros.xml")//libro
where $a/@ano < "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" and $a/@ano > 1991
return
<libro ano="{ $a/@ano }">
{ $a/titulo }
</libro>
6. Listar año y título de los libros que tienen más de un autor.
for $a in doc("../prueba/libros.xml")/bib/libro
return
if (count($a/autor) > 1)
then <libro ano="{ $a/@ano }">
{ $a/titulo }
else ()
</libro>
7. Listar año y título de los libros que tienen no tienen autor.
for $a in doc("../prueba/libros.xml")/bib/libro
return
if (count($a/autor) = 0)
then <libro ano="{ $a/@ano }">
{ $a/titulo }
</libro>
Otra opción:
for $a in doc("../prueba/libros.xml")//libro
where empty($a/autor)
return <libro ano="{ $a/@ano }">
{ $a/titulo }
</libro>
8. Mostrar los apellidos de los autores que aparecen en el documento, sin repeticiones, ordenadosalfabéticamente.
for $a in distinct-values(doc("../prueba/libros.xml")
//autor/apelido)
order by $a
return <apelidos>{ $a }</apelidos>
9. Por cada libro, listar agrupado en un elemento <result> su titulo y autores
for $b in doc("../prueba/libros.xml")//libro
return
<result>
{ $b/titulo }
<autores>
{
for $a at $i in $b/autor
return <autor>{string($a)}</autor>
}
</autores>
</result>
10. Por cada libro, obtener su título y el número de autores, agrupados en un elemento <libro>
for $b in doc("../prueba/libros.xml")//libro
return
<libro>
{ $b/titulo }
<numeroAutores>
{count($b/autor)}
</numeroAutores>
</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>
<head>
<title> Listado de libros </title>
</head>
<body>
<table border="1">
<caption>Listado de libros</caption>
<th> Titulo </th>
<th> Editorial </th>
<th> Precio </th>
{
for $a in doc("../prueba/libros.xml")/bib/libro
return
<tr>
<td align ="left"> <i> { string( $a/titulo ) } </i> </td>
<td align ="left"> { string( $a/editorial ) } </td>
<td align ="right"> { string( $a/prezo) } </td>
</tr>
}
(: No lo pide el enunciado, pero así se podría mostrar el precio medio de los libros :)
{
let $a := doc("../prueba/libros.xml")/bib/libro
return
<tr>
<td> {avg( $a/prezo ) } </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.
<html>
<head>
<title> Libros de Stevens </title>
</head>
<body>
<table border="1">
<caption>Listado de libros</caption>
<th> Titulo </th>
<th> Precio </th>
{
for $a in doc("../prueba/libros.xml")//libro
where $a/autor/apelido="Stevens"
return
<tr>
<td>{$a/titulo}</td>
<td>{$a/prezo}</td>
</tr>
}
{
let $a := doc("../prueba/libros.xml")/bib/libro
where $a/autor/apelido="Stevens"
return
<tr>
<td> {sum( $a/prezo ) } </td>
</tr>
}
</table>
</body>
</html>
Referencias
- XQuery. J. J. Gutiérrez, M. J. Escalona, M. Mejías, J. Torres, D. Villadiego. Universidad de Sevilla. Lenguajes y Sistemas Informáticos
- Exercicios de Pedro Montes
Solución a cuestións do enunciado 2
1. los títulos de los libros con la etiqueta "titulo".
2. los libros cuyo precio sea menor o igual a 30. Primero incluyendo la condición en la cláusula "where" y luego en la ruta del XPath.
3. sólo el título de los libros cuyo precio sea menor o igual a 30.
4. sólo el título sin atributos de los libros cuyo precio sea menor o igual a 30.
5. el título y el autor de los libros del año 2005, y etiquetar cada uno de ellos con "lib2005".
6. los años de publicación, primero con "for" y luego con "let" para comprobar la diferencia entre ellos. Etiquetar la salida con "publicacion".
7. los libros ordenados primero por "category" y luego por "title" en una sola consulta.
8. cuántos libros hay, y etiquetarlo con "total".
9. los títulos de los libros y al final una etiqueta con el número total de libros.
10. el precio mínimo y máximo de los libros.
11. el título del libro, su precio y su precio con el IVA incluido, cada uno con su propia etiqueta. Ordénalos por precio con IVA.
12. la suma total de los precios de los libros con la etiqueta "total".
- cada uno de los precios de los libros, y al final una nueva etiqueta con la suma de los precios.
- el título y el número de autores que tiene cada título en etiquetas diferentes.
- en la misma etiqueta el título y entre paréntesis el número de autores que tiene ese título.
- los libros escritos en años que terminen en "3".
- los libros cuya categoría empiece por "C".
- los libros que tengan una "X" mayúscula o minúscula en el título ordenados de manera descendente.
- el título y el número de caracteres que tiene cada título, cada uno con su propia etiqueta.
- todos los años en los que se ha publicado un libro eliminando los repetidos. Etiquétalos con "año".
- todos los autores eliminando los que se repiten y ordenados por el número de caracteres que tiene cada autor.