1 00:00:04,780 --> 00:00:27,339 sino que esta se influencia por los lenguajes de programación y una vez que se crearon dichos lenguajes de programación orientados a objetos, se pensó y por qué no tener una base de datos en el que en vez de acumular tablas relacionadas, lo estructuramos de otra manera, almacenando objetos también relacionados. 2 00:00:27,339 --> 00:00:52,340 Entonces, hay que decir que esta alternativa es eficiente y natural para el almacenamiento en XML, ya lo veis. ¿Qué son las bases de datos? Bueno, pues que trabaja directamente con objetos, lo acabo de decir, son objetos persistentes que se almacenan tal cual en la base de datos, o sea, tú coges un objeto y lo almacenas allí, con todo lo que conlleva dicho objeto, sus atributos, sus métodos, todo. Muy adecuado para manejar datos estructurados y jerárquicos como XML. 3 00:00:54,399 --> 00:01:12,859 Aquí tenemos componentes del modelo orientado a objetos. En un principio nosotros modelamos a través del modelo de objetos, que un modelo de objetos no es más que definir una clase en el que dicha clase va a tener un montón de instancias de objetos que van a tener una serie de atributos, relaciones, va a haber herencia, etc. 4 00:01:12,859 --> 00:01:29,319 ¿Cómo lo hacemos? Pues si veis cualquier diagrama en UML, veis que, salvo por la falta de las cajas aquí, tú lo que añades es cada una de las clases con cada uno de los atributos y esos atributos con sus tipos separados con dos puntos. 5 00:01:29,319 --> 00:01:38,659 Una vez que tenemos cada uno de los modelos del modelo de objetos o cada una de las clases con sus atributos o sus valores miembro con sus datos 6 00:01:38,659 --> 00:01:48,260 Pasamos al Object Definition Language que sería pasarlo a una estructura más relacionada con la programación 7 00:01:48,260 --> 00:01:53,219 Aquí ya lo ha puesto una estructura a través de Interface como un tipo Java 8 00:01:53,219 --> 00:02:02,500 y posteriormente tenemos el Object Query Language que lo que va a hacer es poder utilizar esos objetos en la base de datos a través de consultas. 9 00:02:02,500 --> 00:02:09,919 Si veis aquí las consultas, este OQL es muy parecido al SQL y lo que pasa es que ahora está seleccionando objetos 10 00:02:09,919 --> 00:02:14,039 y dentro de esos objetos está seleccionando atributos de esos mismos objetos. 11 00:02:14,639 --> 00:02:16,379 ¿Veis? La estructura es muy parecida a SQL. 12 00:02:16,379 --> 00:02:42,539 Luego tenemos los bindings de lenguajes como C++, Java, Smalltalk, para el que no sepa es otro lenguaje orientado a objetos, además es un lenguaje orientado a objetos puro, como Java y C++, permiten trabajar con objetos persistentes en esos lenguajes y añaden el hecho ya de que podamos navegar o pasar a través de consultas, pasar a través de esos objetos y obtener valores de los mismos. 13 00:02:42,539 --> 00:02:55,259 Si veis aquí, por ejemplo, hay un ejemplo en Java en el que lo que hace es que, veis, ha hecho una instancia a través de new de un objeto que está acumulado dentro de la base de datos que sería objeto estudiante. 14 00:02:55,699 --> 00:03:07,800 Y luego, una vez que tiene ya el objeto con el valor de lo que determina o le añade valores a sus campos o se obtiene valores de los mismos, etc. 15 00:03:07,800 --> 00:03:25,840 Entonces, XML a objetos en base a datos de ahorita los objetos, ¿cómo lo podríamos hacer? Aquí tenemos un ejemplo en el que tenemos un XML sencillito. Entonces, lo primero que pasamos, que es, como hemos dicho antes, pasamos por los distintos pasos. 16 00:03:25,840 --> 00:03:43,580 En un principio define los objetos como hemos visto anteriormente. Veis aquí la clase de persona, la clase de dirección y luego a través del OQL o de la JPEG Query Language lo que hace es que puede hacer consultas de esos objetos que están almacenados. 17 00:03:43,580 --> 00:04:05,259 Si veis, el modelo de objetos encaja de manera natural con la jerarquía de XML. Digamos que es muy amigable ese tipo de base de datos con respecto a XML. Además, de manera diferente a lo que sucedía con las bases de datos de relacionales en el que teníamos un problema de semántica cuando pasábamos de uno a otro. 18 00:04:05,259 --> 00:04:22,259 El procesamiento interno, ¿qué pasa cuando los datos XML se convierten en objetos, en una base de datos orientada a objetos? Pues que una vez los objetos están en la base de datos, pues se van a aplicar los mismos mecanismos, los mecanismos que tiene nativo ese sistema de gestión de base de datos orientada a objetos. 19 00:04:22,259 --> 00:04:45,199 Como puede ser indexación, como podría pasar en las relacionales, optimización de consultas, procesamiento de recuperación, etc. ¿Por qué es útil para XML? Pues porque XML, intrínsecamente, su idiosincrasia es un lenguaje jerárquico. 20 00:04:45,199 --> 00:05:02,240 Lo mismo que sucede con los objetos. Tienen un parecido en cuanto a su estructura. Ventajas del enfoque orientado a objetos. Mapeo directo de XML de objetos. Ya vimos que el mapeo antes no era tan fácil en las relacionales. 21 00:05:02,240 --> 00:05:10,660 Modelo jerárquico, que es XML amigable, integración con programación orientada a objetos y luego flexibilidad muy alta, expresividad. 22 00:05:12,980 --> 00:05:18,980 Por último, hablamos de las bases de datos XML nativas. Hablamos de esto y después pasamos ya al XQuery. 23 00:05:19,819 --> 00:05:23,540 Son bases de datos diseñadas específicamente para almacenar y gestionar documentos XML. 24 00:05:24,540 --> 00:05:29,420 Van a soportar transacciones, acceso multiusulario, lenguaje de consulta como XQuery. 25 00:05:29,420 --> 00:05:49,579 Aquí os he puesto de todos los ejemplos reales de base de datos XMD nativas, os marco base X, que es la que vais a utilizar en la práctica, y que es muy rápido, es ligero, puedes usar XQuery con XPath, porque luego realmente estás usando XQuery con XPath. 26 00:05:49,579 --> 00:05:52,220 Y soporta transacciones, usuarios, etc. 27 00:05:53,279 --> 00:06:02,579 Características principales, decir que podemos tener colecciones equivalentes a las tablas en las bases de datos relacionales. 28 00:06:03,480 --> 00:06:08,040 Si veis aquí, podemos hacer colecciones con diferentes tipos de archivos XML. 29 00:06:09,019 --> 00:06:18,759 Tenemos la facilidad de validación de documentos XML a través de XSD, DTDs, lenguajes de consulta, 30 00:06:18,759 --> 00:06:39,600 Al igual que las bases de datos relacionales, como he dicho anteriormente, tenemos XQuery, Xpad, también tenemos indexación XML para acelerar las búsquedas, identificadores únicos para cada documento, hemos hablado de cómo se generaban esos identificadores, lo tenemos aquí, y la actualización y eliminación de documentos. 31 00:06:39,600 --> 00:06:59,649 Tipos de almacenamiento en base a datos XML nativas, aunque en el texto del aula virtual nos aparece como el llamado blob, el binary large object, y habla también de almacenes dedicados. 32 00:06:59,649 --> 00:07:29,069 Pues yo os he puesto aquí una tabla, bueno, los tipos de almacenamiento en base de datos XML nativas, que sepáis esto es lo que aparece aquí en el aula y aquí tenemos pues los distintos almacenamientos que podemos tener en una base de datos XML nativas, bien sea por un almacenamiento basado en árbol, que es lo que tendríamos que sería la estructura jerárquica y aquí hablamos de DOM, el almacenamiento basado en texto, en el que pues guarda el documento XML como texto, como tal, ¿vale? 33 00:07:29,069 --> 00:07:53,550 Hace almacenamiento basado en modelo de datos, convierte el XML en estructuras más eficientes como objetos, clases o nodos persistentes en disco. El almacenamiento orientado a tablas, que bueno, esto lo dejo un poco aparte, y luego todo lo que conlleva estos cuatro tipos de almacenamiento se complementa con el XPath, el XQuery, el almacenamiento binario optimizado, lo que hemos visto de los blogs. 34 00:07:53,550 --> 00:08:20,740 ¿Vale? Importante con respecto a esto, si veis el almacenamiento basado en árbol es muy fiel a la estructura original del XML. Aquí hablamos, se guarda como un árbol DOM o árbol de nodos propio. ¿Qué es DOM? El Document Object Model. Sería el modelo de objetos del documento. Es una argumentación en memoria del contenido de un archivo XML o HTML en forma estructura jerárquica de nodos. 35 00:08:20,740 --> 00:08:44,399 Eso que conlleva que si nosotros tenemos esta estructura de fichero XML, en memoria lo generará, en memoria esto como si fuera una estructura en árbol, de tal manera que nosotros después a través de distintas funciones podemos, esto sería código Java, podemos sacar información por ese documento XML mucho más fácil. 36 00:08:44,399 --> 00:09:08,179 Aquí tenemos un fragmento en el que, bueno, es verdad que en Java lo que saca esa información requiere la utilización de una determinada librería, pero al final nosotros podemos recorrer, por medio de este código, podemos recorrer distintos ítems del propio fichero de esta arquitectura DOM. 37 00:09:08,179 --> 00:09:22,600 El almacenamiento basado en DOM convierte DOM en tablas relacionales, DOM en objetos de una base de datos orientada a objetos y podemos transformar también DOM en almacenes especializados. 38 00:09:22,600 --> 00:09:44,320 Aquí tenemos el ejemplo de un documento XML sencillito en el que DOM a tablas relacionales, cómo lo pasa, o también a una base de datos orientada a objetos o incluso a un almacén especializado, como puede ser una base de datos diseñada para XML, como puede ser base X. 39 00:09:44,320 --> 00:10:09,179 Entonces, comparativa de almacenamiento, no sé si he puesto aquí otra tabla, no, no he puesto la tabla con todo, pero esta sería la tabla o la comparativa que os hace en el aula virtual, en el que bien sea como texto estructurado, como modelo de datos, que sería el DOM, o bien como texto BLOB, pues estas serían las ventajas e inconvenientes en cuanto a una lección o a la otra. 40 00:10:09,179 --> 00:10:26,500 ¿Por qué usar una base de datos XML nativa? Porque cuando los documentos XML son en el formato principal de datos y no todos los datos que tenemos o la mayoría son en formato XML, pues la verdad es que sería de una gran utilidad utilizar una base de datos XML nativa. 41 00:10:26,500 --> 00:10:41,940 Cuando se necesita flexibilidad estructural, consultas avanzadas en estructura jerárquica o compatibilidad con estándares XML. Sería ideal para gestión documental, publicación electrónica, intercambio de datos reestructurados. 42 00:10:41,940 --> 00:11:00,440 Y pasamos ya a XQuery. Bien, el XML Query Language sería diseñado para escribir consultas sobre datos en XML. Y esto es lo que se va a utilizar en XQuery. Es decir, que XQuery lo vamos a utilizar con XPath, que ya lo vimos. 43 00:11:00,440 --> 00:11:15,659 Puede usarse con archivos XML o bases de datos relacionados convertidas a XML. ¿Qué hace XQuery? Pues, XQuery realmente lo que va a hacer es extraer información de estructuras en forma de árbol XML. 44 00:11:15,659 --> 00:11:34,659 Permite combinar expresiones simples en consultas complejas. O sea que lo que tenemos al final es que el XQuery sería lo que es SQL para las bases de datos relacionales. 45 00:11:34,659 --> 00:11:40,659 Es decir, que XQuery es un lenguaje funcional y es un lenguaje declarativo. 46 00:11:45,830 --> 00:12:02,129 Dequisitos técnicos de XQuery, pues es un lenguaje declarativo, a recordar que también SQL es un lenguaje declarativo, es independiente del origen de los datos, respeta el modelo de datos XML, tiene soporte para Nape Spaces, 47 00:12:02,870 --> 00:12:06,870 Compatible con DTTs, con XMLs y XMAS. 48 00:12:07,529 --> 00:12:10,129 Puede operar sin conocer la estructura del documento. 49 00:12:11,250 --> 00:12:13,929 Soporta datos de tipo simples y complejos. 50 00:12:14,490 --> 00:12:19,730 Veremos y lo veremos más adelante que puede usar cuantificadores universales e existenciales. 51 00:12:21,210 --> 00:12:24,490 Cuando hablamos de cuantificadores universales y existenciales, 52 00:12:24,490 --> 00:12:28,049 veremos que esto es lo que se llama lógica proposicional. 53 00:12:28,049 --> 00:12:47,870 Esto aparece en lenguajes lógicos, como puede ser Prolog, quien lo conozca, pues aparece en los cuantificadores universales y existenciales, pues esto lo tiene XQuery. Operaciones sobre jerarquías y secuencias de nodos, combinación de datos de múltiples fuentes, manipulación independiente del origen e independencia sintáctica. 54 00:12:47,870 --> 00:13:05,129 Una consulta puede expresarse de diferentes formas. Ahora os voy a ver un ejemplo básico de consulta en Xquery. A lo largo ahora de la presentación vamos a ver muchos ejemplos. Pero primero como punto de partida os pongo aquí uno facilito, que sea este que aparece aquí. 55 00:13:05,129 --> 00:13:17,049 Si veis, el fichero XML sería el de libros que tenemos aquí. Si veis, está formado por un montón de unidades de nodos libro que a su vez contienen un título y un precio. 56 00:13:17,750 --> 00:13:28,929 Entonces, el primer paso lo hace, pues es un for, hay que decir que aquí tenemos un paso de XPath en el que lo que hace es que sitúa en el ramal del libro 57 00:13:28,929 --> 00:13:38,389 y una vez que está ahí, lo que hace es que va a hacer las variables dentro de XQuery y las define con un dólar delante XQuery. 58 00:13:38,389 --> 00:14:06,289 Entonces, dentro del documento de libros.xml, situándonos en libro, pues lo que hace es que, oye, cógeme o recórreme todo el árbol, todo el árbol jerárquico y me vas mirando dentro de cada conjunto o nodos libro, me vas mirando, puesto que está cogiendo la variable donde lo hemos almacenado, me vas mirando el precio, el sub-elemento precio del libro 59 00:14:06,289 --> 00:14:10,049 y todos los que sean menores de 20, pues me los coges. 60 00:14:10,429 --> 00:14:13,429 Una vez cogidos, retórname el título por de todos ellos. 61 00:14:14,169 --> 00:14:19,070 ¿Qué está haciendo? Está cogiendo el nodo libro, luego cogerá el segundo nodo libro, 62 00:14:19,409 --> 00:14:24,769 esto se lo va acumulando en dólar libro y a continuación ve si es menor de 20 o no. 63 00:14:25,190 --> 00:14:31,950 Ve que el único que es menor de 20 es este, entonces este es el que se correspondería con el que necesitamos para la condición. 64 00:14:31,950 --> 00:14:46,889 Entonces, como este nodo libro cumple con la condición, me lo retorna, pero solo quiero que me retorna, aquí tendremos la parte de XPath, retórname solo el subnodo título y eso es lo que retornaría, ¿vale? 65 00:14:46,889 --> 00:15:04,960 ¿Por qué usar XQuery? Porque está diseñado para, además de esto es muy específico, ¿para qué? Para XML. Es compartible con XPath, con XLT, ya hemos visto que XPath lo utiliza, permite consultas potentes, flexibles y reutilizables y funciona con múltiples orígenes de datos. 66 00:15:07,399 --> 00:15:21,200 Conclusión sobre XQuery. Es un lenguaje imprescindible para trabajar con XML a gran escala, útil tanto en base de datos XML nativas como en XML que se haya convertido en que provengan de base de datos relacionales. 67 00:15:21,580 --> 00:15:24,779 Permite construir soluciones robustas para análisis y transformación de datos XML. 68 00:15:26,200 --> 00:15:34,059 ¿Para qué se utiliza XQuery? Recuperar información, lo acabamos de ver, y transformar instrucciones XML en otras estructuras. 69 00:15:34,059 --> 00:15:36,580 Podemos transformar HTML en PDFs, otros formatos. 70 00:15:38,379 --> 00:15:41,000 Motoros de XQuery, open source. 71 00:15:41,000 --> 00:15:46,080 Tenemos aquí varios, pero os remarco el que utilicéis en la tarea. 72 00:15:47,000 --> 00:15:52,879 Ya hemos hablado de él anteriormente, que es free, que tiene una interfaz gráfica intuitiva, 73 00:15:53,279 --> 00:15:56,039 multi-plataforma, lo habéis visto a la hora de descargarlo, 74 00:15:56,100 --> 00:15:58,120 y muy eficiente para grandes volúmenes de datos. 75 00:15:59,519 --> 00:16:02,659 Esta serie de XQuery es clave para consultas y transformaciones sobre XML. 76 00:16:05,159 --> 00:16:27,620 Modelo de datos en XQuery. Aunque XQuery y SQL comparten ideas, ya hemos dicho que eran dos lenguajes declarativos, igual, trabajan con modelos de datos distintos. El otro, SQL, está trabajando con datos planos, acordaros, de las bases de datos relacionales, y XQuery está trabajando con datos más complejos, con una jerarquía, un orden, etc. 77 00:16:28,399 --> 00:16:37,240 Entonces tenemos que en la estructura SQL está manejando tablas planas, mientras que XQuery está trabajando con árboles jerárquicos. 78 00:16:37,620 --> 00:16:45,500 El orden de los datos no es relevante en las bases de datos relacionales, ahí nos da igual, pero sí es muy importante en XQuery, ya lo hemos visto. 79 00:16:45,679 --> 00:16:53,500 Y luego el acceso se hace a través de filas y columnas en el caso de SQL, pero aquí lo va a hacer, como hay una jerarquía, a través de nodos y de jerarquía. 80 00:16:54,500 --> 00:16:57,399 XQuery, la posición y anidación de los datos sí importan. 81 00:16:57,399 --> 00:17:03,720 en SQL. Modelo de datos de XQuery, entrada y salida basada en una representación abstracta 82 00:17:03,720 --> 00:17:09,000 de documentos XML, opera sobre documentos XML completos o puede operar sobre fragmentos 83 00:17:09,000 --> 00:17:17,779 de documentos. Características clave del modelo de XQuery, aquí tenemos varias características 84 00:17:17,779 --> 00:17:25,859 que serían, se van a obtener secuencia de ítems, importante el orden del documento 85 00:17:25,859 --> 00:17:37,299 Y que puede generar el error value. Entonces, en cuanto, si os fijáis aquí, tenemos un fichero XML sencillito que se llama libros, que es el que estoy poniendo a lo largo de toda la presentación. 86 00:17:37,579 --> 00:17:53,400 Entonces, secuencia de ítems es capaz de, tú puedes sacar una serie de ítems del propio fichero XML a través de XQuery, en el que nos puede dar una lista ordenada de ítems, pues además una lista heterogénea. 87 00:17:53,400 --> 00:18:03,180 Es importante decir que en esa lista o secuencia de ítems que es capaz de obtener no puede haber unos datos anidados dentro de otros. 88 00:18:03,180 --> 00:18:23,619 En cuanto al orden del documento, ya lo hemos visto anteriormente, él siempre cuando utiliza XQuery va a respetar el orden físico del propio documento XML y la respuesta o el conjunto de secuencia de ítems que nos va a generar las va a sacar en el mismo orden en el que está en el fichero XML. 89 00:18:23,619 --> 00:18:48,259 Y luego el error o valor especial de error que puede generar es cuando estamos haciendo, si veis aquí lo que está recorriendo en este compendio o esta secuencia de ítems, está recorriendo y sacando, le está indicando que cada uno de los valores que va a obtener o que va a devolver son de origen integer. 90 00:18:48,259 --> 00:18:59,220 Entonces, aquí claramente lo está transformando a integer y al transformarlo a integer en cuanto a los dos primeros lo hace de manera correcta, pero en cuanto al tercero no, puesto que no es un número, es un string. 91 00:19:01,359 --> 00:19:07,220 Implicación del modelo de datos. XQuery permite consultas más expresivas gracias a su respeto por el orden y por la jerarquía. Ya lo hemos visto. 92 00:19:08,720 --> 00:19:13,440 Tiene la posibilidad de manejar datos atómicos, lo hemos visto, y estructurados en una misma secuencia. 93 00:19:13,440 --> 00:19:36,940 Nosotros podemos obtener una secuencia en la que podéis obtener datos atómicos, ya veremos la función data en la que nos permite obtener los datos propiamente dicho de cada uno de los subnodos o nodos de XML y podemos obtener también una serie de nodos, datos estructurados o bien datos atómicos. 94 00:19:39,809 --> 00:20:00,589 Expresiones en XQuery. ¿Qué es una expresión en XQuery? En una expresión en XQuery hay que decir que cualquier consulta en XQuery es una expresión. Es tomar una secuencia de datos XML como entrada y devolver otra secuencia, como hemos visto anteriormente, heterogénea. Podemos devolver nodos XML o valores atómicos. 95 00:20:01,430 --> 00:20:03,490 Las expresiones complejas, ¿cómo se van a crear? 96 00:20:03,609 --> 00:20:07,289 Pues tú vas a coger un montón de expresiones más simples y vas a generar una compleja. 97 00:20:07,650 --> 00:20:13,910 Aquí tenemos un fichero XML personas en el que está formado por nodos persona 98 00:20:13,910 --> 00:20:16,509 que a su vez tienen los subnodos nombre y edad 99 00:20:16,509 --> 00:20:21,210 y lo que nos está haciendo aquí en este fragmento de XQuery 100 00:20:21,210 --> 00:20:25,009 nos está recorriendo el documento personas, el punto XML, 101 00:20:25,750 --> 00:20:29,829 a través de Xpad está poniendo que se sitúe en cada uno de los nodos persona 102 00:20:29,829 --> 00:20:31,789 y nos está indicando 103 00:20:31,789 --> 00:20:33,430 que nos retorne de ese 104 00:20:33,430 --> 00:20:35,630 cada nodo persona que lo han añadido 105 00:20:35,630 --> 00:20:36,609 pues a la variable p 106 00:20:36,609 --> 00:20:39,829 que de la variable p nos vaya devolviendo 107 00:20:39,829 --> 00:20:41,710 un conjunto de 108 00:20:41,710 --> 00:20:43,630 valores que serán 109 00:20:43,630 --> 00:20:45,549 por un lado nos va a dar un