martes, 19 de agosto de 2014

Ejercicios Xquery1


<?xml version="1.0" encoding="ISO-8859-1"?>
<bib>
<libro anyo="1994">
<titulo>TCP/IP Illustrated</titulo>
<autor>
<apellido>Stevens</apellido>
<nombre>W.</nombre>
</autor>
<editorial>Addison-Wesley</editorial>
<precio>65.95</precio>
</libro>
<libro anyo="1992">
<titulo>Advanced Programming for Unix environment</titulo>
<autor>
<apellido>Stevens</apellido>
<nombre>W.</nombre>
</autor>
<editorial>Addison-Wesley</editorial>
<precio>65.95</precio>
</libro>
<libro anyo="2000">
<titulo>Data on the Web</titulo>
<autor>
<apellido>Abiteboul</apellido>
<nombre>Serge</nombre>
</autor>
<autor>
<apellido>Buneman</apellido>
<nombre>Peter</nombre>
</autor>
<autor>
<apellido>Suciu</apellido>
<nombre>Dan</nombre>
</autor>
<editorial>Morgan Kaufmann editorials</editorial>
<precio>39.95</precio>
</libro>
<libro anyo="1999">
<titulo> Economics of Technology for Digital TV</titulo>
<editor>
<apellido>Gerbarg</apellido>
<nombre>Darcy</nombre>
<afiliacion>CITI</afiliacion>
</editor>
<editorial>Kluwer Academic editorials</editorial>
<precio>129.95</precio>
</libro>
</bib>

1. Listar el título de todos los libros.

for $x in doc("c:\users\usuario\desktop\xquery1.xml")/bib/libro/titulo
return data($x)

for $x in doc("c:\users\usuario\desktop\xquery1.xml ")/bib/libro
return data($x/titulo)


<titulo>TCP/IP Illustrated</titulo>
<titulo>Advanced Programming for Unix environment</titulo>
<titulo>Data on the Web</titulo>
<titulo>Economics of Technology for Digital TV</titulo>


2. Listar año y título de todos los libros, ordenados por el año.
Primera solución

for $x in doc("c:\users\usuario\desktop\xquery1.xml")/bib/libro
order by $x/@anyo
return <libro> {$x/@anyo} {$x/titulo }</libro>


Segunda solución

<html>
<head/>
<body>
<h1>Año y titulo de los libros </h1>
<ul>
{
for $x in doc ("c:\users\usuario\desktop\xquery1.xml")/bib/libro
order by $x/@anyo
return
<li>
{data($x/titulo)} .Año{data($x/@anyo)}
</li>
}
</ul>
</body>
</html>
 
3. Listar los libros cuyo precio sea 65.95

for $x in doc("c:\users\usuario\desktop\xquery1.xml")/bib/libro
where $x/precio=65.95
return $x


<libro anyo="1994">
<titulo>TCP/IP Illustrated</titulo>
<autor>
<apellido>Stevens</apellido>
<nombre>W.</nombre>
</autor>
<editorial>Addison-Wesley</editorial>
<precio>65.95</precio>
</libro>
<libro anyo="1992">
<titulo>Advanced Programming for Unix environment</titulo>
<autor>
<apellido>Stevens</apellido>
<nombre>W.</nombre>
</autor>
<editorial>Addison-Wesley</editorial>
<precio>65.95</precio>
</libro>

4. Listar los libros publicados antes del año 2000

for $x in doc("c:\users\usuario\desktop\xquery1.xml")/bib/libro
where $x/@anyo<2000
return $x


<libro anyo="1994">
<titulo>TCP/IP Illustrated</titulo>
<autor>
<apellido>Stevens</apellido>
<nombre>W.</nombre>
</autor>
<editorial>Addison-Wesley</editorial>
<precio>65.95</precio>
</libro>
<libro anyo="1992">
<titulo>Advanced Programming for Unix environment</titulo>
<autor>
<apellido>Stevens</apellido>
<nombre>W.</nombre>
</autor>
<editorial>Addison-Wesley</editorial>
<precio>65.95</precio>
</libro>
<libro anyo="1999">
<titulo>Economics of Technology for Digital TV</titulo>
<editor>
<apellido>Gerbarg</apellido>
<nombre>Darcy</nombre>
<afiliacion>CITI</afiliacion>
</editor>
<editorial>Kluwer Academic editorials</editorial>
<precio>129.95</precio>
</libro>

5. Listar año y título de los libros publicados por Addison-Wesley después del año 1992.

for $x in doc("c:\users\usuario\desktop\xquery1.xml")/bib/libro
where $x/@anyo>1992 and $x/editorial=”Addison-Wesley”
return <libro> {$x/@anyo} {$x/titulo }</libro>


<libro anyo="1994">
<titulo>TCP/IP Illustrated</titulo>
</libro>

6. Listar año y título de los libros que tienen más de un autor.

for $x in doc("c:\users\usuario\desktop\xquery1.xml")/bib/libro
where $x/count (autor)>1
return <libro> {$x/@anyo} {$x/titulo }</libro>


<libro anyo="2000">
<titulo>Data on the Web</titulo>
</libro>


Otra forma:

for $x in doc("c:\users\usuario\desktop\xquery1.xml")/bib/libro
let $y := $x//autor
where count ($y)>1
return <libro> {$x/@anyo} {$x/titulo }</libro>

7. Listar año y título de los libros que no tienen autor.

for $x in doc("c:\users\usuario\desktop\xquery1.xml")/bib/libro
where empty($x/autor)
return <libro> {$x/@anyo} {$x/titulo }</libro>


<libro anyo="1999">
<titulo>Economics of Technology for Digital TV</titulo>
</libro>

8. Mostrar los apellidos de los autores que aparecen en el documento, sin repeticiones, ordenados alfabéticamente.

for $x in doc("c:\users\usuario\desktop\xquery1.xml")/bib/libro/autor
order by $x/apellido
return $x/apellido


<apellido>Abiteboul</apellido>
<apellido>Buneman</apellido>
<apellido>Stevens</apellido>
<apellido>Stevens</apellido>
<apellido>Suciu</apellido>

9. Por cada libro, listar agrupado en un elemento <result> su título y autores

let $result := doc("c:\users\usuario\desktop\xquery1.xml")/bib/libro/titulo |/bib/libro/autor
return

<result>
{
data($result)
}
</result>


<result>TCP/IP Illustrated StevensW. Advanced Programming for Unix environment StevensW. Data on the Web AbiteboulSerge Economics of Technology for Digital TV BunemanPeter SuciuDan</result>
10. Por cada libro, obtener su título y el número de autores, agrupados en un elemento <libro>
let $libro := doc("c:\users\usuario\desktop\xquery1.xml")/bib/libro/titulo |/bib/libro[count (autor)]
return
<libro>
{
data($libro)
}
</libro>


<libro>TCP/IP Illustrated TCP/IP IllustratedStevensW.Addison-Wesley65.95 Data on the WebAbiteboulSergeBunemanPeterSuciuDanMorgan Kaufmann editorials39.95 Advanced Programming for Unix environment Data on the Web Economics of Technology for Digital TV</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 título, 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>
<h1 align="center">Listado de libros</h1>
<center>
<table border ="1">
<tr>
<th>Titulo</th>
<th>Editorial</th>
<th>Precio</th>
</tr>
{
for $x in doc("c:\users\usuario\desktop\xquery1.xml")/bib/libro
order by $x
return
<tr>
<td>{data($x/titulo)}</td>
<td>{data($x/editorial)}</td>
<td>{data($x/precio)}</td>
</tr>
}
</table>
</center>
</body>
</html>

No hay comentarios:

Publicar un comentario