1 00:00:04,780 --> 00:00:21,359 Vale, la veis perfectamente, ¿no? La presentación, sí. ¿Sí? Sí, sí que se ve. Vale. Bien, pues vamos a, esta sería la videoconferencia del tema 5 y sería conversión y adaptación de documentos XML. 2 00:00:21,359 --> 00:00:30,539 Bueno, hemos visto hasta ahora los documentos XML, pues que eran documentos con etiquetas 3 00:00:30,539 --> 00:00:34,179 y que, bueno, incluían información pero que no había formato. 4 00:00:34,420 --> 00:00:38,420 Había que darles un formato, pues hay que transformarlos. 5 00:00:39,600 --> 00:00:43,820 En cuanto a la interpretación de XML, los navegadores le interpretaban esas etiquetas 6 00:00:43,820 --> 00:00:48,439 y aplicaban un formato según las hojas CSS, mostrando su contenido al usuario. 7 00:00:48,439 --> 00:01:15,040 Y para transformar documentos XML, que es lo que nos interesa y que vamos a ver a lo largo de este tema, tenemos estas herramientas. Tendríamos el XSLT, que define cómo transformar un XML en otro documento, el XSLFO, que transforma XML en un documento como puede ser PDF, y luego XPAT, que es muy importante, que permite acceder a cada uno de los componentes de ese XML. 8 00:01:15,040 --> 00:01:19,239 Podemos ir recorriéndolo de manera jerárquica y ir accediendo a cada uno de ellos. 9 00:01:20,700 --> 00:01:25,840 Uso de XSLT, que es lo que vamos a ver. Vamos a ver XSLT y vamos a ver XPAT. 10 00:01:26,319 --> 00:01:36,700 XSLT es un estándar aprobado por la V3C. Los documentos se llaman hojas, XSLT, y también es un documento XML. Ahora lo veremos. 11 00:01:37,480 --> 00:01:40,920 ¿Qué transformaciones permite? Podemos convertirlo en otro documento XML, 12 00:01:40,920 --> 00:01:50,819 lo podemos convertir en un HTML o en un documento de texto simplemente, que es una hoja XSLT. 13 00:01:51,140 --> 00:02:00,840 Como he dicho antes, es un documento XML en otro formato. Este documento XML con una serie de reglas 14 00:02:00,840 --> 00:02:04,719 y estructuras específicas que veremos a lo largo de la videoconferencia. 15 00:02:05,719 --> 00:02:27,639 Aquí os he puesto un ejemplo para que no vayamos entrando en harina. Aquí tenemos un documento XML y este le queremos transformar a través de este otro documento XSLT. Este otro documento ya nos dice aquí, en la salida, en el output, el método lo va a convertir en un documento HTML. 16 00:02:27,639 --> 00:02:42,840 Vamos a tener distintos, cuando apliquemos un fichero como este, dependiendo de lo que queramos que aparezca en la salida, pues tendremos unos componentes u otros. 17 00:02:42,840 --> 00:03:06,639 Aquí únicamente ya está metiendo una serie de componentes HTML que los seguros meten en el documento que no va a generar, pues van a salir exactamente igual. Aquí está diciendo que va a ser una lista desordenada y va a ir metiendo cada uno de los elementos, elemento 1 y elemento 2, dentro de esa lista desordenada. 18 00:03:06,639 --> 00:03:33,020 Existen tres tipos de elementos en esa hoja XSLT. Los elementos propiamente XSLT que vendrán con este prefijo, XSL y los dos puntitos, como tenemos esta de aquí, como tenemos la primera que encabeza el documento y luego tenemos elementos LRE que serían aquellos que no pertenecen al XSLT pero que simplemente van a salir tal cual los ponemos. 19 00:03:33,020 --> 00:03:59,419 Aquí en un documento de HTML estos head, body, todos estos serían los elementos LR. Luego hay elementos de extensión que veremos más adelante que permite meter una serie de funciones específicas que están fuera de lo que son los XSLT pero que nos permite tener mucho más, que sea mucho más rico el método de transformación gracias a esas funciones con estos elementos de extensión. 20 00:03:59,419 --> 00:04:10,479 Esto es otro ejemplo como el anterior, pero nos indica aquí que HTML, HEAD, BODY, todos estos componentes son LREs 21 00:04:10,479 --> 00:04:17,660 Realmente lo único que es XSLT serían las que vienen con el prefijo que he indicado anteriormente 22 00:04:17,660 --> 00:04:29,759 No digo exactamente lo que sale porque quiero primero ver que lleguemos a ver todo lo que podemos utilizar dentro de un XSLT 23 00:04:29,759 --> 00:04:32,920 para comprender este código que estaba apareciendo aquí. 24 00:04:33,399 --> 00:04:38,339 Tan solo decir que este es el fichero XML que queremos transformar. 25 00:04:38,939 --> 00:04:41,439 Este va a ser el que nos va a permitir la transformación. 26 00:04:41,620 --> 00:04:45,759 Básicamente, la salida va a ser un HTML, lo vemos aquí, 27 00:04:46,120 --> 00:04:47,579 y nos va a generar este otro de aquí. 28 00:04:47,579 --> 00:04:50,860 Si veis, es una lista desordenada en la que ha cogido cada uno de los elementos 29 00:04:50,860 --> 00:04:56,139 de texto, de nombre, de cada uno de los dos productos del fichero XML. 30 00:04:56,480 --> 00:04:58,180 Eso lo hace a través de este forEach. 31 00:04:58,180 --> 00:05:01,120 a través de esta ruta 32 00:05:01,120 --> 00:05:02,220 que es como una ruta 33 00:05:02,220 --> 00:05:04,600 como cuando utilizamos 34 00:05:04,600 --> 00:05:07,759 cualquier ruta en Linux, en MS2 35 00:05:07,759 --> 00:05:09,319 esta ruta nos está 36 00:05:09,319 --> 00:05:10,959 llevando jerárquicamente desde 37 00:05:10,959 --> 00:05:12,899 productos hasta el producto 38 00:05:12,899 --> 00:05:14,819 y luego dentro del producto nos está cogiendo 39 00:05:14,819 --> 00:05:16,839 seleccionando cada valor 40 00:05:16,839 --> 00:05:18,860 de nombre, cada etiqueta nombre 41 00:05:18,860 --> 00:05:20,860 y dentro de nombre nos está cogiendo el texto 42 00:05:20,860 --> 00:05:22,560 que va a meter en cada una de las casillas 43 00:05:22,560 --> 00:05:24,959 de esa lista desordenada 44 00:05:24,959 --> 00:05:27,220 entonces coge televisor y coge computadora 45 00:05:30,629 --> 00:05:34,930 También tenemos elementos de extensión, lo he dicho antes, un ejemplo, he querido poneros aquí un ejemplo, 46 00:05:35,050 --> 00:05:41,389 en el que, fijaos, aquí os está metiendo una serie de, lo vienen con este nombre de XSLT, 47 00:05:41,769 --> 00:05:47,170 en el que nos está metiendo funciones, en este caso, pues, de strings, para manejar strings, 48 00:05:47,170 --> 00:05:53,029 a través de este fichero XML ha puesto Hola Mundo, y lo único que quiere hacer a través de esos elementos de extensión 49 00:05:53,029 --> 00:06:05,529 En esta hoja de XSLT lo que quiere es transformar ese texto de minúscula a mayúscula, utilizando funciones de las que he añadido aquí de estos elementos de extensión. 50 00:06:05,529 --> 00:06:30,129 El emisor de extensión, el prefijo le llama str y en str utiliza una función suya que es uppercase para que lo que haya dentro de la ruta absoluta root mensaje, que sería si vamos aquí en el xml en su ruta root mensaje, coge este texto y a través de esta función lo pone mayúsculas. 51 00:06:30,129 --> 00:06:35,269 La salida, lógicamente, pues era el mensaje mayúsculas hola mundo. 52 00:06:40,839 --> 00:06:45,220 Hemos dicho que los elementos XSLT tenían un prefijo, que era este, que es el XL, 53 00:06:45,560 --> 00:06:52,420 esas serían cada una de las líneas de esa hoja XSLT, que están definidos en el estándar del lenguaje 54 00:06:52,420 --> 00:06:56,839 y que pueden ser interpretados por cualquier procesador XSLT. 55 00:06:58,240 --> 00:07:01,519 Aquí tenemos un ejemplo de un template, que luego veremos lo que es. 56 00:07:01,519 --> 00:07:09,699 Luego los elementos LRE, no lo voy a repetir, ya lo hemos visto lo que eran, y los elementos de extensión, que también no hemos visto lo que eran y tampoco lo voy a repetir. 57 00:07:11,300 --> 00:07:29,079 Asociación del XSLT con XML, se hace a través de esta línea, y aquí se añade en el XML, se añade cuál es el punto XSL que se va a utilizar para que lo transforme. 58 00:07:29,079 --> 00:07:38,860 Si veis aquí, utiliza el XML stylesheet y le mete la ruta, nada más que sería el fichero o la hoja XSLT. 59 00:07:39,740 --> 00:07:50,360 ¿Qué elementos tiene un XSLT? Aquí tenemos los elementos raíz, pueden tener o este o el de otro, cualquiera de los dos, o el stylesheet o el transform, pueden aparecer los dos. 60 00:07:50,360 --> 00:07:57,360 Si veis aquí, no es como, es realmente el elemento raíz del XSLT. 61 00:07:58,500 --> 00:08:01,620 Veis aquí la etiqueta de apertura y aquí la de cierre. 62 00:08:02,240 --> 00:08:04,680 Ambos, como digo, son equivalentes. 63 00:08:05,860 --> 00:08:13,240 También tiene atributos, más atributos tendríamos que del elemento raíz teníamos la versión que aparece aquí 64 00:08:13,240 --> 00:08:18,899 y también la declaración del espacio de nombres, 65 00:08:18,899 --> 00:08:38,440 En el que generalmente es esta línea que aparece aquí. Los elementos de nivel superior son estructuras contenedoras, lógicamente, y no pueden anidarse excepto cuando tenemos estas dos. Estas dos serían otros dos tipos de elementos que pueden aparecer, como son el parámetro y la variable. 66 00:08:38,440 --> 00:08:48,500 Es decir, que la variable luego se utiliza poniendo pues con un valor de dólar, tanto en la variable como en el parámetro. 67 00:08:48,500 --> 00:09:01,320 La única diferencia es que el parámetro lleva un valor por defecto y también para el caso en el que, porque generalmente el parámetro es para cuando recibe, como pasa en cualquier lenguaje de programación, un parámetro es porque va a recibir un valor. 68 00:09:01,980 --> 00:09:07,700 Entonces, cuando recibe un valor, ese es el que va a utilizar. Si no hay un valor, utiliza el valor por defecto que se le envía. 69 00:09:07,700 --> 00:09:18,299 Y variable sería para escribir esas rutas que hemos estado hablando anteriormente, podemos almacenarlas y podemos usarlas a través de un nombre, que sería la propia variable. 70 00:09:18,299 --> 00:09:28,000 Es decir, que aquí el concepto de variable, que en cualquier lenguaje de programación es algo mutable, aquí en las hojas XSLT son inmutables. 71 00:09:30,820 --> 00:09:38,240 Aquí tenemos un ejemplo del XML, lo veis, en el que tenemos un elemento writeRoot y luego tenemos un elemento usuario con un nombre y una edad. 72 00:09:38,240 --> 00:09:55,500 Aquí ha realizado un XSLT en el que el documento de salida va a ser un texto y lo único que hace es que ha definido un parámetro aquí llamado saludo y con un valor por defecto, el SELECT, indica el valor por defecto que será hola. 73 00:09:55,500 --> 00:10:08,539 A continuación ha metido un template que ya veremos más adelante lo que es, pero lo único que quiero que veáis aquí es el caso de las variables. 74 00:10:08,539 --> 00:10:15,899 Aquí ha definido dentro de este template dos variables, una se llama nombre de usuario y la otra edad de usuario. 75 00:10:15,899 --> 00:10:31,320 Entonces nombre de usuario le ha puesto la ruta root usuario nombre, o sea que estaría refiriéndose a este valor, y dentro de edad usuario, que sería la otra variable, estaría como root usuario edad, que sería este otro valor. 76 00:10:31,320 --> 00:10:53,940 Entonces, cuando para imprimir el saludo, que es lo que se trata de esta transformación, obtener un valor texto con el saludo, pues al final le pone a través de valueOf, le pone una función utilizando la función concat, que lo que hace es concatenar tanto la variable saludo, la de nombre usuario, como la de usuario generando una frase. 77 00:10:53,940 --> 00:11:02,860 Si veis cada uno de ellos, tanto los parámetros como las variables para poder utilizarlas se utilizan con un dólar delante. 78 00:11:02,860 --> 00:11:18,230 Este sería la salida, veis, saludo hola, que era el parámetro que como no recibía nada, pues cogía el valor por defecto. 79 00:11:18,230 --> 00:11:33,049 A continuación hay una coma, luego hay el nombre de usuario que es el contenido de esta dirección, que sería Juan, luego ha puesto la cadena tienes y por último la última variable que era edad de usuario, que era la ruta root usuario edad, que es 30. 80 00:11:33,049 --> 00:11:57,350 Y luego pues años, aunque no me ha cabido aquí, pero aquí aparecería otra cadena concatenada que sería años entre comillas. También se puede hacer, pero bueno, esto lo he puesto, pero tampoco tenemos, esto sería pues el caso en el que queramos meter un, en un parámetro queramos meter un valor, pero tampoco aquí la he metido por la palabra bienvenido, pero tampoco esto no, lo que voy a añadir para que sepáis que existe. 81 00:11:57,350 --> 00:12:01,789 más elementos principales que tenemos 82 00:12:01,789 --> 00:12:05,610 atributo que ya lo hemos visto, choose que lo veremos más adelante 83 00:12:05,610 --> 00:12:08,629 decimal format que define formatos para números decimales 84 00:12:08,629 --> 00:12:13,970 el choose va a ser como si fuera un case 85 00:12:13,970 --> 00:12:16,990 luego lo veremos, el for each que nos deja de ser más que un árbol 86 00:12:16,990 --> 00:12:21,149 aplica sentencias a cada nodo del árbol, es como un bucle 87 00:12:21,149 --> 00:12:26,110 y el if que es una condición, la diferencia entre el choose y el if es que será una única condición 88 00:12:26,110 --> 00:12:31,789 y en el churpo tendremos distintas opciones para una condición. 89 00:12:32,850 --> 00:12:40,470 Aquí tenemos un ejemplo de ello, en el que este es el fichero XML y aquí tenemos el XSLT, 90 00:12:40,889 --> 00:12:43,710 en el que esta hoja, si veis aquí, tiene un for each. 91 00:12:44,049 --> 00:12:52,690 El for each, el select, nos está indicando a partir de dónde va a producirse el recorrido del bucle. 92 00:12:52,690 --> 00:13:20,610 Estás posicionándonos en productos y luego producto, entonces lo que nos interesa son estos componentes que están dentro de producto, como es un bucle va a recorrer los tres, dentro del mismo, porque esto es una tabla, lo que va a querer al final es poner los valores dentro de una tabla, si veis aquí las etiquetas HTML, entonces lo que está pidiendo es dentro de esa ruta que la ha metido en el for each está pidiendo el nombre, que sería cada uno de los valores, 93 00:13:20,610 --> 00:13:43,120 Entonces al final lo que va a meter en la tabla va a ser televisor, computadora, celular, etc. Aquí tenemos también un ejemplo de la función del formato decimal para que le aplique un formato cada vez que recoja el valor de precio, le aplique el formato que pone aquí a través de la función formandarmer. 94 00:13:43,120 --> 00:14:07,559 Y aquí tenemos en el mismo ejemplo, he querido, porque este código va así, hasta aquí, y luego sigue por aquí, ¿vale? Por eso he puesto la flecha, porque no me cabía, ¿vale? Entonces, quería que vierais el choose, cómo se, entonces, en la siguiente diapositiva lo he agrandado para que lo veáis, que es esta parte, ¿vale? 95 00:14:07,559 --> 00:14:27,919 Y el choose lo que va a elegir es entre, al fin y al cabo, está formado por tres palabras que gobiernan este bloque. Una sería choose, otra sería when y other ways. El choose es el que va a escoger entre una de las opciones como pasaba con un case. La primera que valga o que lo cumpla, pues esa es la que lo cogerá. 96 00:14:27,919 --> 00:14:50,080 Si veis aquí, la primera opción es como si fuera un case, pero con el WEN, en el que el WEN nos está diciendo, oye, en stock, que sería aquí, si el valor es más grande de 10, entonces me vas a poner en color verde esa casilla. 97 00:14:50,080 --> 00:15:06,519 Si esta está entre 0 y entre 10, me lo pones en color naranja. Y si no se cumplía ninguno de los dos, pasaría al other ways y pondría agotado en color rojo. Este sería el other ways. 98 00:15:06,519 --> 00:15:20,789 ¿La diferencia entre un choose y un if? Pues que el choose, ¿cuántas condiciones evalúa? Va a evaluar varias, mientras que el if solo evalúa una. 99 00:15:21,769 --> 00:15:26,350 ¿Ejecuta más de una condición? No, pero en el if sí puede tener, si hubiera varios if. 100 00:15:26,889 --> 00:15:31,590 ¿Is y tiene una opción por defecto, cosa que no tiene el if? Entendría que sería el llamado de always. 101 00:15:31,789 --> 00:15:35,250 Si veis, es igual que un case en cualquier lenguaje de programación. 102 00:15:35,250 --> 00:16:00,519 ¿Vale? ¿Qué más elementos principales? Tenemos import, que importa una hoja de estilos, key, que define claves para referenciarles en el documento, output, que ya hemos visto que definía qué salida iba a generarse, preserve space, que mantiene espacios en blanco y, bueno, que está ordenado en nodos de manera alfabética o numéricamente, sort. 103 00:16:00,519 --> 00:16:09,580 Y como veis hay un montón, no he podido hacer ejemplos de todos porque si no se extendería muchísimo la presentación. 104 00:16:10,539 --> 00:16:23,919 Strip space que elimina los espacios en blanco de XML, template que esta sí la vamos a ver a continuación, y value of que inserta el valor de una expresión XPath en la salida y variable que ya la hemos visto. 105 00:16:23,919 --> 00:16:53,000 Aquí tenemos la asociación de XSLT con XML, lo he explicado antes, se realizaba a través de esta línea, en la que esta línea se añadía, aquí tenemos productos XLS, que sería la hoja, y tenemos aquí en el propio fichero XML, tenemos la referencia a esa hoja XSLT. 106 00:16:53,919 --> 00:17:07,019 Lo había dicho antes, se hace a través de estar poniendo la ruta aquí en href y esta sería la línea que sería la siguiente, pues a la propia, la del cabezado por un fichero xml. 107 00:17:07,579 --> 00:17:19,460 Una vez que hace referencia a ese, primero se enlaza el xml con el xslt y una vez que ya está enlazado el xslt es el que va a producir la transformación. 108 00:17:19,460 --> 00:17:38,960 Y si tenemos que se abre en un navegador, como puede ser Firefox, Edge, se verá dicha transformación, la que ahora ya hemos aplicado aquí. Pero que sepáis que ese es el procedimiento. Tiene que haber aquí una referencia a esa hoja XSLT para que se produzca la transformación del fichero XML. 109 00:17:38,960 --> 00:17:45,740 Pasamos a XPath, ya con esto tenemos XSLT, vamos a pasar a XPath 110 00:17:45,740 --> 00:17:51,099 Recordar que XPath lo que hacía es que podíamos navegar a través de los elementos de un documento XML 111 00:17:51,099 --> 00:17:53,380 Y pasar a cualquiera de ellos 112 00:17:53,380 --> 00:17:57,279 Es un estándar también aprobado por el mismo que pasaba con XSLT 113 00:17:57,279 --> 00:18:00,619 Que permite navegar entre los elementos y atributos de un documento XML 114 00:18:00,619 --> 00:18:04,759 Y que se basa en relaciones de paréntesis, entre los nodos de un documento XML 115 00:18:04,759 --> 00:18:09,640 inicialmente creado para XSLT 116 00:18:09,640 --> 00:18:11,779 pero se puede usar ahora para todos 117 00:18:11,779 --> 00:18:17,380 XSpat selecciona nodo o conjunto de nodos 118 00:18:17,380 --> 00:18:18,160 ahora lo veremos 119 00:18:18,160 --> 00:18:21,980 y que estas expresiones son similares a las rutas de archivos 120 00:18:21,980 --> 00:18:24,460 en los sistemas operativos, hemos ya hablado un poquito de ello 121 00:18:24,460 --> 00:18:27,240 hemos hablado a lo largo de las diapositivas anteriores 122 00:18:27,240 --> 00:18:31,359 como establece 123 00:18:31,359 --> 00:18:34,180 como si fuera una ruta de archivos 124 00:18:34,180 --> 00:18:43,259 con la barra inclinada hacia la derecha, como si fuera una ruta de archivos para navegar a lo largo de la jerarquía del documento de XML. 125 00:18:43,640 --> 00:18:53,140 ¿Cómo aparece aquí? Aquí está navegando a través de estas barras inclinadas, a través de matrículas que será el documento de XML, 126 00:18:53,420 --> 00:18:59,579 el elemento raíz, luego un sub-elemento que será alumno y dentro de alumno habrá otro sub-elemento nombre. 127 00:18:59,579 --> 00:19:16,099 Habrá navegado jerárquicamente hasta allí. Aquí tenemos un ejemplo de cómo se puede hacer esa navegación. Si pones matrículas, estamos seleccionando el nodo raíz. Si pones matrículas barra alumno, estamos seleccionando el nodo alumno. 128 00:19:16,099 --> 00:19:28,259 Si pones matrículas barra alumno barra nombre, estará seleccionando nombre. Y si pones matrículas barra alumno barra apellido 2, pues estará seleccionando este otro nombre. 129 00:19:31,259 --> 00:19:39,420 Claro, al seleccionar matrículas alumno nombre, el resultado que estamos obteniendo es el contenido del mismo, que sería el pedro. 130 00:19:39,420 --> 00:19:54,039 Términos básicos de Gizpad. Tenemos siete tipos de nodos. Tenemos elemento, tenemos atributo, tenemos texto, tenemos espacio de nombres, instrucción de proceso, comentario y documento. 131 00:19:54,039 --> 00:20:12,640 Con respecto a nodo raíz versus elemento raíz. Nodo raíz contiene el ejemplar del fichero XML. Una cosa es el nodo raíz, que sería todo el ejemplar, y otra es el elemento raíz. 132 00:20:12,640 --> 00:20:23,880 El elemento RAID, que sería el nodo RAID, que sería matrículas. No confundir. Entonces, nodo RAID sería el propio ejemplar de XML y elemento RAID sería matrículas, que es el elemento RAID. 133 00:20:25,079 --> 00:20:35,180 En cuanto a nodos elemento, van a representar cada una de las etiquetas XML y tendrán, lógicamente, un elemento padre y pueden tener identificadores únicos. 134 00:20:35,180 --> 00:20:45,000 Los nodos texto son el contenido dentro de las etiquetas, son aquellas que no están marcadas como etiquetas y no tienen lógicamente hijos. 135 00:20:46,339 --> 00:20:55,579 Aquí tenemos nodos atributo, aquí tenemos fijados en el fichero XML y tenemos varias selecciones. 136 00:20:56,339 --> 00:21:03,160 Imaginaos que seleccionar un atributo específico. Para seleccionar un atributo específico se hace a través del arroba, lo veremos. 137 00:21:03,160 --> 00:21:17,579 Entonces, hace el recorrido matrículas barra alumno barra DNI y luego al poner el arroba país nos está indicando, oye, dame el atributo específico que te estoy dando aquí. 138 00:21:17,579 --> 00:21:33,099 Si además le ponemos entre corchetes una operación de igualdad, que lo veremos en las expresiones o los predicados, le decimos que ese atributo además tiene que ser igual a es, nos tendrá que dar, seleccionar ese nodo de este atributo país igual a es. 139 00:21:33,160 --> 00:21:51,460 Aquí también tendríamos la selección de todos los atributos de un nodo, que no es más que poner el arroba en vez de con un nombre, con un asterisco, eso nos indica que nos va a dar todos los atributos que haya, ¿vale? De ese nodo DNI, ¿vale? Aquí nos dará la misma solución, porque solo tiene un atributo, pero si tuve tres, pues nos daría los tres. 140 00:21:51,460 --> 00:22:08,059 Y seleccionar nodos que tienen un atributo específico, pues está diciendo que dentro del DNI, o sea, matrículas alumno en jerarquía y luego a DNI, dame los nodos que tienen este atributo país. 141 00:22:08,579 --> 00:22:11,660 ¿Qué te daría? Pues todo el nodo que es el que tiene el atributo país. 142 00:22:15,769 --> 00:22:20,750 Esto es más de lo mismo, cómo diferenciar entre nodo elemento raíz, nodo elemento y nodo atributo. 143 00:22:20,750 --> 00:22:30,869 Un ítem puede ser un nodo o un valor atómico. Hay que decir que Pedro es un valor atómico, pero también un atributo sería un valor atómico. 144 00:22:31,990 --> 00:22:43,309 En cuanto a las relaciones entre nodos, es decir, que puede haber relaciones de padre a hijo, de hermanos, ascendentes, descendentes. De padre a hijo sería, pues, alumno, lógicamente, será el padre de nombre. 145 00:22:43,309 --> 00:22:57,549 En cuanto a hermanos, lógicamente nombre, apellido 1, apellido 2 y DNI son hermanos. Ascendentes, ascendente de nombre puede ser matrículas y descendentes de apellido 1, descendentes serían matrículas. 146 00:22:57,549 --> 00:23:07,440 He hablado antes de cómo en XPath se pueden realizar expresiones y hemos visto el ejemplo de una expresión aquí. 147 00:23:08,660 --> 00:23:12,259 Aquí había una expresión. Vamos a verlo ahora, un poquito con más detalle. 148 00:23:13,099 --> 00:23:17,440 Y hay que decir que XPath utiliza expresiones para seleccionar y manipular datos en XML. 149 00:23:17,440 --> 00:23:22,140 Al evaluar una expresión se pueden obtener cuatro tipos de resultados. 150 00:23:22,140 --> 00:23:31,240 O obtienes un conjunto de nodos, lo que se llama un nodo set, o un valor booleano, true, false, un número o una cadena de texto. 151 00:23:32,799 --> 00:23:40,920 Aquí he añadido un ejemplo de un conjunto de nodos en el que hay que decir que ese conjunto de nodos no está ordenado, 152 00:23:41,019 --> 00:23:46,460 los nodos dentro del conjunto son considerados hermanos, lógicamente, y los árboles de un nodo no son parte del conjunto. 153 00:23:46,460 --> 00:24:03,359 Aquí tenemos el fichero XML y entonces el conjunto de nodos está poniendo matrículas, alumno, nombre, text, que está indicando que vayamos en la jerarquía desde matrículas, alumno y en el sub-elemento nombre. 154 00:24:03,359 --> 00:24:15,299 Y ahí me está indicando que ponga todos los que tengan el nombre dentro del fichero XML, que me ponga todos los textos. Irá recorriendo cada uno de ellos y nos pondrá Pedro y Ana. 155 00:24:15,299 --> 00:24:33,920 En cuanto a matrículas alumno nombre, le estamos indicando que nos devuelva un set de nodos. Le estamos diciendo, oye, dame desde dentro de nombre todos los nodos que estén dentro de matrículas y dentro de alumno que tengan la etiqueta nombre. 156 00:24:33,920 --> 00:24:47,470 Con ello nos está dando los dos nodos que existen dentro de este fichero XML, que serían nombre con Pedro como valor texto y nombre con Ana como valor texto. 157 00:24:47,829 --> 00:24:59,430 Otros tipos de resultados en XPath. Hemos visto cómo obtener un conjunto de nodos a través de lo que era el nodo set. 158 00:24:59,430 --> 00:25:04,930 pero ¿qué sucede si lo que queremos es obtener un valor booleano, un valor true o false? 159 00:25:05,490 --> 00:25:11,009 Se hace a través de expresiones, lo que hemos visto anteriormente, y esas expresiones se ponen entre corchetes. 160 00:25:11,009 --> 00:25:21,829 Si yo le digo p que a matrículas, este sería el documento que se mele, nos vamos a matricular dentro del sub-elemento alumno 161 00:25:21,829 --> 00:25:26,069 y dentro del sub-elemento alumno aquellos cuyo nombre sea igual a Pedro. 162 00:25:26,690 --> 00:25:30,809 Al aplicar la función booleana nos va a dar un valor de true porque aquí existe. 163 00:25:31,690 --> 00:25:36,529 En cuanto a un número, también se puede obtener cuando le aplicas una función como puede ser la función suma. 164 00:25:36,529 --> 00:25:45,809 Tú puedes coger dentro de matrículas alumno y edad y que te coja todos los elementos de edad que hay dentro de matrículas y dentro de alumno y que te la sume. 165 00:25:46,190 --> 00:25:50,650 Con lo cual, cogerá la de 20, cogerá la de 22 y la sumará y nos sacará un resultado de 42. 166 00:25:51,369 --> 00:25:55,029 Y por último puede obtenerse una cadena o una secuencia de caracteres. 167 00:25:55,029 --> 00:26:03,890 Eso se va a realizar a través de la función concat. Concat, como pasa en otros lenguajes de programación, lo único que hace es unir cadenas. 168 00:26:04,470 --> 00:26:18,130 Entonces, lo que hace el primero es que coge de matrículas, sigue la ruta de matrículas, alumno, alumno, entre corchetes uno, que indica de los distintos alumnos que tiene, que son dos, que coja el primero. 169 00:26:18,130 --> 00:26:23,049 y con el valor nombre, con lo cual está cogiendo Pedro. 170 00:26:23,509 --> 00:26:27,970 A continuación, le concatena la palabra tiene, entre comillas simples, 171 00:26:28,529 --> 00:26:31,730 y posteriormente le mete otra cadena a través de otra ruta, 172 00:26:32,069 --> 00:26:36,410 que sería matrículas alumno, quiere el primero de los dos que hay, 173 00:26:36,950 --> 00:26:41,829 pero lo que quiere ahora es la edad, y esta sería de 20. 174 00:26:42,829 --> 00:26:45,809 Pedro tiene 20 y luego con la cadena concatenada años, 175 00:26:45,970 --> 00:26:47,569 que sería el texto que va a aparecer al final. 176 00:26:48,130 --> 00:26:59,670 Si veis, en función de la función que apliquemos, boolean, suma o concat, obtendremos los tipos de resultados de XPath como booleano, número o cadena de texto. 177 00:27:00,450 --> 00:27:16,809 Se pueden utilizar elementos en estas expresiones, que son los típicos elementos que aparecen en toda la lenguaje de programación, salvo el arroba, que es el atributo, que ya lo hemos definido anteriormente, los elementos que indica un valor, el asterisco indica todos los elementos posibles, 178 00:27:16,809 --> 00:27:22,809 y luego veremos los separadores, que serían el doble punto, estos dos puntos y las comas. 179 00:27:23,549 --> 00:27:30,009 En cuanto a las llaves, corchetes y paréntesis también se pueden utilizar. 180 00:27:30,589 --> 00:27:35,609 Tenemos aquí otros dos elementos, que es el elemento actual, el elemento padre y el elemento comment y text. 181 00:27:35,609 --> 00:27:41,609 Text ya lo hemos visto, que sería para que nos saque el texto del propio nodo 182 00:27:41,609 --> 00:27:47,910 Y comentario a lo veremos, que es para que nos saque el comentario que pueda haber dentro de un archivo de XSLT. 183 00:27:50,369 --> 00:27:55,750 También tenemos, lógicamente, si es una presión, en estas expresiones podemos añadir operadores. 184 00:27:56,609 --> 00:28:08,089 Tenemos operadores and or, en el que hay éticos como pueden ser la suma, la resta, la multiplicación, el módulo, la división, los relacionales y luego los jerárquicos. 185 00:28:08,089 --> 00:28:22,049 Y es conveniente, esto sí es importante en cuanto a los jerárquicos, indicar que cuando tú pones una barra delante, que es la que hemos visto anteriormente, estamos hablando que es una dirección absoluta. Aquí estábamos hablando con una barra, estamos hablando de dirección absoluta. 186 00:28:22,049 --> 00:28:39,450 Cuando hablamos de una doble barra, lo que vamos a hacer es que va a seleccionar nodos en cualquier lugar del documento y esto, da igual lo profundo que sea, lo va a encontrar y lo va a buscar de manera recursiva. 187 00:28:39,450 --> 00:29:06,559 Y cuando tengamos una barra vertical, lo que va a hacer es que si tenemos varias expresiones, podemos juntar esas expresiones a través de esa barra. Aquí tenemos un ejemplo, por ejemplo este, en el que nos está diciendo selecciona todos los elementos div, recorrerá todos los elementos div dentro de HTML Body, selecciona todos los div que haya. 188 00:29:06,559 --> 00:29:15,559 Y al poner la barra en vertical nos indica, y además, cógeme todos también los elementos párrafo que haya también en el documento. 189 00:29:16,900 --> 00:29:24,900 Francisco, perdón, una preguntilla. En este ejemplo de HTML barra body barra barra div, ¿se podría poner simplemente barra barra div? 190 00:29:24,900 --> 00:29:51,660 Sí, también se podría poner. Lo que pasa es que aquí, como es compuesta la expresión, aquí ya te está indicando al poner el HTML barra body. No, claro. Pero es que, ¿dónde vas a poner un div que esté fuera de un HTML body? 191 00:29:51,660 --> 00:29:54,200 Sí, no, pero te digo 192 00:29:54,200 --> 00:29:55,119 porque como justo 193 00:29:55,119 --> 00:29:58,220 al otro lado de la barra vertical 194 00:29:58,220 --> 00:29:59,480 está barra barra P 195 00:29:59,480 --> 00:30:01,079 por eso digo 196 00:30:01,079 --> 00:30:04,200 Si tú pones barra barra div 197 00:30:04,200 --> 00:30:05,440 va a ser igual que el barra barra P 198 00:30:05,440 --> 00:30:06,819 él te va a buscar al fin y al cabo 199 00:30:06,819 --> 00:30:08,519 porque el barra barra ya lo dice 200 00:30:08,519 --> 00:30:11,599 en cualquier lugar del documento 201 00:30:11,599 --> 00:30:13,460 va a ir buscando todos los P que haya 202 00:30:13,460 --> 00:30:15,480 entonces te va a dar igual de ponerlo todo 203 00:30:15,480 --> 00:30:16,059 o sea 204 00:30:16,059 --> 00:30:19,339 podríamos quitar esto 205 00:30:19,339 --> 00:30:20,559 perfectamente 206 00:30:20,559 --> 00:30:38,000 ¿Vale? Bien, y estos serían los operadores de los que disponemos. Nos quedan las funciones y los ejes. Cuando las funciones ya las hemos visto. Count, que bueno, en count no lo hemos visto, hemos visto sum, pero es muy parecida, creo que hay un ejemplo por ahí. 207 00:30:38,000 --> 00:30:48,480 CONCAT ya lo hemos visto, CONTAINS para ver si contiene algún elemento que nosotros pongamos entre comillas simples y luego la definición de ejes que lo vamos a ver a continuación. 208 00:30:49,420 --> 00:30:57,339 También podemos tener literales y números. Literales, ya hemos visto los ejemplos, lo podemos poner entre comillas simples y entre comillas dobles. 209 00:30:57,339 --> 00:31:10,019 Entonces, los números, he puesto yo esto, las comillas simples aquí, pero bueno, no se ponen comillas simples, era para remarcarlo, ¿vale? Como he dicho aquí con la variable, ¿vale? Y las variables que se pone con el dólar, ¿vale? Pero no van aquí estas comillas simples, ¿vale? 210 00:31:10,019 --> 00:31:33,019 Y nos queda el procesando expresiones y rutas de localización. Ya he dicho que me faltan cómo procesar esas expresiones. Hay que decir que al procesar un documento de XML vamos a encontrar estos conceptos que son el nodo actual, el nodo contexto y el tamaño del contexto. 211 00:31:33,019 --> 00:31:51,680 Bien, también me contesto para definir el número de nodos evaluados, de ahí viene la función count, ¿vale? Entonces, yo en este fichero XML estoy diciendo, dentro de universidad, la ruta absoluta, universidad, estudiante, cuéntame cuántos hay. Hay uno, dos y tres, con lo cual me aparecerá un tres, ¿vale? 212 00:31:51,680 --> 00:32:04,519 Nodo contexto, conjunto de nodos usados para evaluar expresiones. Aquí lo que me va a decir es que el conjunto me va a dar el conjunto de todos los etiquetas estudiantes. 213 00:32:04,519 --> 00:32:18,079 Entonces, como está diciendo, dirección absoluta, universidad o estudiante, pues haría todos los que hay. Y en nodo actual es el nodo en el que se va a encontrar en ese mismo momento el procesador. 214 00:32:18,079 --> 00:32:26,000 Aquí está indicando que dame el nodo dentro de la jerarquía absoluta o de la dirección absoluta.