0% encontró este documento útil (0 votos)
101 vistas12 páginas

Ejercicios Resueltos de XQuery en XML

Este documento contiene 22 consultas XQuery sobre un XML de libros. Las consultas realizan diferentes operaciones como mostrar, filtrar y ordenar datos del XML como títulos, autores, precios y años de los libros.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Temas abordados

  • etiquetas de consulta libros,
  • publicación,
  • etiquetas de años,
  • libros por autor,
  • valores distintos,
  • libros 2005,
  • etiquetas de total,
  • HTML,
  • libros por precio,
  • etiquetas de autores
0% encontró este documento útil (0 votos)
101 vistas12 páginas

Ejercicios Resueltos de XQuery en XML

Este documento contiene 22 consultas XQuery sobre un XML de libros. Las consultas realizan diferentes operaciones como mostrar, filtrar y ordenar datos del XML como títulos, autores, precios y años de los libros.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Temas abordados

  • etiquetas de consulta libros,
  • publicación,
  • etiquetas de años,
  • libros por autor,
  • valores distintos,
  • libros 2005,
  • etiquetas de total,
  • HTML,
  • libros por precio,
  • etiquetas de autores

EXERCICIS RESOLTS XQUERY

XML

<?xml version="1.0" encoding="UTF-8"?>

<bookstore>

<book category="COOKING">

<title lang="en">Everyday Italian</title>

<author>Giada De Laurentiis</author>

<year>2005</year>

<price>30.00</price>

</book>

<book category="CHILDREN">

<title lang="en">Harry Potter</title>

<author>J K. Rowling</author>

<year>2005</year>

<price>29.99</price>

</book>

<book category="WEB">

<title lang="en">XQuery Kick Start</title>

<author>James McGovern</author>

<author>Per Bothner</author>

<author>Kurt Cagle</author>

<author>James Linn</author>

<author>Vaidyanathan Nagarajan</author>

<year>2003</year>

<price>49.99</price>

</book>
<book category="WEB">

<title lang="en">Learning XML</title>

<author>Erik T. Ray</author>

<year>2003</year>

<price>39.95</price>

</book>

</bookstore>

CONSULTES

Nota: En las respuestas pondré la consulta (para después poder copiar y pegar) un
recorte de la consulta (para que quede más estético con sus colores y eso) y un
recorte del resultado obtenido.

1. Mostrar los títulos de los libros con la etiqueta "titulo".

for $x in //title/data()
return concat('<titulo>', $x ,'</titulo>')

2. Mostrar 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.

for $x in /bookstore/book for $x in /bookstore/book[price<=30]


where $x//price<=30 return $x
return $x
El resultado en ambos casos es el mismo:

3. Mostrar sólo el título de los libros cuyo precio sea menor o igual a 30.

for $x in /bookstore/book
where $x//price<=30
return $x/title

4. Mostrar sólo el título sin atributos de los libros cuyo precio sea menor o igual
a 30.

for $x in /bookstore/book
where $x//price<=30
return $x/title/text()
5. Mostrar el título y el autor de los libros del año 2005, y etiquetar cada uno de
ellos con "lib2005".

for $x in //book
where $x/year='2005'
return <lib2005>{$x/title}{$x/author}</lib2005>

6. Mostrar los años de publicación, primero con "for" y luego con "let" para
comprobar la diferencia entre ellos. Etiquetar la salida con "publicacion".

for $x in //year let $x := //year


return return
<publicacion>{$x}</publicacion> <publicacion>{$x}</publicacion>

La cláusula let permite asignaciones de variables y evita repetir la misma expresión muchas
veces. La cláusula let no da lugar a la iteración. En cambio la clausula for es un bucle,
devuelve el resultado para todas las iteraciones.
7. Mostrar los libros ordenados primero por "category" y luego por "title" en una
sola consulta.

for $x in //book
order by $x/@category, $x/title
return $x

8. Mostrar cuántos libros hay, y etiquetarlo con "total".

let $x := /bookstore/count(book)
return <total>{$x}</total>
9. Mostrar los títulos de los libros y al final una etiqueta con el número total de
libros.

let $total := count (//book),


$titulos := (for $libro in //title return $libro)
return
<resultado>
{$titulos}
<total_libros>{$total}</total_libros>
</resultado>

10. Mostrar el precio mínimo y máximo de los libros.

let $min := min(//price),


$max := max(//price)
return
<precios_libros>
<precio_minimo>{$min}</precio_minimo>
<precio_maximo>{$max}</precio_maximo>
</precios_libros>
11. Mostrar 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.

Aplicare un IVA del 4%:


IVA superreducido (4%): es aplicado a los productos de primera necesidad como el
pan, la leche, las frutas, los cereales y los quesos. Otros productos con este tipo de
IVA superreducido son los LIBROS, periódicos y revistas no publicitarios,
medicamentos, sillas de ruedas, protesís y VPO.

for $libro in //book


let $precio_iva := round($libro/price/text()*1.04,2)
order by $precio_iva
return
<libro>
<titulo>{$libro/title/text()}</titulo>
<precio>{$libro/price/text()}</precio>
<precio_con_iva>{$precio_iva}</precio_con_iva>
</libro>
12. Mostrar la suma total de los precios de los libros con la etiqueta "total".

let $precio := //price


return <total>{sum($precio)}</total>

13. Mostrar cada uno de los precios de los libros, y al final una nueva etiqueta con
la suma de los precios.

let $total := sum(//price),


$precio := (for $libro in //price return $libro)
return
<precios>
{$precio}
<precio_total>{$total}</precio_total>
</precios>

14. Mostrar el título y el número de autores que tiene cada título en etiquetas
diferentes.

for $x in //book
return
<libros>
{$x/title}
<num_autores>{count($x/author)}</num_autores>
</libros>
15. Mostrar en la misma etiqueta el título y entre paréntesis el número de autores
que tiene ese título.

for $x in //book
return
<libros>{$x/title/data()}({count($x/author)})</libros>

16. Mostrar los libros escritos en años que terminen en "3".

for $x in //book
where ends-with($x/year,'3')
return $x
17. Mostrar los libros cuya categoría empiece por "C".

for $x in //book
where starts-with($x/@category,'C')
return $x

18. Mostrar los libros que tengan una "X" mayúscula o minúscula en el título.

for $x in //book
where contains(lower-case($x/title),'x')
return $x
19. Mostrar el título y el número de caracteres que tiene cada título, cada uno con
su propia etiqueta.

for $x in //book
return
<libro>
{$x/title}
<longitud>{string-length($x/title/data())}</longitud>
</libro>
20. Mostrar todos los años en los que se ha publicado un libro eliminando los
repetidos. Etiquétalos con "año".

for $x in distinct-values(//year)
return <año>{$x}</año>

21. Mostrar todos los autores eliminando los que se repiten y ordenados por el
número de caracteres que tiene cada autor.

for $x in distinct-values(//author)
order by string-length($x)
return $x

22. Mostrar los títulos en una tabla de HTML.

<table>
{
for $titulo in //title
return <tr>{$titulo/text()}</tr>
}
</table>

También podría gustarte