109
UNIDAD 6 ALMACENAMIENTO DE LA INFORMACIÓN

manual xquery

Embed Size (px)

DESCRIPTION

presentacion manual xquery

Citation preview

  • UNIDAD 6ALMACENAMIENTO DE LA INFORMACIN

  • ndiceINTRODUCCIN.SISTEMAS DE ALMACENAMIENTO DE LA INFORMACIN.UTILIZACIN DE XML PARA EL ALMACENAMIENTO DE LA INFORMACIN.LENGUAJES DE CONSULTA Y MANIPULACIN.XQUERY.CONSULTAS.ACTUALIZACIN.EXPRESIONES CONDICIONALES.CUANTIFICADORES EXISTENCIALES.OPERADORES Y FUNCIONES PRINCIPALES.EXPORTACIN DE LIBRERAS XML.OTRAS FUNCIONES O LIBRERIAS.CASO PRCTICO.EJERCICIOS PROPUESTOS.

  • 1. INTRODUCCINEric Schmidt, CEO de Google hasta enero del 2011, realiz la siguiente afirmacin en la conferencia de Lake Tahoe en California (EE.UU.):"Cada dos das creamos tanta informacin como la que se gener desde los albores de la humanidad hasta el 2003".

    An cometiendo algn error numrico en la estimacin de Schmidt, parece claro que de manera constante y diaria producimos ingentes cantidades de informacin que debemos almacenar y procesar. Esta afirmacin es tremendamente reveladora en la era de la informacin en la que vivimos, pero:Cmo es posible que podamos generar toda esa informacin en tan poco tiempo?Cmo es posible que adems podamos almacenarla?

  • Un ejemplo de generacin masiva de informacin puede ser el acelerador de partculas llamado Gran Colisionador de Hadrones. ste se encuentra ubicado en la Organizacin Europea para la Investigacin Nuclear (CERN) de Ginebra-Suiza. La red Fsica-Matemtica-Informtica que se ha desplegado permitir capturar caractersticas, velocidades y trayectorias de las partculas subatmicas que se conocen e incluso descubrir nuevas partculas. Para ello han desarrollado un sistema llamado Grid-Computing en el que se manejarn la enorme cantidad de datos producidos por el acelerador. Estiman que generarn en torno a 40 Terabytes de datos por da, envindose copias de los datos a todas las instituciones acadmicas de ndole mundial que trabajan en el proyecto. Llegan a afirmar que ellos solos podrn generar 15 petabytes al ao (y el tamao sigue creciendo).

    Sin duda las novedades que se presentan en los congresos tecnolgicos sobre las tecnologas de la informacin, almacenamiento y procesamiento hacen pensar que no solo podemos generar y almacenar la informacin, sino tambin tratarla y realizar operaciones con ella. Pero debe existir alguna manera de seleccionar, catalogar, ordenar la informacin relevante y desechar aquella que est duplicada o sea superflua, sin que el rendimiento en el acceso penalice los tiempos. Ese sistema se llama Sistema de Gestin de Bases de Datos (SGBD).

  • ACTIVIDADES 6.1

    1. Un Kilobit son 210 bits. Un Megabit son 220 bits. Un Gigabit son 230 bits. Qu nombres tienen las siguientes capacidades?a. 240 bits Terabyte b. 250 bits Petabytec. 260 bits ExabytePara obtener ms informacin, vea la pgina http://es.wikipedia.org/wiki/Petabyte.

    2. Buscar por Internet cuanta informacin est actualmente almacenada en los servidores de Google. y en los servidores de Facebook/Tuenti?3. Qu es un problema de Fermi? Buscar por Internet dos ejemplos en los que se utilice esta metodologa.Para obtener ms informacin, vea la pgina http://es.wikipedia.org/wiki/Problema_de_Fermi.

    4. Cmo puede ayudar una estimacin de Fermi para almacenar datos en un SGBD?5. Estimar, con el mtodo de Fermi, qu tamao de base de datos deberamos tener para almacenar en imgenes toda la vida de una persona en Espaa.

  • 2. SISTEMAS DE ALMACENAMIENTO DE LA INFORMACINUna Base de Datos (BD) es una herramienta que permite organizar los datos que tienen algn tipo de relacin entre s, de manera que son almacenados y utilizados a travs de un interfaz de comunicacin que facilita su gestin dentro de una entidad u organizacin. Existen muchas maneras de clasificar los distintos tipos de bases de datos pero podemos resumirlo segn la variabilidad de los datos que se almacenen en ellas:

    Datos estticos: Datos que nunca cambiaran en el tiempo (solo lectura).Datos dinmicos: Datos que pueden modificarse de cualquier manera, a lo largo del tiempo.

    Salvo contadas excepciones (datos histricos, estadsticas, anlisis clnicos que nunca cambiarn desde que se tomaron), las bases de datos que se utilizan hoy en da son dinmicas. Las bases de datos estticas suelen utilizarse cuando se requiere un alto rendimiento en las consultas, quedando muy penalizadas si tuviera que actualizarse algn dato posteriormente.

  • Los datos que se almacenan en ellas, deben seguir un modelo lgico adecuado para cumplir su funcin de manera eficiente. Es decir, de alguna manera hay que indicar a la base de datos qu cosas quiere almacenar, enviando una descripcin de los datos de inters. Solo as ser posible tener un modelo de datos adecuado al problema que se quiera dar solucin. Dependiendo de cmo se haya hecho esta descripcin de los datos, as cambiarn los procedimientos de acceso, almacenaje y recuperacin de los contenidos. Por tanto, dependiendo del modelo de datos utilizado podemosdistinguir:

    BD Jerrquica: Utilizan rboles para almacenar la informacin (nodo raz, nodos padre/hijos, nodos hoja), de manera que la extraccin de los datos se realiza mediante un recorrido del rbol y eligiendo la rama por la que debe continuar su bsqueda. Este tipo de estructuras son muy eficientes en las bsquedas pero no pueden reflejar eficientemente la redundancia de datos.

  • BD de Red: Muy parecida a las jerrquicas pero donde un nodo puede tener varios padres simultneamente (en contraposicin de las bases de datos jerrquicas).

    BD Relacional: Es una base de datos que permite resolver el problema que tenan las bases de datos jerrquicas (las redundancias). Mientras que las jerrquicas la posicin del dato en el rbol era importante, en las relacionales es irrelevante. Un conjunto de datos compacto y con sentido propio se almacena en algo llamado tupla. Una tupla no es ms que una fila de una tabla en la que se almacena dicha informacin compacta. El conjunto de tuplas con informacin semntica igual determina una tabla. Y un conjunto de tablas pueden ser relacionadas con otras tablas (o tuplas), mediante tablas intermedias que reflejan las relaciones entre cada unade ellas. Esto es lo que soluciona la redundancia de informacin y son las ms utilizadas actualmente.

  • BD Transaccional: Utilizan el concepto de transaccin (que veremos ms adelante) que permite asegurar una serie de caractersticas importantes en los sistemas informticos de hoy en da. Estas caractersticas se incluyeron en la mayora de las bases de datos relacionales de hoy en da.

    BD Multidimensional: A efectos sera una base de datos Relacional en el que en vez de tener tablas (2D), tendramos estructuras con N dimensiones para almacenar la informacin (cubos si fuese 3D).

    BD Orientadas a Objetos: Difiere de las bases de datos relacionales en que no se almacena la informacin por tuplas sino por objetos que contienen la informacin y los mtodos que son necesarios para tratarlas. Es llevar la programacin orientada a objetos al mundo de las bases de datos generando caractersticas como la herencia, la encapsulacin o el polimorfismo.

  • Como puede observarse, dependiendo del modelo de datos que se quiera almacenar, se deber utilizar una base de datos u otra.Independientemente del modelo usado, cuando se tiene un gran conjunto de bases de datos, lo comn es utilizar un Sistema de Gestin de Bases de Datos o SGBD, que unifiquen las bases de datos entre s y se mejoren los flujos de distribucin de la informacin en diferentes entornos y/o formatos.Bsicamente se deja de utilizar los almacenes de informacin de las aplicaciones (los ficheros) para utilizar un interfaz de comunicacin nico (el SGBD y una BD concreta). Su utilizacin permite:Evitar la redundancia de datos que puede producirse por la duplicacin de los mismos ficheros de datos utilizados en distintas aplicaciones y/o ubicaciones.Permiten la abstraccin de los datos independientemente del sistema hardware/software utilizado y del soporte utilizado para su almacenamiento.Evitar la inconsistencia de los datos cuando diferentes programas intentan actualizar un dato que es compartido.

  • Evitar que el cambio o adicin de nueva informacin no planeada en el anlisis inicial del sistema obligue a la adaptacin de todos los programas informticos que utilizan esos ficheros.Evitar que la mala programacin en el acceso/modificacin/borrado de los datos en un fichero genere problemas de seguridad. Tener una capa de aplicacin y una capa de datos distinta facilita la depuracin y la trazabilidadde los programas.

    La abstraccin, independencia, consistencia, seguridad y accesibilidad son los objetivos que se buscan en estos sistemas. Adems su funcionamiento suele ser muy simple. Se puede resumir en un comentario muy acertado de D. ngel Garca Moreno, catedrtico de la Universidad Politcnica de Madrid y profesor de la asignatura de Bases de Datos en la Ingeniera Informtica:

    "Mientras que con los mtodos clsicos se acceda a la informacin a travs de ficheros y los datos paseaban por los programas; en los SGBD son los programas los que se dan una vuelta por las Bases de Datos para conseguir lo que necesitan".

  • Estos beneficios hacen que la prctica totalidad de los sistemas que quieran almacenar informacin recurran a un sistema de bases de datos acorde a sus necesidades, garantizando:Gestionar la redundancia para evitarla o al menos limitarla.Mantener los datos separados de las aplicaciones que lo usan.Localizar los datos en una ubicacin desde la cual, las aplicaciones puedan acceder de manera distribuida, concurrente y asegurando la integridad de los mismos.Permite realizar una correcta poltica de copias de seguridad, ya que ya no es necesario ir copiando los ficheros en distintas ubicaciones.

    En un SGBD no todo son ventajas. Existen una serie de inconvenientes que es necesario resaltar para tomar en el futuro una decisin adecuada. Como inconvenientes se pueden enumerar los siguientes:Un SGBD no es fcilmente administrable. Requiere de personal especializado en administracin de sistemas y lenguajes de consultas contra las bases de datos. Una buena administracin de los sistemas y de las bases de datos puede salvar la continuidad del negocio.

  • Si los datos son simples y no requiere de acceso concurrente de usuarios o aplicaciones, puede ser sustituido por un simple fichero, como por ejemplo un archivo binario o un fichero XML.No es sencillo formar al personal que trabaja con los datos almacenados en un SGBD si no tiene un perfil orientado hacia la informtica. El personal de nminas de una empresa, por ejemplo, no tiene porqu aprender un lenguaje de programacin de consultas. Requerir que el sistema le proporcione una interfaz de comunicacin tipo formulario de consultas que oculte la complejidad del sistema.Poner en funcionamiento un SGBD requiere de un coste inicial en hardware y software que puede no ser necesario para las necesidades normales de un entorno pequeo.

    Siempre habr que realizar un anlisis de los beneficios y los inconvenientes que aportan la integracin de estos SGBD en un entorno de trabajo concreto.

  • Un requisito que hasta el momento no se ha nombrado y que por exigencias del mercado se ha aadido en los SGBD modernos es el soporte transaccional. Una transaccin es un conjunto de rdenes en secuencia que, en su conjunto, determina un trabajo completo. El trabajo es completo si y solo si se cumplen todas y cada una de sus operaciones en el orden dado. Tras la ejecucin de una transaccin solo existen dos resultados posibles:Finalizada con xito.No completada (y asegura que no se ha cambiado nada).

    Veamos un ejemplo de cmo de importante es una transaccin. Supongamos que un usuario quiere sacar dinero de un cajero automtico. La transaccin es "sacar dinero". Para ello se siguen una serie de pasos secuenciales que permiten realizar la transaccin con xito:1. Validacin del usuario (insercin del PIN).2. Seleccin del importe a sacar.3. Anotacin en la cuenta bancaria del reintegro.4. Expedir tique y el dinero solicitado al usuario.

  • Si est en el paso nmero 3 y despus hubiera un corte en el suministro elctrico, el usuario tendra anotada en su cuenta bancaria un reintegro que nunca ha sido entregado al usuario (paso 4). Obviamente el usuario se enfadara y reclamara.

    Una transaccin, si es ejecutada de manera exitosa, asegura que los pasos del 1 al 4 se han seguido en ese orden y que todo ha salido bien. Si la transaccin no ha sido exitosa, asegura que ni el dinero ha salido por el cajero, ni que tampoco se ha anotado el reintegro en la cuenta bancario del usuario (incluso aunque haya habido un corte en el flujo elctrico y estuviese la transaccin en el paso 3). Es decir, al no ser exitosa la transaccin es como si nunca hubiese pasado.

  • Esto que, explicado con un ejemplo es tan simple, su nombre tcnico en un SGBD se denomina caractersticas ACID, acrnimo de:

    Atomicidad (Atomicity): Es la propiedad que asegura que una transaccin no se ha quedado a medias. O se ha ejecutado completamente o ninguna de las acciones intermedias ha sido llevada a cabo en la base de datos.

    Consistencia (Consistency): Una vez se ha determinado que la transaccin ha sido exitosa, debe quedar reflejados sus resultados en la base de datos dejando totalmente consistente e integra la base de datos.

    Aislamiento (lsolation): Una transaccin no puede afectar a otra en el transcurso de su ejecucin. Esto implica que dos transacciones que trabajen sobre el mismo conjunto de informacin no puede generar informacin inconsistente o error alguno en el sistema.

    Durabilidad (Durability): Una vez realizada la transaccin, sus resultados permanecern inalterables, independientemente de si surgen problemas en el sistema. Esto no quiere decir que una transaccin posterior no pueda modificar los datos anteriormente modificados (s podra pero no de manera concurrente con otra transaccin).

  • Hasta el momento no se ha hablado de cmo est definido un SGBD, por lo que se podra pensar que es un nico bloque funcional, hecho ad hoc, para resolver un problema de almacenamiento de datos concreto. En realidad unSGBD puede verse como un conjunto de actores y componentes que se intercomunican entre s para hacer ms fcil el acceso a los datos. Estos componentes son:El Hardware: Dispositivos fisicos donde residen todos los dems componentes del SGBD. Normalmente son dispositivos con capacidades de redundancia y con alta disponibilidad para soportar cualquier contingencia que surja durante su funcionamiento.El Software: Aplicacin que permite abstraerse de las caractersticas fsicas del hardware y que permite hacer al SGBD ser independiente de la plataforma hardware sobre la que se ejecuta.Los Datos: Informacin almacenada dentro del recinto fisico (hardware) y administrada por el software.Los Usuarios: Actores a los que se les permite interactuar con el SGBD, hacindoles transparente el acceso a los datos, independientemente del Hardware o Software utilizado.

  • En relacin a los usuarios, depender del software SGBD que se vaya a utilizar pero genricamente podemos identificar los siguientes roles:Administrador del Sistema informtico.Administrador de la Base de datos y Consultas.Usuario Final.Los anteriores componentes se unen entre s haciendo que el sistema sea modular y fcil de usar/administrar.

  • nicamente queda por hablar del sistema hardware que se debe utilizar para llevar a cabo la instalacin de un SGBD. Para pequeas y medianas empresas cualquier servidor relativamente moderno puede servir. Todo depender del grado de concurrencia de accesos y la cantidad de datos a almacenar los que determinarn las caractersticas fsicas del hardware. Pero lo que debe ser fundamental es el dimensionamiento del almacn de datos para que no se quede pequeo. Desde la mquina analtica de Charles Babbage hasta los netbook de hoy en da, el almacenamiento de la informacin ha pasado por muchas etapas:

    El cableado fsico.La tarjeta perforada.La cinta mgnetica.El disco duro.Los disquetes.El CD-ROM/ DVD.Las tarjetas de memoria .Los pendrives.Los discos duros en estado slido.

  • Es claro que los discos duros actuales estn alcanzando tamaos impensables, lo que el almacenamiento de datos puede no ser un problema. Simplemente sustituyendo un disco por otro de mayores dimensiones el problema se resuelve y adems es seguro que ser ms rpido que el antiguo (lo que aceleran las transferencias de informacin).

  • ACTIVIDADES 6.2

    1. Estimar, por el mtodo de Fermi, qu tamao tendran los datos de la base de datos de un videoclub. Hay que tener en cuenta el espacio requerido para los clientes y para el almacenamiento de los datos de las pelculas disponibles.

    2. Buscar en Internet qu es SQL. Para qu sirve?

    3. Buscar en Internet qu es un ndice en una BD. Para qu sirve?

    4. Buscar en Internet y comparar en un cuadro de texto los siguientes tipos de Sistemas Gestores de Bases de Datos (al menos tres de ellos entre s):a. Oracle.b. Microsoft SQL Server.c. MySQL.d. PostgreSQL.e. Interbase.f. SapDB.g. SQLite.

  • 3. UTILIZACIN DE XML PARA EL ALMACENAMIENTO DE LA INFORMACINGran parte de las BD que hay hoy en da estn basadas en un modelo de datos (tambin llamado modelo de entidad-relacin). Es un modelo que ha funcionado bien durante mucho tiempo y que todava seguir funcionando.Si bien es cierto que las BD orientadas a objetos permiten simplificar el trabajo de integracin con los lenguajes de programacin orientados a objetos, cambiar un modelo de trabajo o un sistema que funciona con el modelo anterior es arriesgado. Algunos SGBD tienen modelos hbridos que permiten aadir extensiones al modelo relacional y avanzar a un modelo orientado a objetos de manera poco traumtica y de manera transparente.

    Tras la llegada de la era Internet, la comparticin de la informacin empez a resultar crucial para no quedarse desfasado y mejorar las relaciones comerciales. Por ejemplo, una empresa X necesita enviarle a la empresa Y informacin en relacin a sus transacciones comerciales. El envo de esta informacin beneficia a X y tambin a Y (reduccin de costes econmicos, costes burocrticos, tiempo, etc.). Es lo que se denomina B2B (Business To Business). El problema es que X utiliza unos modelos de datos distintos a los de Y.Tampoco es fcil ponerse de acuerdo con el SGBD. Debe haber algo que permita que ambos sistemas puedan comunicarse entre s, siendo distintos. La solucin es XML.

  • XML permite definir de manera rpida e intuitiva una representacin de la informacin que ambas empresas desean compartir. La empresa X usar su SGBD para exportar sus datos a XMLy se los remitir a Y. Ambas empresasconocen esa representacin de la informacin por lo que la informacin fluir sin problema (independientemente de los campos que tengan sus respectivas BDs o de los SGBD que estn utilizando).Los SGBD actuales (sobre todo los que usan modelos relacionales), proporcionan en algunos casos extensiones que permitan trabajar con los modelos y representaciones definidas en documentos XML. An as, si el objetivo es utilizar XML desde el principio, se debera analizar las siguientes BD XML nativas:eXcelon XIS Lite12.TEXTML13.dbXML14.eXist15.

  • 12 http://xml.coverpages.org/ExcelonXISLitehtml13 http://www.ixiasoft.com14 http://sourceforge.net/projects/dbxml-core/15 http://exist.sourceforge.net/

    Las dos primeras son comerciales y las dos ltimas son del mundo OpenSource. Cuando se habla de BD XML nativas, se ha de dejar claro que existen dos maneras almacenar informacin dentro de ellas:Usando un modelo centrado en el almacenamiento de los datos: exactamente igual que las BD Relacionales (se guardan tuplas).Usando un modelo centrado en el documento: no hay campos, ni datos, tal y como se conoce en las BD Relacionales. Se guardan documentos XML.La primera permite seguir utilizando los modelos relacionales dentro de BD XML. La segunda permite almacenar documentacin de diferentes modelos dentro de la BD. Dependiendo de los objetivos de almacenamiento que seplanteen quizs se ajuste ms un modelo que otro. Ese anlisis debe ser meditado concienzudamente.

  • 3.1 BASES DE DATOS RELACIONALESCuando se utiliza un modelo centrado en el almacenamiento de los datos, la referencia son las BD relacionales.Todo se basa en un conjunto de tablas bidimensionales que permiten almacenar los datos del mundo real.Para facilitar la comprensin, imaginemos que se quiere representar un conjunto de libros de una biblioteca. Para conseguir almacenar toda la informacin relativa a cada libro necesitaremos una tabla que almacene atributos como "Ttulo", "Autor", "Editorial", "Edicin", "ISBN" y "NumPaginas". Esta tabla se llamara "Libros". Si se quisiera aadir un libro, se generara una nueva entrada en la tabla (fila o tupla), en la que se completarn los atributos de ese libro. Si se quisiera aadir un segundo libro a almacenar, se aadira otra tupla a la tabla. Y as sucesivamente.

  • Antes de continuar aadiendo libros, podramos damos cuenta que existen una serie de atributos que podran ser compartidos entre muchos libros. Sera el caso de "Autor" (un autor puede escribir muchos libros), o "Editorial" (una editorial podra publicar muchos libros de muchos autores distintos), etc. Si por cada libro tuviramos que rellenar esa misma informacin, la tabla "Libros" tendra muchsima informacin redundante. Anteriormente se coment que el modelo de datos de las BD relacionales hacan una gestin de la redundancia muy eficaz. Cmo resuelve este caso?

    Sin duda, si hay informacin redundante, toda esa informacin debe salir de la tabla "Libros" y ubicarse en una nueva tabla. Para el caso del atributo "Autor", se podra crear una nueva tabla llamada "Autores" en la que almacenaramos la informacin relativa a ellos ms un cdigo que le represente de manera nica ("CdigoAutor", "Nombre", "Apellidos", "FechaNacimiento", etc.). Con ese cdigo de autor, cada vez que se aada un nuevo libro de un autor ya aadido, nicamente haremos referencia en el campo "Autor" del nuevo libro al cdigo que referencia a dicho autor (en la tabla "Autores"). Esta manera de indireccionar informacin a otras tablas se denomina relacin. De la misma manera se hara con el campo "Editorial".

  • 3.2 TRANSFORMACIN A XMLEn principio la adaptacin del modelo de datos de una BD relacional a XML es relativamente sencillo de realizar.Una vez obtenido el modelo relacional, como el explicado en el punto anterior, se podra realizar una transformacin de tablas a un documento XML simplemente creando una DTD y creando un documento XML bien formado. A continuacin se detallarn los pasos a realizar para una tabla de libros y de autores como la anterior:1. Cada tabla del modelo relacional ser un elemento dentro del DTD:En este caso se tiene una tabla llamada "Libros" que almacena tuplas de tipo "libro" (cero o ms libros).

  • 2. Cada tupla de la tabla se llama "libro". Es necesario indicar qu campos componen a la tupla:

    3. Cada columna de la tabla deber establecerse como un tipo de dato almacenable (char, integer, etc.):

  • 4. Si existe una columna compleja (como puede ser la de "Autores"), se debe crear un nuevo elemento similar al del paso 2. En este caso un libro puede tener uno o ms autores (por eso el '+'). Tambin se definen los tipos de datos a almacenar:

  • La DTD que resulta de todo esto ser similar a sta:

    ]>

  • y un ejemplo de documento XML ajustado a la anterior DTD puede ser el siguiente:
  • 2La CelestinaMaxtor197884716649383202 Fernandode Rojas01l/01/1470

  • 4. LENGUAJES DE CONSULTA Y MANIPULACINTras instalar un SGBD, los usuarios se comunicarn con l mediante algn tipo de lenguaje que permita manipular los datos almacenados. El lenguaje de consulta estructurado ms popular es SQL (Structure Query Language). Este lenguaje permite, de forma declarativa, acceder a las BD relacionales y operar con ellas. Operaciones tpicas son:

    Creacin y borrado de tablas.Insercin, modificacin y borrado de tuplas.Ejecucin de bsquedas mediante consultas.

    SQL es el lenguaje que en la actualidad se considera estndar de facto pues la inmensa mayora de los SGBD lo implementan. Existen numeroras revisiones del lenguaje (SQL-86, SQL-92, SQL-2003, SQL-2006, SQL-2009) pero la mayora de los SGBD parten del estndar establecido en 1992. Cabe destacar lo siguiente (en lo relativo a XML se refiere):

    El estndar 2003 establece ciertas caractersticas que permiten un soporte inicial a documentos XML.

  • El estndar 2006 establece una mayor integracin con los documentos XML, permitiendo importar y exportar datos en XML. Se establece XQuery como lenguaje de consulta para colecciones de datos en formato XML (ytambin SQL), aprobado por el W3C (World Wide Web Consortium).Si, en definitiva, se va a trabajar con documentos XML para almacenar en su interior informacin mediante un modelo relacional, se necesitar algn lenguaje que permita extraer y manipular informacin de igual manera que SQL con las BD relacionales. Este lenguaje se llama XQuery .

    XQuery es, por tanto, un lenguaje de consulta similar a SQL que permite recorrer los documentos XML de manera que se pueda extraer y manipular la informacin contenida en el mismo. Es un lenguaje muy sencillo que no requiere de conocimientos de programacin avanzados (no es necesario saber C/C++, Java, Python, Visual Basic Script, etc). Adems XQuery es compatible con muchas de las tecnologas que estandariza W3C (como XML, Namespaces, los esquemas, XSLT y XPath). Es por ello, por su facilidad para obtener resultados sin casi programar y por la compatibilidad con muchos de los estndares actuales, que se ha elegido para realizar las consultas dentro de este libro.

  • Cuando se va a analizar un documento XML, se crea un rbol de nodos del mismo. Ese rbol tiene un elemento raz y una serie de hijos. Los hijos del nodo raz pueden tener ms hijos. Si repetimos ese proceso llegar un momento en el que el ltimo nodo no tiene ningn hijo, lo que se denomina nodo hoja.

    Establecido ese rbol de nodos, se recorre esa representacin del documento XML buscando la informacin que se quiere (ya sea algn nodo concreto, algn atributo de un nodo concreto, etc.). Qu tipos de nodos se puede encontrar en ese recorrido? Bsicamente los siguientes:Nodo raz o "I": Es el primer nodo del documento XML. En el ejemplo de la biblioteca de libros explicado anteriormente, sera el elemento "Libros".

    Nodo elemento: Cualquier elemento de un documento XML es un nodo elemento en el rbol. El nodo raz es un caso especial de Nodo elemento (no tiene padre). Cada nodo elemento posee un padre y puede o no poseerhijos. En el caso que no tenga hijos, sera un nodo hoja. En el ejemplo de la biblioteca de libros explicado anteriormente.

  • Nodo texto: Cualquier elemento del documento que no est marcado con una etiqueta de la DTD del documento XML.

    Nodo atributo: Un nodo elemento puede tener etiquetas que complementen la informacin de ese elemento. Eso sera un nodo atributo.

    La extraccin de la informacin durante el recorrido del rbol ser tan simple como la deteccin de los nodos a buscar y el procesamiento de la informacin que se quiere extraer de ese nodo concreto. Esto que parece tan complicado, se realiza fcilmente con una tecnologa denominada XPath (XMLPath).

    XPath es la herramienta que utiliza XQuery para procesar el rbol de nodos de un documento XML. Funciona en base a una serie de expresiones que permiten identificar qu parte del documento XML se quiere acceder o recorrer.La gran ventaja es que al ser una herramienta bastante genrica, XPath no solo es el motor de acceso en documentos XML para XQuery sino que es la base para otras tecnologas como XPointer, XLink o XSLT (como hemos visto anteriormente). Por tanto XQuery usa a XPath para hacer su trabajo.Pero lo realmente interesante es cmo hacer consultas con XQuery.

  • ACTIVIDADES 6.41. Buscar por Internet que estndar SQL cumplen los siguientes SGBD:a. Oracle.b. Microsoft SQL Server.c. MySQL.d. PostgreSQL.e. Interbase.f. SapDB.g. SQLite.

    2. Buscar por Internet qu es PL/SQL. Para qu sirve?

  • 4.1 HERRAMIENTA QIZX STUDIOQizx Studio es un motor de BD XML que permite el almacenamiento de los documentos XML y la realizacin de bsquedas y transformaciones a gran velocidad. Qizx es un motor bastante verstil que en la que destacan las siguientes especificaciones tcnicas:Est orientado a la consulta.No necesita de DTD o esquemas predefinidos, siempre y cuando el documento XML est bien formado.Realiza un indexado automtico lo que permite acelerar las consultas. Tambin puede personalizarse el indexado si se quiere optimizar an el rendimiento.Permite tener una coleccin jerrquica de documentos XML (tambin llamado ''XML Library").El almacenamiento de la informacin se realiza directamente en XML nativo.Soporta Xquery/XPath 2, siendo totalmente compatible con el estndar W3C actual.

  • Permite realizar una representacin compacta de la informacin, comprimiendo tanto los documentos como los ndices. De esta manera el almacenamiento puede ser ms eficiente y exportarse a otros medios dealmacenamiento.Puede funcionar como un anexo a una aplicacin propia (embebida) o configurarse como un servidor independiente sobre la que se envan las peticiones de consulta (va HTTP).Es multiplataforma al haber sido desarrollado por completo en Java. Oficialmente soporta las plataformas:Windows XP,Vista, 7.Linux 2.4+.Mac OS X 10.5+.Necesita de una mquina virtual de Java tipo JRE5+.Se ha elegido este motor porque tiene la versin Open Source que permitir practicar con el lenguaje XQuery de manera muy sencilla y sin ningn coste asociado. Esta edicin gratuita de Qizx (Free Engine Edition) permite tenerun lmite de tamao en las BD de 1 GByte, ms que suficiente para practicar con XQuery. En cualquier caso, siempre se podra comprar la versin Professional de Qizx si el diseo as lo requiere.

  • Aunque de ahora en adelante se hablar de Qizx, existen otros desarrollos Open Source, como Apache Lucene17, que podran utilizarse para este cometido.Actualmente est disponible la versin 4.1 de Qizx Free Engine (liberada el 6 de diciembre de 2010). Es posible descargarla en la pgina web de XMLmind18. En caso de utilizar una versin ms moderna, los pasos para instalar y ejecutar la BD XML nativa son muy similares a los siguientes:17 http://lucene.apache.org18 http://www.xmlmind.com/qizx / download.shtml1. Descomprimir el fichero .zip descargado (en caso de que tengamos un entorno Windows).2. Si se ha descomprimido en "C:\ Archivos de Programa \qizx-fe-4.1pl", habr una carpeta llamada "bin" y dentro un ejecutable llamado "qizxstudio.bat". Hacemos doble clic sobre ese fichero .bat.3. Aparecer una ventana parecida a la de la Figura 6.6.

  • Podemos ver lo siguiente:Pestaa "XQuery": servir para insertar las consultas en formato XQuery.Pestaa "XMLLibraries": indica las libreras de documentos XML cargados en el sistema.En la barra de men, entrada "File": permite crear, abrir y salvar en fichero las consultas XQuery.En la barra de men, entrada "Edit": permite las acciones tpicas de deshacer, rehacer, cortar, copiar y pegar.En la barra de men, entrada "Tools":permite abrir un grupo de libreras XMLlocales, conectarse y desconectarse de una BD XML remota y mostrar logs.En la barra de men, entrada "Help": permite acceder a la ayuda de usuario y a la versin concreta del producto.

  • ACTIVIDADES 6.4.11. Buscar por Internet qu estndar XQuery soporta la BD "Oracle XML DB".

    2. Buscar por Internet que estndar XQuery soporta la BD "BaseX".

  • 4.2 ADMINISTRACIN DE LIBRERAS XMLPartiendo del documento XML ejemplo que se vi de la biblioteca de libros en la seccin "Transformacin a XML", vamos a intentar cargar ese fichero como Base de Datos de trabajo:1. Seleccionar la pestaa "XML Libraries".2. Botn derecho "Create Library Group". Ver Figura 6.8.

    3. Elegimos un directorio nuevo llamado "GrupoLibreriasXML", donde guardaremos todos nuestros documentos XML y se almacenarn los logs de las BD.4. Botn derecho "Create Library". Ver Figura 6.9.5. Elegimos un nombre para la BD. En este caso daremos el nombre "BD_Libros". Ver Figura 6.10.

  • 6. Botn derecho "Import Documents". Ver Figura 6.10 .

  • 7. Aparecer una ventana como en la Figura 6.11. Pulsar el botn "Add FilelFolder ... ".

    8. Seleccionar el documento XML que se vi en la seccin anterior. Llamarlo "BD_Libros.xml" y pulsar el botn "Start Import". Ver Figura 6.12. Si la importacin ha sido exitosa, pulsar el botn "Close".

  • 9. Tras la importacin, el documento quedar vinculado a la librera "BD_Libros" y dentro del grupo de libreras "GrupoLibreriasXML". Ver Figuras 6.13 y 6.14

  • Ya estara disponible en la base de datos el documento XML. Si quisiramos importar otros documentos en la misma librera, se debera repetir el procedimiento desde el paso 6.

  • 5. XQUERYSe ha hablado de XQuery muy ligeramente.Si se han seguido todos los pasos anteriores, ya tenemos disponible la base de datos para hacer consultas. En primer lugar se va a utilizar una funcin de XQuery llamada "doc()", que permite extraerdatos del documento indicado. Un ejemplo muy simple es que la consulta nos devuelva todo el documento XML almacenado. Esto se hara de la siguiente forma:

    doc("BD_Libros.xml")

    Habiendo escrito esta funcin en la pestaa "XQuery", pulsamos el botn "Execute" y veremos en la parte inferior ("Messages"), si se ha ejecutado correctamente y el tiempo empleado para ello. Pero lo realmente interesante es el resultado de la consulta, que ha sido devuelta en la parte derecha de la aplicacin.

    mas informacion

  • Si en vez de devolver todo el documento, se quiere acceder nicamente a un conjunto de nodos bien identificados, aadiramos el camino en el rbol para acceder a ellos, por ejemplo los libros:doc("BD_Libros.xml")//Libros/libro

  • Como se puede observar, aparecen todos los libros que haba almacenados en el documento XML inicial. Al igual que con las expresiones XSLT es posible que se quiera solo un conjunto de nodos dependiendo de un patrn de bsqueda. Si queremos todos los libros que tengan menos de 300 hojas la consulta podramos completarla de la siguiente manera:doc("BD_Libros.xml")//Libros/libro[NumPaginas

  • Y si solo queremos los autores de los libros que tienen menos de 300 pginas? La consulta sera sta:doc("BD_Libros.xml")//Libros/libro[NumPaginas

  • Los ejemplos anteriores son la manera sencilla de realizar bsquedas y selecciones de nodos concretos en un documento XML. Pero existe otra manera, mucho ms potente, para realizar este trabajo. Es lo que se denomina expresiones FLWOR. FLWOR es la contraccin del acrnimo For, Let, Where, Order by, Return. Una expresin FLWOR equivalente a la ltima consulta realizada, podra ser la siguiente:

    for $libro in doc("BD_Libros.xml")//Libros/librowhere $libro/NumPaginas

  • where: Clausula que permite establecer una condicin sobre la variable indicada en "for" y "let".order by: Clausula que define el orden de presentacin de resultados.return: Permite devolver un valor concreto de los resultados obtenidos de las anteriores clausulas (uno por nodo).

    Cabe destacar que la utilizacin de expresiones FLWOR resulta tremendamente similar a las consultas realizadas en SQL en las bases de datos relacionales. Usaremos estas expresiones para extraer la informacin de nuestras bases de datos.

  • Diferencias entre las clusulas for y let.Para ver claramente la diferencia entre una clusula for y una clusula let vamos a comenzar estudiando una misma consulta que muestre los ttulos de todos los libros almacenados en el archivo libros.xml, primero con una clusula for y, a continuacin, con una clusula let y vamos a detallar que diferencia hay en la informacin obtenida.La consulta con una clusula for se muestra a continuacin.

    for $d in doc("libros.xml")/bib/libro/tituloreturn{ $d }

  • El resultado de esta consulta se muestra a continuacin:

    TCP/IP IllustratedAdvan Programming for Unix environmentData on the Web Economics of Technology for Digital TV

  • A continuacin repetimos la misma consulta sustituyendo la clusula for unaclusula let.

    let $d := doc("libros.xml")/bib/libro/tituloreturn{ $d }

    El resultado de esta consulta se muestra a continuacin.

    TCP/IP IllustratedAdvan Programming for Unix environmentData on the Web Economics of Technology for Digital TV

  • Como se puede ver, la clusula for vincula una variable con cada nodo que encuentre en la coleccin de datos. En este ejemplo la variable $d va vinculndose a cada uno de los ttulos de todos los libros del archivo "libros.xml", creando una tupla por cada ttulo. Por este motivo aparece repetido el par de etiquetas ... para cada ttulo. La clusulalet, en cambio, vincula una variable con todo el resultado de una expresin. En este ejemplo, la variable $d se vincula a todos los ttulos de todos los libros del archivo "libros.xml", creando una nica tupla con todos esos ttulos. Por este motivo solo aparece el par de etiquetas ... una nica vez.

    Comentarios.Los comentarios en XQuery, a diferencia de XML, van encerrados entre caras sonrientes, tal y como se muestra a continuacin.

    (: Esto es un comentario, y parece muy feliz :)La sintaxis de comentario usada en XML no es aplicable a XQuery.

  • 6. CONSULTASAntes de continuar, se va a crear un nuevo documento XML y se aadir en la base de datos de Qizx Studio. La razn fundamental es que necesitamos documento ms denso en datos para poder realizar ejemplos complejos.Imaginemos que tenemos un conocido que se gana la vida con una academia de bailes de saln. Nos pide ayuda para almacenar informacin que considera fundamental en su negocio. Estos datos son:

    Nombre del baile.Precio de la clase (indicando la periodicidad de la cuota y la moneda de pago).Numero de plazas disponibles.Fecha de comienzo de las clases.Fecha de finalizacin de las clases.Nombre del profesor que la imparte.Sala en la que se desarrollar la clase.

    El nombre de este archivo XML es DB_BailesDeSalon.xml y se utilizar para los ejemplos de consultas.

  • La inclusin de este documento en la base de datos Qizx es tan sencilla como ir a la pestaa ''XML Libraries", seleccionar como "XML Library Group" la "GrupoLibreriasXML. Despus seleccionar "BD_BailesDeSalon" como "XML library". Y en el raz de BD_Libros, botn derecho "Import Documents". El procedimiento es igual que el indicado en el apartado 6.3.2. Una vez cargado en la base de datos, podemos volver a la pestaa ''XQuery'' y realizar las consultas. Establezcamos las siguientes consultas para practicar:

  • Ejemplo 6.1

    Se necesita saber qu bailes se realizan en la sala nmero 1:for $baile in doc("DB_BailesDeSalon.xml")//Bailes/bailewhere $baile/sala = 1return $baile/nombre

  • Como puede observarse en la Figura 6.19, los resultados salen con las etiquetas de XML. Si quisiramos solo tener un listado, obviando las etiquetas "" y "", simplemente tendramos que indicar en la clausula "return" que extraiga los datos de ese elemento XML:

    for $baile in doc("DB_BailesDeSalon.xml")//Bailes/bailelet $n: =$baile/nombrewhere $baile/sala = 1return data($n)

  • Tal y como se ve en la Figura 6.20, los resultados ya no estn con las etiquetas del elemento "nombre". Todo es debido a que existe una funcin llamada "data( )", que extrae del nodo la informacin almacenada.

    Ejemplo 6.2Se necesita extraer los nodos de aquellos bailes que se impartan en la sala nmero 2 y cuyo precio sea menor que 35 euros:

    for $baile in doc("DB_BailesDeSalon.xml")//Bailes/bailelet $n: =$baile/nombrewhere $baile/sala = 2 and $baile/precio < 35and $baile/precio[@moneda="euro"]return $n

    El resultado ser:Salsa

  • Ejemplo 6.3Se necesita saber el nombre de los profesores que dan clases con cuotas mensuales:for $baile in doc("DB_BailesDeSalon.xml")//Bailes/bailelet $profesor: =$baile/profesorwhere $baile/precio[@cuota="mensual"]return $profesorEl resultado ser:< profesor> Roberto Garcia< profesor> Laura Mendiola < profesor>Jesus Lozano

    Estos tres ejemplos han permitido descubrir las grandes similitudes que tiene XQuery con SQL. Una de las ventajas de XQuery es que devuelve los nodos del rbol XML, por lo que cualquier programa o aplicacin puede trabajar con los resultados que la consulta devuelva. Si lo que se quiere es extraer solo la informacin y no los nodos, hemos descubierto que la funcin "data( )" nos permite conseguirlo. Pero, y si lo que se quiere es devolver un fichero HTML con los datos de la consulta?Quizs el lector recuerde que con XSL se poda tratar este caso. A continuacin veremos como generar HTML con una consulta a una base de datos XML nativa, mediente expresiones FLWOR.

  • Lista de funciones xquery

    Realiza los apartados a,b,c y d del documento Ejercicios XQuery

    6.1 DE FLWOR A HTMLQueremos crear una consulta XQuery que tras ejecutarla nos devuelva los resultados en formato HTML. Podemos unir dentro de XQuery etiquetas HTML y expresiones o clusulas 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 FLWOR. La mejor manera de verlo es a travs de un par de ejemplo (se marcar en negrita la parte de la consulta FLWOR):

  • Ejemplo 6.4Queremos 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 baileNombre profesor Plazas ofertadas

  • {for $baile in doc("DB_BailesDeSalon.xml")//Bailes/bailelet $nombre:=$baile/nombrelet $profesor:=$baile/profesorlet $plazas:=$baile/plazasreturn{data($nombre)}{data($profesor)}{data($plazas) }}

  • El resultado es es un documento .html definido en el archivo ejemplo 6-4.html.En el navegador tendra esta apariencia.Como puede observarse en la Figura, el resultado es totalmente compatible con HTML y visible en cualquier navegador actual.

  • Ejemplo 6.5

    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 disponibles.La consulta XQuery es exactamente igual que antes pero cambiando nicamente la parte FLWOR.Remarcamos en negrita la diferencia con respecto a lo anterior:

  • {for $baile in doc("DB_BailesDeSalon.xml")//Bailes/bailelet $nombre: =$baile/nombrelet $profesor: =$baile/profesorlet splazas: =$baile/plazaswhere $baile/precio[@cuota = "trimestral"]order by $baile/plazasreturn{data($nombre)} {data( $profesor)} {data($plazas)}}

  • El resultado es es un documento .html definido en el archivo ejemplo 6-5.html.En el navegador tendra esta apariencia.Como puede observarse en la Figura, el resultado es totalmente compatible con HTML y visible en cualquier navegador actual.Ms informacin: http://www.w3schools.com/xquery/default.aspTambin: http://www.w3schools.com/xpath/default.asp

  • 7. ACTUALIZACINHasta el momento solo se ha podido realizar consultas sobre los contenidos ya almacenados en la base de datos XML. Quizs queramos insertar, reemplazar, renombrar, cambiar y/o borrar entradas dentro de la base de datos. Para ello indicaremos qu hacer en cada caso.

  • 7.1 INSERCINEjemplo 6.6Se quiera 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 realizara de la siguiente manera:insert nodeFoxtrot 22 12 01/01/201231/07/2012 Freddy Astaire3before doc("Bailes.xml")//Bailes/baile[1]

  • Este cdigo inserta el nodo indicado en la base de dato "Bailes.xml". El nodo se insertar antes del primer nodo de la base de datos (por la clausula "before"). Si se quiere insertar despus, solocambiara "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 last into doc("Bailes.xml")//Bailes

  • 7.2 REEMPLAZO

    Ejemplo 6.7En 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 nodedoc("Bailes.xml ")//Bailes/baile[1]/profesorwith "Angel Correllada",replace nodedoc("Bailes.xml")//Bailes/baile[1]/plazaswith 14

  • Como puede verse, las dos modificaciones se han realizado a la vez pero separndolas por una coma ",". En el caso de no saber en qu posicin de la base de datos se ha realizado la insercin (en principio debe dar igual la posicin mientras est insertados los datos), se podra tener un problemade actualizar errneamente la tupla incorrecta. Para evitar este problema, lo ms comn es realizar la modificacin mediante la utilizacin del identificador del baile (en este caso id=7).

    replace value of nodedoc(" Bailes.xml")//Bailes/baile[@id=7]/profesorwith "Angel Correllada,replace nodedoc("Bailes.xml")//Bailes/baile[@id=7]/plazaswith 14

  • 7.3 BORRADO

    Ejemplo 6.8

    Despus de la insercin y la modificacin del nuevo baile en la base de datos, finalmente parece que no se va a desarrollar ese curso. Se pide que finalmente se borre esa tupla en la base de datos (id=7):delete node doc("Bailes.xml")//Bailes/baile[@id=7]

  • 8. EXPRESIONES CONDICIONALES.Adems de la clusula where, XQuery tambin soporta expresionescondicionales del tipo if-then-else con la misma semntica que en los lenguajes de programacin ms habituales (C, Java, Delphi, etc..). Por ejemplo, la siguiente consulta devuelve los ttulos de todos los libros almacenados en el archivo "libros.xml" y sus dos primeros autores. En el caso de que existan ms de dos autores para un libro, se aade un tercer autor "et al.".

  • for $b in doc("libros.xml")//libroreturn{ $b/titulo }{for $a at $i in $b/autorwhere $i 2)then et al.else ()}

  • Variable posicional atLa clasula for soporta variables posicionales que identifican la posicinde un elemento en la expresin que es generada.for $b at $i in doc(libreria.xml)//tituloreturn {$b}

  • El resultado de esta consulta se muestra a continuacin.TCP/IP IllustratedStevens, W.Advanced Programming in the Unix EnvironmentStevens, W.Data on the WebAbiteboul, SergeBuneman, Peteret al.

  • La clusula where de una consulta permite filtrar las tuplas que aparecern en el resultado, mientras que una expresin condicional nos permite crear una u otra estructura de nodos en el resultado que dependa de los valores de las tuplas filtradas.La clusula else es obligatoria y debe aparecer siempre en la expresin condicional. El motivo de esto es que toda expresin en XQuery debe devolver un valor. Si no existe ningn valor a devolver al no cumplirsela clusula if, devolvemos una secuencia vaca con else (), tal y como se muestra en el ejemplo anterior.

  • 9. CUANTIFICADORES EXISTENCIALESXQuery soporta dos cuantificadores existenciales llamados some y every, de tal manera que nos permite definir consultas que devuelva algn elemento que satisfaga la condicin (some) o consultas que devuelvan los elementos en los que todos sus nodos satisfagan la condicin (every). Por ejemplo, la siguiente consulta devuelve los ttulos de los libros en los que al menos uno de sus autores es W. Stevens.

    for $b in doc("libros.xml")//librowhere some $a in $b/autorsatisfies ($a/last="Stevens" and $a/first="W.")return $b/titulo

    El resultado de esta consulta se muestra a continuacin

    TCP/IP IllustratedAdvanced Programming in the Unix Environment

  • La siguiente consulta devuelve todos los ttulos de los libros en los que todos los autores de cada libro es W. Stevens.

    for $b in doc("libros.xml")//librowhere every $a in $b/autorsatisfies ($a/last="Stevens" and $a/first="W.")return $b/titulo

    El resultado de esta consulta se muestra en el siguiente prrafo.

    TCP/IP IllustratedAdvanced Programming in the Unix EnvironmentThe Economics of Technology and Content for DigitalTV

    El ltimo ttulo devuelto como resultado de la consulta es un libro que no tiene autores. Cuando un cuantificador universal se aplica sobre un nodo vaco, siempre devuelve cierto, como se ve en el ejemplo anterior.

  • La siguiente consulta devuelve los ttulos de los libros que mencionen Unix y programing en el mismo prrafo. Si el libro tiene ms de un prrafo solo es necesario que aparezca en, al menos, uno de ellos. Esto lo indicamos con la palabra reservada some justo a continuacin de where.

    for $b in doc("bib.xml")//librowhere some $p in $b//parrafo satisfies(contains($p,"Unix") AND contains($p,"programing"))return $b/title

  • La siguiente consulta devuelve el ttulo de todos los libros que mencionen programing en cada uno de los prrafos de los libros almacenados enbib.xml.

    for $b in doc("bib.xml")//librowhere every $p in $b// parrafo satisfiescontains($p,"programing")return $b/title

    Esta consulta es distinta de la anterior ya que no es suficiente que programing aparezca en al menos uno de los prrafos, sino que debe aparecer en todos los prrafos que existan. Esto lo indicamos con la palabra reservada every justo a continuacin de where

  • 10. OPERADORES Y FUNCIONES PRINCIPALES.El conjunto de funciones y operadores soportado por XQuery es el mismoconjunto de funciones y operadores utilizado en XPath 2.0 y XSLT 2.0.XQuery soporta operadores y funciones matemticas, de cadenas, para eltratamiento de expresiones regulares, comparaciones de fechas y horas, manipulacin de nodos XML, manipulacin de secuencias, comprobacin y conversin de tipos y lgica booleana. Adems permite definir funciones propias y funciones dependientes del entorno de ejecucin del motor XQuery. Los operadores y funciones ms importantes se muestran en la tabla 2 y se detallan a lo largo de este apartado.

  • El operador unin recibe dos secuencias de nodos y devuelve una secuencia con todos los nodos existentes en las dos secuencias originales. A continuacin se muestra una consulta que usa el operador unin para obtener una lista ordenada de apellidos de todos los autores y editores:

    for $l in distinct-values(doc("libros.xml") //(autor | editor)/apellido)order by $lreturn { $l }

    El resultado de esta consulta se muestra en el siguiente prrafo:

    AbiteboulBunemanGerbargStevensSuciu

  • El operador de interseccin recibe dos secuencias de nodos como operandos y devuelve una secuencia conteniendo todos los nodos que aparezcan en ambos operandos.

    El operador de sustraccin (except) recibe dos secuencias de nodos comooperandos y devuelve una secuencia conteniendo todos los nodos del primer operando que no aparezcan en el segundo operando. A continuacin se muestra una consulta que usa el operador sustraccin para obtener un nodo libro con todos sus nodos hijos salvo el nodo .

    for $b in doc("libros.xml")//librowhere $b/titulo = "TCP/IP Illustrated"return{ $b/@* }{ $b/* except $b/precio }

  • El resultado de esta consulta se muestra a continuacin.

    TCP/IP IllustratedStevensW.Addison-Wesley

  • La funcin distinct-values() extrae los valores de una secuencia de nodos y crea una nueva secuencia con valores nicos, eliminando los nodos duplicados. Por ejemplo, la siguiente consulta devuelve todos los apellidos distintos de los autores.

    for $l in distinct-values(doc("libros.xml")//autor/apellidos)return { $l }

    El resultado de esta consulta se muestra en el siguiente prrafo.

    StevensAbiteboulBunemanSuciu

  • La funcin empty() devuelve cierto cuando la expresin entre parntesis est vaca. Por ejemplo, la siguiente consulta devuelve todos los nodos libro que tengan al menos un nodo autor.

    for $b in doc("libros.xml")//librowhere not(empty($b/autor))return $b

    El resultado de esta consulta se muestra a continuacin.TCP/IP IllustratedStevensW.Addison-Wesley 65.95

  • Advan Programming for Unix environmentStevensW.Addison-Wesley65.95Data on the WebAbiteboulSerge

  • BunemanPeterSuciuDanMorgan Kaufmann editorials39.95

  • La funcin opuesta a empty() es exists(), la cual devuelve cierto cuando unasecuencia contiene, al menos, un elemento. Por ejemplo, como la consulta anterior tiene una clusula where que comprueba una negacin sobre empty(), podemos rescribirla usando la funcin exists() tal y como se muestra a continuacin:

    for $b in doc("libros.xml")//librowhere exists($b/autor)return $b

    El resultado de esta consulta es el mismo que el resultado de la consulta anterior.

  • La siguiente consulta obtiene el promedio de autores por libro:

    {let $a := doc("bib.xml")//libroreturnavg(for $as in $a return count($as/autor))}

    El resultado de esta consulta se muestra a continuacin.1.25

  • La siguiente consulta muestra los libros cuyos precios superan la media:

    let $l := doc("bib.xml")//librolet $c:= avg($l//precio)return $l[precio>$c]

    El resultado de esta consulta se muestra a continuacin.

    The Economics of Technology and Content for Digital TV Gerbarg Darcy CITI Kluwer Academic Publishers 129.95

  • Realiza el resto de los apartados del documento Ejercicios XQuery 11. EXPORTACIN DE LIBRERAS XMLDespus de realizar todos los cambios en la base de datos, es un buen momento para exportar el contenido a un fichero XML externo. De esta manera se podra tener una copia de seguridad en caso de contingencia. Qizx Studio nos permite realizarlo de manera muy sencilla:

    1. Ir a la pestaa "XML_Libraries".

    2. Seleccionar "Bailes.xml", botn derecho y pulsar "Export to File ... ".

    3. Aparece una nueva ventana en la que se puede seleccionar el fichero de salida, la codificacin y el formato (XML,HTML, XHTML, o texto). Para hacer una copia de seguridad se selecciona XML y se prodecer a volcar lainformacin.

  • Para finalizar, se habl anteriormente de cmo utilizar expresiones FLWOR para que devuelvan cdigo HTML. El procedimiento para exportar los resultados es muy sencillo. Una vez que se est en la pestaa "XQuery" y se ejecuta la consulta, en la parte derecha muestra los resultados. Hay que pulsar el botn de exportacin de resultados "Save results" y aparecer una ventana similar a la de la Figura 6.23. De esta manera tendremos en fichero los resultados de la consulta.

  • 12. OTRAS FUNCIONES O LIBRERIASSe ha visto que XQuery19 es una herramienta de alto nivel que permite realizar todas las tareas administrativas de un SGBD sin tener que programar ninguna lnea en C/C++ o Java. Pero XQuery no es solamente lo que se ha visto aqu. Recordemos que XQuery usa XPath y ste tiene muchas funcionalidades que no se han tratado en este captulo. Existen funciones para acceder a nodos padre, funciones para tratamiento de valores numricos, para tratar strings, resolver URIs, funciones para tratar fechas/horas, para acceder a nodos, para establecer secuencias ... En elcaso de necesitar ms potencia a la hora de generar las consultas, se recomienda consultar las funciones de XPath20.

    Otra manera de acceder a los nodos de los documentos XML es mediante la librera DOM21 (Document Object Model). DOM es una interfaz de programacin de aplicaciones (API), que permite representar documentos HTML y/o XML de manera que las aplicaciones que la utilicen puedan representar el documento en forma de rbol. Una vez cargado el rbol, se puede recorrer buscando informacin, modificando los propios nodos o la informacin que contienen, cambiando la estructura del rbol, etc

  • Esta API es un estndar de acceso aprobada por la W3C. Elinconveniente es que es necesario conocer un lenguaje de programacin para hacer uso de esta API. En la actualidad la prctica mayora de los navegadores la tienen implementada.

    Por ltimo tenemos otra API llamada SAX22(Simple API for XML). Es una librera que inicialmente se utilizaba en Java pero que en la actualidad es posible utilizarla en muchos lenguajes de programacin. La principal ventajade usar un parser SAX es que el documento XML se lee una nica vez, de manera secuencial y sin que se cargue todo l en memoria (sin generar ningn rbol). Esto redunda en que los analizadores SAX son ms eficientes en la memoria utilizada que los DOM. Como desventaja es que una vez pasada la lectura, no se puede volver a atrs (en contraposicin de DOM que s se permite).

    En resumen, existen muchas maneras de manipular documentos XML. En este libro se ha elegido XQuery pues permite utilizarse en los grandes sistemas SGBD y tambin en pequeas aplicaciones con motores de BD XML nativas como Qizx.

  • No ser necesario tener conocimientos de programacin en lenguajes como C/C++ o Java para manejar API's como SAXo DOM. En cualquier caso, la decisin final de utilizar una u otra solucin depender de las necesidades que tenga el proyecto al que vaya a implantarse, haciendo especial hincapi en el almacenamiento y el tratamiento de la informacin.

    19 http://www.w3.org/TR/xquery/20 http://www.w3.org/TR/xpath/21 http://www.w3.org/DOM/22 http://www.saxproject.org /

  • 13. CASO PRCTICOSe propone analizar y disear un caso concreto de almacenamiento de informacin en bases de datos. En este caso se dar libertad al alumno (bajo supervisin del profesor) del sistema a modelar. Podran ser casos como:Una mediateca.Almacenamiento de transacciones bancarias.Almacenamiento de mensajes de texto recibidos de publicidad en TV.Almacenamiento de ofertas de hoteles y viajes.Etc.Se realizarn todos los pasos necesarios para pasar de un modelo de datos relacional a un modelo en base de datos XML nativa. Se generar un documento XML que almacene dicha informacin y se realizarn, al menos dos consultas para:Insercin.Modificacin.Borrado.Consulta de informacin con presentacin de resultados en HTML.

  • 14. EJERCICIOS PROPUESTOS1. A qu cientfico debemos la posibilidad de realizar estimaciones muy precisas a problemas con falta de datos suficientes? Pista, buscar en Internet por "cuestiones de Fermi".

    2. Buscar por Internet los siguientes conceptos:B2B.B2C.B2E.Realizar una tabla en la que se muestren las ventajas de la aplicacin de estas estrategias comerciales en una empresa.

    3. Aadir en la DTD de la biblioteca de libros, la nacionalidad del autor. Completar el nuevo campo en el documento XMLque los almacena.

    4. Aadir en el documento XML 10 nuevos libros.

    5. Realizar una consulta XQuery con expresiones FLWORque muestre todos los libros almacenados.

  • 6. Realizar una consulta XQuery con expresiones FLWOR que muestre todos los libros almacenados con ms de 500 pginas.

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

    8. Realizar una consulta XQuery con expresiones FLWOR cuyo resultado sea una tabla HTML con todos los libros de la biblioteca siempre que tenganms de 150 pginas.

    9. Realizar una insercin de un nuevo libro con XQuery (con algn dato errneo).

    10. Realizar una modificacin del libro anterior corrigiendo el dato erroneo.

    11. Realizar el borrado del ltimo libro insertado en la base de datos con XQuery.