Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Ejercicios XQuery II - Con Solucion
Ejercicios XQuery II - Con Solucion
<total>4</total>
j. Mostrar los títulos de los libros y al final una etiqueta con el número total de libros.
let $total := count (doc(libros.xml)/bookstore/book),
$titulos := (
for $libro in doc(libros.xml)/bookstore/book/title
return <titulo>{$libro/text()}</titulo>)
return
<resultado>
{$titulos}
<total_libros>{$total}</total_libros>
</resultado>
<resultado>
<titulo>Everyday Italian</titulo>
<titulo>Harry Potter</titulo>
<titulo>XQuery Kick Start</titulo>
<titulo>Learning XML</titulo>
<total_libros>4</total_libros>
</resultado>
<resultado>
<max>49.99</max>
<min>29.99</min>
</resultado>
l. 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.
for $libro in doc(libros.xml)/bookstore/book
let $precio_iva := ($libro/price * 1.21)
order by $precio_iva
return
<libro>
<titulo>{$libro/title/text()}</titulo>
<precio>{$libro/price/text()} €</precio>
<precio_iva>{$precio_iva} €</precio_iva>
</libro>
<libro>
<titulo>Harry Potter</titulo>
<precio>29.99</precio>
<precio_IVA>36.2879</precio_IVA>
</libro>
<libro>
<titulo>Everyday Italian</titulo>
<precio>30.00</precio>
<precio_IVA>36.3</precio_IVA>
</libro>
<libro>
<titulo>Learning XML</titulo>
<precio>39.95</precio>
<precio_IVA>48.3395</precio_IVA>
</libro>
<libro>
<titulo>XQuery Kick Start</titulo>
<precio>49.99</precio>
<precio_IVA>60.4879</precio_IVA>
</libro>
m. Mostrar la suma total de los precios de los libros con la etiqueta "total".
let $libros := doc(libros.xml)/bookstore/book
return <total>{sum($libros/price)}</total>
<total>149.93</total>
n. Mostrar cada uno de los precios de los libros, y al final una nueva etiqueta con la
suma de los precios.
<libros>
{
for $libro in doc(libros.xml)/bookstore/book
return $libro/price
}
{
let $libros := doc(libros.xml)/bookstore/book
return <total>{sum($libros/price)}</total>
}
</libros>
<libros>
<price>30.00</price>
<price>29.99</price>
<price>49.99</price>
<price>39.95</price>
<total>149.93</total>
</libros>
o. Mostrar el título y el número de autores que tiene cada título en etiquetas diferentes.
for $libro in doc(libros.xml)/bookstore/book
return
<libro>
{$libro/title}
<autores>{count($libro/author)}</autores>
</libro>
<libro>
<titulo>Everyday Italian</titulo>
<num_autores>1</num_autores>
</libro>
<libro>
<titulo>Harry Potter</titulo>
<num_autores>1</num_autores>
</libro>
<libro>
<titulo>XQuery Kick Start</titulo>
<num_autores>5</num_autores>
</libro>
<libro>
<titulo>Learning XML</titulo>
<num_autores>1</num_autores>
</libro>
p. Mostrar en la misma etiqueta el título y entre paréntesis el número de autores que
tiene ese título.
for $libro in doc(libros.xml)/bookstore/book
return <libro>{$libro/title/text()} ({count($libro/author)})</libro>
<libro>
<titulo>Everyday Italian (1)</titulo>
</libro>
<libro>
<titulo>Harry Potter (1)</titulo>
</libro>
<libro>
<titulo>XQuery Kick Start (5)</titulo>
</libro>
<libro>
<titulo>Learning XML (1)</titulo>
</libro>
<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>
s. Mostrar los libros que tengan una "X" mayúscula o minúscula en el título ordenados
de manera descendente.
for $libro in doc(libros.xml)/bookstore/book
where contains($libro/title, "x") or contains($libro/title, "X")
order by $libro/title descending
return $libro
<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>
t. Mostrar el título y el número de caracteres que tiene cada título, cada uno con su
propia etiqueta.
for $libro in doc(libros.xml)/bookstore/book
return
<libro>
{$libro/title}
<length>{string-length($libro/title)}</length>
</libro>
<libro>
<titulo>Everyday Italian</titulo>
<num_caracteres>16</num_caracteres>
</libro>
<libro>
<titulo>Harry Potter</titulo>
<num_caracteres>12</num_caracteres>
</libro>
<libro>
<titulo>XQuery Kick Start</titulo>
<num_caracteres>17</num_caracteres>
</libro>
<libro>
<titulo>Learning XML</titulo>
<num_caracteres>12</num_caracteres>
</libro>
u. Mostrar todos los años en los que se ha publicado un libro eliminando los repetidos.
Etiquétalos con "año".
for $año in distinct-values(doc(libros.xml)/bookstore/book/year)
return <año>{$año}</año>
<año>2005</año>
<año>2003</año>
v. Mostrar todos los autores eliminando los que se repiten y ordenados por el número
de caracteres que tiene cada autor.
for $autor in distinct-values(doc(libros.xml)/bookstore/book/author)
order by string-length($autor)
return <autor>{$autor}</autor>
<autor>Kurt Cagle</autor>
<autor>James Linn</autor>
<autor>Per Bothner</autor>
<autor>Erik T. Ray</autor>
<autor>J K. Rowling</autor>
<autor>James McGovern</autor>
<autor>Giada De Laurentiis</autor>
<autor>Vaidyanathan Nagarajan</autor>
<profesor>
<nombre>Jesus Lozano</nombre>
<sala>2</sala>
<sala>2</sala>
</profesor>
<profesor>
<nombre>Laura Mendiola</nombre>
<sala>1</sala>
</profesor>
<profesor>
<nombre>Miriam Gutierrez</nombre>
<sala>1</sala>
<sala>1</sala>
</profesor>
<profesor>
<nombre>Roberto Garcia</nombre>
<sala>1</sala>
</profesor>
<media>94</media>
<suma>457</suma>
i. Mostrar todos los datos de cada baile excepto la fecha de comienzo y de fin.
for $baile in doc(bailes.xml)/bailes/baile
return <baile>{$baile/* except $baile/comienzo except $baile/fin}</baile>
<baile>
<nombre>Tango</nombre>
<precio cuota="mensual" moneda="euro">27</precio>
<plazas>20</plazas>
<profesor>Roberto Garcia</profesor>
<sala>1</sala>
</baile>
<baile>
<nombre>Cha-cha-cha</nombre>
<precio cuota="trimestral" moneda="euro">80</precio>
<plazas>18</plazas>
<profesor>Miriam Gutierrez</profesor>
<sala>1</sala>
</baile>
<baile>
<nombre>Rock</nombre>
<precio cuota="mensual" moneda="euro">30</precio>
<plazas>15</plazas>
<profesor>Laura Mendiola</profesor>
<sala>1</sala>
</baile>
<baile>
<nombre>Merengue</nombre>
<precio cuota="trimestral" moneda="dolares">75</precio>
<plazas>12</plazas>
<profesor>Jesus Lozano</profesor>
<sala>2</sala>
</baile>
<baile>
<nombre>Salsa</nombre>
<precio cuota="mensual" moneda="euro">32</precio>
<plazas>10</plazas>
<profesor>Jesus Lozano</profesor>
<sala>2</sala>
</baile>
<baile>
<nombre>Pasodoble</nombre>
<precio cuota="anual" moneda="euro">320</precio>
<plazas>8</plazas>
<profesor>Miriam Gutierrez</profesor>
<sala>1</sala>
</baile>
j. Mostrar el nombre del baile, su precio y el precio con un descuento del 15% para
familias numerosas. Ordenar por el nombre del baile
for $baile in doc(bailes.xml)/bailes/baile
order by $baile/nombre
return
<baile>
{$baile/nombre}
<precio>{$baile/precio/text()}</precio>
<fam_numerosa>{$baile/precio * 0.85}</fam_numerosa>
</baile>
<baile>
<nombre>Cha-cha-cha</nombre>
<precio>80</precio>
<precio_familia_numerosa>68</precio_familia_numerosa>
</baile>
<baile>
<nombre>Merengue</nombre>
<precio>75</precio>
<precio_familia_numerosa>63.75</precio_familia_numerosa>
</baile>
<baile>
<nombre>Pasodoble</nombre>
<precio>320</precio>
<precio_familia_numerosa>272</precio_familia_numerosa>
</baile>
<baile>
<nombre>Rock</nombre>
<precio>30</precio>
<precio_familia_numerosa>25.5</precio_familia_numerosa>
</baile>
<baile>
<nombre>Salsa</nombre>
<precio>32</precio>
<precio_familia_numerosa>27.2</precio_familia_numerosa>
</baile>
<baile>
<nombre>Tango</nombre>
<precio>27</precio>
<precio_familia_numerosa>22.95</precio_familia_numerosa>
</baile>
<beneficio>450</beneficio>