Consultas FLWOR

  • Upload
    alfredo

  • View
    3.602

  • Download
    3

Embed Size (px)

Citation preview

Ejercicio para recordar teora de Bases de Datos Antes de continuar con las consultas de XQuery, vamos a repasar un poco conceptos bsicos de bases de datos, a travs de un pequeo ejercicio usando XSL y CSS: Empezamos con una pgina HTML que contiene slo dos enlaces

El primer enlace nos lleva a la siguiente informacin: Modelado de la informacin

Los modelos de datos son un eficaz instrumento en el diseo de las bases de datos. Los niveles de abstraccin de la arquitectura ANSI facilitan el diseo de una base de datos, al proporcionar nuevos instrumentos que ayudan a la estructuracin, paso a paso, del mundo real, hasta llegar a la base de datos fsica

Modelos de datos

Un Modelo de Datos (MD) es un conjunto de conceptos que permiten describir, a distintos niveles de abstraccin, la estructura de una base de datos, a la cual denominamos esquema El modelo de datos(sea lgico o fsico) es el instrumento que se aplica a los datos para obtener un esquema. Las propiedades del MD son de dos tipos: 1. Estticas, relativamente invariantes en el tiempo, que responden a lo que se suele entender como estructuracompuesta a su vez en 1. Elementos permitidos 2. Elementos no permitidos o restricciones. Las restricciones impuestas por el modelo son restricciones inherentes y las que responden al deseo de que el sistema de informacin sea un reflejo lo ms fiel posible del mundo real son las restricciones de integridad o semnticas 2. Dinmicas. Son las operaciones que se aplican a los datos o valores almacenados en las estructuras, las cuales varan en el transcurso del tiempo al aplicrseles dichas operaciones

Modelos conceptuales, lgicos y fsicos 1. Modelo conceptual: Utilizados en la elaboracin del esquema conceptual, los cuales buscan optimizar los recursos de informacin de la organizacin en su conjunto

2. Modelo lgico: Utilizado para la construccin de los esquemas externos (de cada usuario en particular)Implementados en SGBD: Jerrquico, Codasyl, Relacional 3. Modelo fsico, que sirven para construir el esquema fsico o interno (eficiencia de los recursos informticos Formateada de la siguiente manera:

El otro enlace nos lleva a la siguiente informacin: 1. Modelo Entidad-Relacin. Los modelos de datos soportados por los SGBD no suelen ofrecer, dado su bajo nivel de abstraccin, los mecanismos suficientes para captar la semntica del mundo real, por lo que surgen modelos conceptuales, ms ricos semnticamente, que facilitan la labor del diseador ayudndole en su comunicacin con el usuario Entre estos modelos de datos semnticos, el modelo entidad-relacin, es el de ms amplia aceptacin y al que se le suele dar soporte en la mayora de las herramientas CASE 2. Presentacin e historia. El modelo Entidad-Relacin, tal como fue propuesto por Chen, no consideraba la parte dinmica, definiendo nicamente la parte estructural y semntica, as como la forma de representacin de los datos. Posteriormente, otros autores completan el modelo, proponiendo lenguajes de manipulacin como CLEAR o CABLE. De todos modos, al no estar soportado por los SGBD actuales, la parte dinmica del mismo carece de inters desde el punto de vista prctico 3. Elementos del modelo E/R

1. Entidad. Entidad es "una persona, lugar, cosa, concepto o suceso, real o abstracto, de inters para la empresa (ANSI,1977). Es aquel objeto acerca del cual queremos almacenar informacin en la base de datos Llamaremos tipo de entidad a la estructura genrica y ocurrencia de entidad a cada una de las realizaciones concretas de ese tipo de entidad. La representacin grfica de un tipo de entidad es un rectngulo etiuetado con el nombre del tipo de entidad. Existen entidades Regulares y Dbiles. La existencia de estas ltimas dependen de la ocurrencia del tipo de entidad regular del cual depende Por ejemplo, ejemplar de libro. Se representa con un rectngulo doble 2. Relacin o Interrelacin. Asociacin o correspondencia entre entidades. Se representa como un rombo etiquetado con el nombre de la interrelacin. Sus caractersticas son: 1. Nombre, por el que identificamos d eforma nica el tipo de interrelacin 2. Grado, nmero de tipos de entidad que participan en un tipo de relacin Grado dos: Binarias, De grado 3, terciarias 3. Tipo de correspondencia. Nmero mximo de ocurrencias de un tipo de entidad que pueden intervenir por cada ocurrencia del otro tipo de entidad asociado en la relacin 3. Atributos. Es cada una d elas caractersticas que tiene un tipo de entidad o de relacin. El conjunto de posibles valores que puede tomar un atributo recibe el nombre de dominio. El dominio tiene un nombre y una existencia propia con independencia de cualquier entidad o atributo. El atributo identificador principal se representa con un crculo negro. El resto con crculos en blanco 4. Restricciones. Las restricciones pueden limitar los tipos de estructuras que es posible representar mediante un cierto modelo de datos(restricciones inherentes) o bien permiten restringir los valores que pueden tomar ciertos atributos o imponen limitaciones al tipo de correspondencia u otras caractersticas de las relaciones (restricciones semnticas o de comportamiento) 4. Semntica de las interrelaciones. 1. Cardinalidades de un tipo de entidad. Las cardinalidades mxima y mnima de los tipos de entidad participantes en un tipo de relacin como el nmeor mximo y mnimo de ocurrencias de un tipo de entidad que pueden estar relacionadas con una ocurrencia del otro u otros tipos de entidad que participan en el tipo de relacin. Su representacin grfica es una etiqueta del tipo (0,1), (1,1), (0,n), o (1,n) 2. Dependencia en existencia y en identificacin. Se dice que una dependencia en existencia cuando en una relacin est vinculado un tipo de entidad regular con uno dbil, de

forma que las ocurrencias dle tipo de entidad dependiente (tipo de entidad dbil) no pueden existir sin la existencia de la entidad regulr de la que dependen. Hay una dependencia en identificacin cuando, adems de la dependencia en existencia, las ocurrencias d el entidad dbil no se pueden identificar slo mediante sus propios atributos, sino que se tiene que aadir la clave de la ocurrencia de la entidad regular de la cual dependen 5. Generalizacin y herencia. La generalizacin es el tipo de relacin que existe entre un tipo de entidad y los tipos de entidad ms especficos que dependen de l. En el mundo real es mu habitual la descomposicin de un tipo de entidad, crendose de esta forma una jerarqua. La abstraccin correspondiente a un supertipo del que dependen varios subtipos se denomina " ESUN". una de las caractersticas ms importantes de la jerarqua es la herencia, por cual los atributos de un supertipo son heredados por los subtipos 6. Bibliografa Fundamentos y Modelos de Bases de Datos de Adoracin de Miguel y Mario Piattini Formateada de la siguiente manera:

En estas dos pginas web se describen los elementos del modelo Entidad-Relacin. De todas formas, el sitio es muy esquemtico y querramos mejorarlo por ejemplo, incluyendo lo que es una relacin reflexiva, una relacin ISA, o explicando los conceptos de cardinalidad mxima y mnima As mismo, podra ser interesante realizar dos enlaces ms en la pgina de inicio, uno que lleve a una pgina explicando un ejemplo concreto de modelo Entidad-Relacin, y otra que explique las reglas del paso a tablas desde ese mismo modelo anterior.

El ltimo enlace ser uno que nos lleve a una pgina que explique el paso del modelo relacional al modelo jerrquico especificado en un documento XML.. Realizar un documento XML vlido con el DTD resultante y mostrar el resultado de la validacin en la pgina. Fin del ejercicio De FLWOR a HTML Queremos crear una consulta XQuery que tras ejecutarla nos devuelva los resultados en formato HTML. Podemos unir dentro de XQuery etiquetas HTML y expresiones o clausulas FLWOR. La nica limitacin es que cuando se fusionan en una consulta, indiquemos al motor de consultas qu parte es la que tiene que procesar como consulta. Para ello indicaremos entre llaves ({,}) que parte es FWLOR. La mejor manera es verlo a travs de ejemplos realizados con XQuery Ejemplo 1 Queremos una consulta XQuery cuyo resultado sea una tabla HTML que nos muestre el nombre del baile, el profesor que lo imparte y el nmero de plazas ofertadas Bailes ofertados Nombre baile Nombre Profesor Plazas ofertadas { for $baile in doc("Bailes")//Bailes/baile let $nombre:=$baile/nombre let $profesor :=$baile/profesor let $plazas :=$baile/plazas return {data($nombre)} {data($profesor)} {data($plazas)} }

Tal y como se aprecia en la imagen anterior, el resultado es: Bailes ofertados Nombre baile Nombre Profesor Plazas ofertadas Tango Roberto Garcia

20 Cha-cha-cha Miriam Gutirrez 18 Rock Laura Mendiola 15 Merengue Jesus Lozano 12 Salsa Jesus Lozano 10 Pasodoble Miriam Gutierrez 8 Este resultado es cdigo HTML, si hacemos clic en el botn de guardar que acompaa su recuadro podemos guardarlo con el formato HTML y despus lo abriremos con un navegador a ver si ha realizado bien su trabajo:

Una vez realizado esto, vamos a la carpeta en la que hemos guardado nuestro documento Bailes.html y le abrimos con un navegador, por ejemplo, el Mozilla Firefox El resultado es el siguiente:

Ejemplo 2. Ahora queremos realizar la misma consulta anterior pero estableciendo la condicin de ser bailes con cuota trimestral. Adems se ordenar, de menor a mayor, los bailes segn el nmero de plazas disponible. La consulta XQuery es exactamente igual que antes pero cambiando nicamente la parte FLWOR Bailes ofertados Nombre baile Nombre Profesor Plazas ofertadas { for $baile in doc("Bailes")//Bailes/baile let $nombre:=$baile/nombre let $profesor :=$baile/profesor let $plazas :=$baile/plazas where $baile/precio[@cuota = "trimestral"] order by $baile/plazas return {data($nombre)} {data($profesor)} {data($plazas)} }

El resultado es: Bailes ofertados Nombre baile Nombre Profesor Plazas ofertadas Merengue Jesus Lozano 12 Cha-cha-cha Miriam Gutirrez 18 Mediante el mismo proceso anterior, guardndolo como Bailes2.html, y abrindolo con el navegador Firefox, -o cualquier otro navegadortenemos:

Insercin Se quiere aadir un nuevo baile en la base de datos. Los datos son - Nombre: foxtrot - Precio: 22 dlares - Pago: mensual - Plazas: 12 - Comienzo: 01/01/2012 - Fin:31/07/2012

-

Profesor: Freddy Astaire Sala 3

La insercin se realiza de la siguiente manera: insert node Foxtrot 22 12 01/01/2012 31/07/2012 Freddy Astaire 3 before doc("Bailes.xml")//Bailes/baile[1] Tras ejecutarlo con el botn verde que hay debajo del editor, el resultado sera:

Este cdigo inserta el nodo indicado en la base de datos Bailes.xml. El nodo se insertar antes del primer nodo de la base de datos (por la

clausula befote ). Si se quiere insertar despus, slo cambiara before por after . Ambas utilizan como referencia al primer nodo ([1]) Una sentencia equivalente para insertar al principio de la base de datos, sin tener que referenciar a nodo alguno de la base de datos, sera sustituyendo la ltima lnea por esta otra: as first into doc(Bailes.xml)//Bailes Si por el contrario, lo que se desea es insertar al final de la base de datos, sin referenciar a ningn nodo, se realizara de la siguiente manera as las tinto doc(bailes.xml)//Bailes Reemplazo / Actualizacin En la insercin anterior se cometieron dos errores: 1. El nombre correcto era Angel Correllada 2. El nmero de plazas realmente eran 14 Si en la insercin anterior se realiz antes del primer nodo de la base de datos, entonces el elemento insertado ser ahora el primero. Se cambiarn esos datos de dos maneras distintas. - Mediante la modificacin del valor del nodo - Mediante el reemplazo del nodo completo La modificacin se realizara de la siguiente manera: replace value of node doc("Bailes.xml")//Bailes/baile[1]/profesor with "Angel Correlada" Cuyo resultado, tras ejecutar, es el siguiente:

Ahora vamos a reemplazar el nmero de plazas, pero vamos a reemplazar el elemento entero, no solo el valor del nodo replace node doc("Bailes.xml")//Bailes/baile[1]/plazas 14 Cuya salida es la siguiente: with

Las dos modificaciones pueden realizarse a la vez separndolas por una coma ,. En el caso de no saber en qu posicin de la base de datos se ha realizado la insercin, se podra tener un problema de actualizar errneamente la tupla incorrecta. Para eveitar este problema, lo ms comn es realizar la modificacin mediante la utilizacin del identificador del baile (En este caso id=7) replace value of node doc(Bailes.xml)//Bailes/baile[@id=7]/profesor with Angel Correlada , Replace node

Doc(Bailes.xml//Bailes/baile[@id=7]/plazas with 14 Borrado: delete node doc("Bailes.xml")//Bailes/baile[@id=7]

El resultado, tras hacer clic en el botn verde es:

Ejercicios: A partir del siguiente documento Libros.xml

]> 1 Don Quijote de la Mancha Juan de la Cuesta 3 9788466745840 1 Miguel de Cervantes Saavedra 19/09/1547 Espaola Se pide: Cargarlo en la base de datos, tal y como aparece en la siguiente imagen:

Introducir unos nueve nodos ms, cada uno de los siguientes al final de la base de datos, tratando de automatizarlo lo ms posible.

Solucin para la insercin de otro nodo:

insert node 2 La celestina Maxtor 1 9788471664938 320 2 Fernando de Rojas /01/01/1470 Espaola as last into doc ("Libros.xml")//Libros Antes se me ha olvidado incluir el nmero de pginas en el primer nodo, tratamos de resolverlo ahora: insert node 176 into doc ("Libros.xml")//Libros/libro[1] El resultado final debe ser el siguiente: 1 Don Quijote de la Mancha Juan de la Cuesta 3 9788466745840 1 Miguel de Cervantes Saavedra 19/09/1547 Espaola 176 2

La celestina Maxtor 1 9788471664938 320 2 Fernando de Rojas /01/01/1470 Espaola 3 La brujula interior Urano 1 978849587910 174 3 Alex Rovira Celma 01/03/1969/ Espaola 4 Polvo eres II: Muertes estelares de la humanidad La esfera de los libros 1 9788499700403 412 4 Nieves Concostrina 01/03/1961/ Espaola

5 La huella de un beso Punto de lectura 1 9788466324809 272 5 Daniel Glattauer 02/04/1960/ Austriaca 6 La escuela de ingredientes esenciales Suma 1 9788483651469 400 6 Erica Bauermeister 25/05/1959 Estadounidense 7 Las viudas de Eastwick Tusquets Editores 1 9788483833209 400 7 John Updike 28/7/1932 Estadounidense

8 La cpula Plaza & Jans Editores 1 9788401337529 1136 8 Stephen King 21/09/1947 Estadounidense 9 En mares salvajes: Un viaje al rtico Plaza & Jans Editores 1 9788401347542 448 9 Javier Reverte 01/01/1944 Espaola 10 Las recetas de Dukan RBA Libros 1 9788492981380 448 10 Pierre Dukan 02/09/1934 Francesa

Sobre este documento: Realizar una consulta XQuery con expresiones FLWOR que muestre todos los libros almacenados: for $libro in doc("Libros.xml")//Libros/libro return $libro Realizar una consulta XQuery con expresiones FLWOR que muestre todos los libros almacenados con ms de 500 pginas for $libro in $libro/NumPaginas>500 return $libro El resultado es el siguiente: doc("Libros.xml")//Libros/libro where

Realizar una consulta XQuery con expresiones FLWOR cuyo resultado sea una tabla HTML con todos los libros de la biblioteca Libros en la biblioteca

Cdigo libro Ttulo Editorial Edicin ISBN Nmero Pginas Autor

{for $libro in doc("Libros.xml")//Libros/libro let $cod_libro :=$libro/Cod_Libro let $titulo := $libro/Titulo let $editorial := $libro/Editorial let $edicion := $libro/Edicion let $isbn := $libro/ISBN let $num_paginas := $libro/NumPaginas let $autores := $libro/Autores return {data($cod_libro)} {data($titulo)} {data($editorial)} {data($edicion)} {data($isbn)} {data($num_paginas)} {for $autor in $autores//autor return
{data($autor/Nombre)}
{data($autor/Apellidos)}
{data($autor/FechaNacimiento)}
{data($autor/Nacionalidad)}
} } Cuyo resultado es 500 return {data($cod_libro)} {data($titulo)} {data($editorial)} {data($edicion)} {data($isbn)} {data($num_paginas)} {for $autor in $autores//autor return
{data($autor/Nombre)}
{data($autor/Apellidos)}
{data($autor/FechaNacimiento)}
{data($autor/Nacionalidad)}
} } Que nos da como resultado:

Realizar una insercin de un nuevo libro con XQuery (con algn dato errneo) Consideramos lo siguiente insert node 11 XXI S.A Ediciones B 1 9788466647410 216 11 Francisco Miguel Espinosa 08/11/1990 Espaola as last into doc ("Libros.xml")//Libros Produce el siguiente resultado:

Realizar una modificacin del libro anterior corrigiendo algn dato considerado como errneo Consideramos que no es la primera edicin sino la tercera: replace value of node doc("Libros.xml")//Libros/libro[Cod_Libro=11]/Edicion with "3", que produce como resultado:

Realizar el borrado del ltimo libro insertado en la base de datos de XQuery delete node doc(Libros.xml)//Libros/libro[Cod_Libro=11] cuyo resultado final es el siguiente:

Saludos, Alfredo