1 00:00:04,719 --> 00:00:12,939 la universidad estudiante número uno y dentro nombre está indicando este aquí tenemos la 2 00:00:12,939 --> 00:00:17,859 diferencia entre nodo actual no lo contestó y tamaño del contexto que el primero es el 3 00:00:17,859 --> 00:00:21,300 nodo en el que se encuentra el procesador que el segundo es el conjunto de nodos sobre los 4 00:00:21,300 --> 00:00:28,320 que se va a evaluar la expresión y que el tercero es el número total de nodos del contexto bien 5 00:00:28,320 --> 00:00:33,719 ruta locales de localización en x para la protección indica el camino para localizar 6 00:00:33,719 --> 00:00:40,759 un nodo en XML, ya lo hemos visto. Es posible que te devuelva un conjunto, porque no siempre 7 00:00:40,759 --> 00:00:46,820 va a tener un contenido, puede estar vacío. La creación de rutas de localización se crean 8 00:00:46,820 --> 00:00:51,259 uniendo varios pasos de localización y se pueden usar, lo hemos visto, rutas absolutas 9 00:00:51,259 --> 00:00:56,479 y rutas relativas. Aquí tenemos rutas de localización básica, sería rutas absolutas 10 00:00:56,479 --> 00:01:00,280 a través del nodo RAID, que lo hemos visto antes, localización del elemento, que sería 11 00:01:00,280 --> 00:01:07,280 más repetido del anterior, ruta relativa, lo veis, no ha añadido aquí nada, y luego localización de atributos, que sería a través del arroba 12 00:01:07,280 --> 00:01:14,239 para indicar un determinado atributo. Luego, rutas de localización básicas en cuanto a localización de comentarios, de nodos de texto 13 00:01:14,239 --> 00:01:20,480 y de instrucciones de procesamiento. Aquí tenemos este ejemplo, en el que veis ha metido un comentario en el XML para que sea localizado 14 00:01:20,480 --> 00:01:28,480 a través de comment. Comment, lo que nos va a indicar, búscame, mira lo que me comentabas, búscame dentro del fichero XML, búscame todos 15 00:01:28,480 --> 00:01:30,420 los comentarios 16 00:01:30,420 --> 00:01:31,760 que hay ahí, te sacará este, ¿vale? 17 00:01:32,459 --> 00:01:34,319 También text, que sería pues 18 00:01:34,319 --> 00:01:36,200 el de texto, que también 19 00:01:36,200 --> 00:01:38,500 lo hemos visto anteriormente, o sea, quiero que me saques 20 00:01:38,500 --> 00:01:40,099 pues al poner barra barra text 21 00:01:40,099 --> 00:01:42,420 me está indicando, sácame todos los textos 22 00:01:42,420 --> 00:01:42,959 que estén 23 00:01:42,959 --> 00:01:46,060 flanqueados por etiqueta 24 00:01:46,060 --> 00:01:48,079 y entonces aquí le saca a todos ellos 25 00:01:48,079 --> 00:01:50,200 y por último tenemos localización de instrucciones de 26 00:01:50,200 --> 00:01:51,400 procesamiento, bueno, esto es 27 00:01:51,400 --> 00:01:54,200 tampoco lo he puesto, pero tampoco tiene una 28 00:01:54,200 --> 00:01:56,079 gran, que es este tipo 29 00:01:56,079 --> 00:01:58,120 de instrucciones que aparecen aquí, que serían 30 00:01:58,120 --> 00:02:00,280 localizadas a través del proceso de instrucción. 31 00:02:00,579 --> 00:02:02,540 Pero bueno, esto no le daría 32 00:02:02,540 --> 00:02:03,480 yo mucha importancia, ¿vale? 33 00:02:04,939 --> 00:02:06,519 Perdona, Francisco, otra preguntilla. 34 00:02:07,400 --> 00:02:07,920 En 35 00:02:07,920 --> 00:02:10,300 la ruta relativa que pones 36 00:02:10,300 --> 00:02:12,419 es nodo barra hijo, delante 37 00:02:12,419 --> 00:02:14,120 de nodo no irían dos barras, 38 00:02:14,560 --> 00:02:15,860 o sea, quiero decir, porque nodo raíz 39 00:02:15,860 --> 00:02:17,819 es con una barra y 40 00:02:17,819 --> 00:02:20,120 No, porque al poner el 41 00:02:20,120 --> 00:02:22,500 nodo barra hijo, está diciendo que 42 00:02:22,500 --> 00:02:24,280 desde el 43 00:02:24,280 --> 00:02:26,240 lugar actual, ya no es una 44 00:02:26,240 --> 00:02:28,219 ruta absoluta. Ya no estoy empezando 45 00:02:28,219 --> 00:02:30,060 desde aquí. Estoy diciendo 46 00:02:30,060 --> 00:02:32,259 desde el nodo actual 47 00:02:32,259 --> 00:02:33,719 donde está 48 00:02:33,719 --> 00:02:36,120 el procesador, 49 00:02:36,479 --> 00:02:38,419 desde ahí recórreme 50 00:02:38,419 --> 00:02:40,060 esto. Por eso es más relativa. 51 00:02:40,400 --> 00:02:41,259 ¿No ves que aquí no he puesto barra? 52 00:02:42,439 --> 00:02:43,780 Sí, pero quiere decir, por ejemplo, 53 00:02:44,000 --> 00:02:45,680 imaginemos que quiero sacar 54 00:02:45,680 --> 00:02:48,060 párrafos. Entonces, 55 00:02:49,180 --> 00:02:50,180 sería párrafo, 56 00:02:50,319 --> 00:02:52,319 barra, o sea, contenido 57 00:02:52,319 --> 00:02:53,960 barra, párrafo, entiendo, ¿no? 58 00:02:54,439 --> 00:02:56,000 A ver, si tú, por ejemplo, 59 00:02:56,000 --> 00:02:58,099 le pones, tú quieres coger 60 00:02:58,099 --> 00:03:00,219 párrafos, pero quieres que te saque 61 00:03:00,219 --> 00:03:02,139 todos, sería el barra, barra 62 00:03:02,139 --> 00:03:03,979 p, que es lo que hemos visto antes, entre llaves, 63 00:03:04,139 --> 00:03:05,460 ¿vale? O sea, el 64 00:03:05,460 --> 00:03:07,599 ese te va a recorrer todo, desde 65 00:03:07,599 --> 00:03:10,599 el elemento raíz te va a recorrer todo el documento, 66 00:03:10,680 --> 00:03:12,120 ¿vale? Esa sería 67 00:03:12,120 --> 00:03:14,340 la diferencia, o sea, podemos tener tres vías, 68 00:03:14,840 --> 00:03:16,000 bueno, cuatro. Tendríamos 69 00:03:16,000 --> 00:03:18,159 el elemento raíz, que te va a empezar desde el raíz, 70 00:03:18,419 --> 00:03:19,840 yo, la ruta absoluta, ¿vale? 71 00:03:20,080 --> 00:03:21,539 Le pongo documentos, título, 72 00:03:21,840 --> 00:03:23,939 lo que quiera, ¿vale? Luego, el 73 00:03:23,939 --> 00:03:25,240 elemento que 74 00:03:25,240 --> 00:03:27,259 es igual que 75 00:03:27,259 --> 00:03:29,539 cuando tú estás manejando 76 00:03:29,539 --> 00:03:32,020 un OMS2 o Linux o igual 77 00:03:32,020 --> 00:03:34,099 desde el directorio actual 78 00:03:34,099 --> 00:03:36,360 si tú no le pones una barra, desde ese directorio 79 00:03:36,360 --> 00:03:38,060 actual, desde donde estás 80 00:03:38,060 --> 00:03:40,020 le está pidiendo que 81 00:03:40,020 --> 00:03:41,960 se recorra nodo e hijo 82 00:03:41,960 --> 00:03:42,340 ¿vale? 83 00:03:44,099 --> 00:03:46,259 y la tercera vía sería 84 00:03:46,259 --> 00:03:47,659 ponme dos barras delante 85 00:03:47,659 --> 00:03:50,000 y te va a recorrer todo ello pero no sólo 86 00:03:50,000 --> 00:03:51,280 te va a 87 00:03:51,280 --> 00:03:53,979 parar en la primera que encuentres, sino que va a 88 00:03:53,979 --> 00:04:02,680 recorrer y te va a localizar todos los que haya no sé si me explico las vías y luego la cuarta 89 00:04:02,680 --> 00:04:11,659 que sería pues para atributos nada más vale que sería con el arroba vale vale como tienes en x 90 00:04:11,659 --> 00:04:16,300 para tenemos el comité como dyn de asterisco que selecciona cualquier nodo en cualquier nodo de 91 00:04:16,300 --> 00:04:22,980 elemento el no de que selecciona cualquier tipo de nodo y luego el seleccionar cualquier nodo de 92 00:04:22,980 --> 00:04:28,920 atributo que ya hemos visto antes en un ejemplo vale aquí tenemos los tres ejemplos este es el 93 00:04:28,920 --> 00:04:37,319 fichero xml y lo que hace es que ruta absoluta desde empresa y en nodo vale pues que lo que va 94 00:04:37,319 --> 00:04:42,420 a hacer el primer nodo que encuentra dentro de empresa que es empleado y cogerá y se sacará 95 00:04:42,420 --> 00:04:51,899 los dos empleados en la otra vía sería ponme desde valor absoluto esa dirección absoluta 96 00:04:51,899 --> 00:04:56,560 desde empresa y me sacas todos. De hecho, todo lo que esté contenido dentro de empresa 97 00:04:56,560 --> 00:05:03,540 te lo sacará. Y la otra vía sería a través de los atributos. Cógeme desde dirección 98 00:05:03,540 --> 00:05:07,920 absoluta, desde empresa, pasas a empleado y dentro de empleado me coges todos los atributos 99 00:05:07,920 --> 00:05:13,560 que haya. Como solo tiene uno, bueno, tiene dos, perdón. Te coge este y te coge este. 100 00:05:13,980 --> 00:05:20,569 Y ya estaría. Funciones. También XPath proporciona funciones. Ya hemos visto algunas. 101 00:05:20,569 --> 00:05:24,509 estas funciones para operar sobre los conjuntos de nodos seleccionados 102 00:05:24,509 --> 00:05:27,430 y las funciones pueden combinarse con rutas de localización para obtener 103 00:05:27,430 --> 00:05:30,189 información específica. Tenemos boolean 104 00:05:30,189 --> 00:05:32,189 not, true, false 105 00:05:32,189 --> 00:05:35,430 count, position, last 106 00:05:35,430 --> 00:05:39,949 aquí he metido tres de las funciones 107 00:05:39,949 --> 00:05:42,089 que serían count, que ya lo hemos visto anteriormente 108 00:05:42,089 --> 00:05:45,149 que lo único que te hace count es que de esta ruta 109 00:05:45,149 --> 00:05:47,769 empresa empleado 110 00:05:47,769 --> 00:05:49,350 cuéntame cuántos 111 00:05:49,350 --> 00:06:03,170 cuántos hay, ¿vale? Y te los cuenta, serían los cuatro que hay, ¿vale? Aquí esta otra nos está indicando, pues, que dentro, pues, de empresa, coja al empleado que está en la posición 2 y saque su nombre, 112 00:06:03,170 --> 00:06:15,949 y saca, pues, lógicamente, Ana. Y el tercero, con la función last, hemos utilizado la función count, hemos utilizado la función position, y ahora vamos a utilizar la función last, que es que te dé el último nodo, ¿vale? 113 00:06:15,949 --> 00:06:26,490 Entonces se está cogiendo empresa, dentro de empresa el elemento empleado, cuyo valor sea el último, que será el 4, y es el que te va a sacar. 114 00:06:28,589 --> 00:06:34,509 También tenemos funciones como name, que devuelve el nombre de un nodo, local name, que devuelve el nombre local de un nodo, 115 00:06:34,670 --> 00:06:38,730 y namespace urri, que devuelve el urri del espacio de nombre del nodo. 116 00:06:38,829 --> 00:06:40,170 Aquí no he puesto ejemplos, pero bueno. 117 00:06:40,170 --> 00:06:43,209 se haría eterno, normalize space 118 00:06:43,209 --> 00:06:47,069 que elimina espacios necesarios en una cadena, string que devuelve un objeto 119 00:06:47,069 --> 00:06:51,230 como una cadena, concat ya lo hemos visto y aquí hay un ejemplo de concat 120 00:06:51,230 --> 00:06:55,110 string length que nos va a devolver el número de caracteres de una cadena, bueno como veis hay 121 00:06:55,110 --> 00:06:59,209 muchas funciones, aquí tengo un ejemplo de suma en el que bueno en este fichero 122 00:06:59,209 --> 00:07:02,350 de XML lo que ha hecho es que sumame 123 00:07:02,350 --> 00:07:06,930 todos los elementos pues que salario hace 124 00:07:06,930 --> 00:07:12,370 la ruta absoluta desde empresa, empleado hasta salario y que coge todo si quiero que me lo sumes 125 00:07:12,370 --> 00:07:16,470 y me obtengas el resultado, con lo cual suma no va a tener un número. 126 00:07:17,790 --> 00:07:25,750 Y ya pasamos a predicados. ¿Qué es un predicado? Es una expresión booleana dentro de una ruta 127 00:07:25,750 --> 00:07:30,910 de localización y esta incluye unos corchetes. ¿Para qué va a servir? Para filtrar nodos 128 00:07:30,910 --> 00:07:36,009 en función de ciertas características. Permite seleccionar nodos específicos dentro de una 129 00:07:36,009 --> 00:07:40,870 ruta de localización y puede incorporar esas funciones que hemos visto para mayor 130 00:07:40,870 --> 00:07:47,110 petición. Aquí tendríamos un ejemplo, pero bueno, ya hemos visto algunos anteriormente. 131 00:07:47,750 --> 00:07:54,790 Aquí tenemos una ruta absoluta que va desde receta, ingredientes y luego ingrediente y 132 00:07:54,790 --> 00:08:00,970 le ha metido aquí el predicado. Está diciendo, oye, cógeme aquel atributo código en el 133 00:08:00,970 --> 00:08:12,290 que su valor sea igual a 1, y aquel que sea atributo código de valor 1, me coges el valor de su nombre, que sería concretamente este de aquí, ¿vale? 134 00:08:12,730 --> 00:08:25,889 Tenemos los ejes en predicado, los ejes serían, pues, todos estos que aparecen aquí, child, attribute, descendant, self, parent y ancestor. 135 00:08:25,889 --> 00:08:37,029 Child nos va a indicar, si veis aquí la ruta absoluta, nos va a indicar que cojamos el elemento hijo. 136 00:08:37,029 --> 00:08:51,629 Aquí está diciendo que pasemos desde receta a ingredientes y dentro de ingredientes cojamos el hijo y dentro del hijo el valor de nombre. 137 00:08:51,629 --> 00:09:05,090 Aquí estaría que cogería todos los elementos en nombre que serían harina, azúcar y manzana. Esto también no hace falta ponerlos así, también se podría obtener, ya lo hemos visto de la otra manera anteriormente. 138 00:09:05,090 --> 00:09:34,590 Entonces, serían las dos posibles vías que se pueda coger. En cuanto a atributo, esto ya lo hemos visto anteriormente. En cuanto a self, sería, pues, para indicar el nodo actual. En cuanto a padre, pues, sería para coger el padre y luego tenemos ancestor y descendent, que sería, pues, para el ancestor, sería, pues, el ancestor superior, pues, de toda la, de toda la, de, ah, el ancestor, el máximo superior, 139 00:09:34,590 --> 00:09:38,450 o padre superior al que esté marcado. 140 00:09:38,870 --> 00:09:42,669 Aquí te está diciendo que dentro de receta pasas ingredientes y dentro de ingrediente y luego nombre. 141 00:09:43,169 --> 00:09:48,850 Y dentro te está diciendo que como ancestro receta, te daría toda ella. 142 00:09:50,750 --> 00:10:00,889 Estas vías de poder llegar a cada una de estas líneas se pueden hacer tanto con estos ejes como como lo hemos visto anteriormente. 143 00:10:01,029 --> 00:10:02,429 Te va a salir al final el mismo resultado. 144 00:10:02,429 --> 00:10:17,429 Aquí tenemos las distintas expresiones de XPath, en la que tenemos la que selecciona hijos directos, la que selecciona un atributo, la que selecciona todos los descendientes, la que selecciona el nodo actual, el nodo padre o el nodo antecesor 145 00:10:18,090 --> 00:10:27,899 Si veis, yo puedo lograr lo mismo que he hecho aquí, veis el hijo, nada más que poniendo nombre, no habría falta ponerlo de esta manera 146 00:10:27,899 --> 00:10:32,360 La otra manera era, acordaos, para seleccionar el atributo era a través del arroba 147 00:10:32,360 --> 00:10:36,399 y seleccionar todos los descendientes como lo hemos dicho anteriormente, 148 00:10:36,500 --> 00:10:40,620 pues a través de las dos barras recorría y buscaba a todos en profundidad 149 00:10:40,620 --> 00:10:42,320 a través de todo el fichero XML. 150 00:10:42,840 --> 00:10:48,679 Para seleccionar el nodo actual o el padre, pues sería como pasa en Linux, 151 00:10:48,679 --> 00:10:52,879 pues a través de un punto o a través de dos puntos. 152 00:10:53,620 --> 00:10:57,120 Luego tenemos, bueno, esto ya lo hemos visto anteriormente, el nuevo repaso. 153 00:10:58,100 --> 00:11:00,940 Tenemos los operadores lógicos, que no hemos visto ningún ejemplo, 154 00:11:00,940 --> 00:11:07,299 pero básicamente si lo veis aquí lo que está poniendo es que entre corchetes le está poniendo pues el operador AN, el OR, etc. 155 00:11:07,519 --> 00:11:14,860 Solo voy a ver este, por ejemplo, que sería pues dentro pues de la dirección absoluta de empresa, empresa empleado, 156 00:11:15,820 --> 00:11:24,539 cógeme aquellos cuyo departamento sea igual a ventas, el valor de departamento sea igual a ventas y salario sea mayor de 3.000. 157 00:11:24,539 --> 00:11:28,179 Entonces recorrerá todos ellos y te dará pues concretamente el que suceda eso. 158 00:11:28,179 --> 00:11:48,190 El único que cumple es este que tiene un salario de 3.500 y es el que te va a sacar. Aquí tenemos un ejemplo que es el ejemplo que aparece en el texto de la aula virtual. A ver, es más de lo que hemos visto. 159 00:11:48,190 --> 00:12:03,090 Si veis aquí lo he puesto todos los ejemplos, pero lo he puesto un poquito más explicado para que lo entendáis el que no lo entienda. Os cuento el primer punto y el resto me lo voy a saltar porque ya vamos mal de tiempo. 160 00:12:03,090 --> 00:12:28,850 Pero nos dice en el aula virtual construir las sentencias XPath que permitan obtener los siguientes datos. Por ejemplo, vamos a coger el segundo. Teléfono de casa del propietario. Lógicamente tenemos que ir en la ruta absoluta o tenemos que ir de agenda, propietario, teléfonos y luego casa, porque lo que realmente queremos es esto. Este sería el resultado de la misma. 161 00:12:28,850 --> 00:12:31,389 es bastante facilito 162 00:12:31,389 --> 00:12:33,769 lo repasáis, viene aquí un poquito 163 00:12:33,769 --> 00:12:35,509 más explicado que lo que viene 164 00:12:35,509 --> 00:12:37,350 en el aula, lo voy a poner por pasos 165 00:12:37,350 --> 00:12:39,590 para que lo veáis y con la explicación aquí abajo 166 00:12:39,590 --> 00:12:43,649 acceso a datos 167 00:12:43,649 --> 00:12:45,009 de otro documento XML 168 00:12:45,009 --> 00:12:47,250 con la función document 169 00:12:47,250 --> 00:12:49,490 aquí XPath permite acceder a datos 170 00:12:49,490 --> 00:12:51,110 del XML con el que 171 00:12:51,110 --> 00:12:53,309 se trabaja directamente, que es el que hemos visto 172 00:12:53,309 --> 00:12:55,490 pero sin embargo, que sucede si queremos acceder 173 00:12:55,490 --> 00:12:57,549 a otros archivos de XML, pues hay que utilizar 174 00:12:57,549 --> 00:12:58,309 la función document 175 00:12:58,309 --> 00:13:20,200 Hay que decir que el documento no pertenece a XPath, sino a XSLT. Va a permitir obtener datos de otro archivo XML externo, al que ya tenemos. Aquí tenemos un ejemplo en el que tenemos el XML base y luego tenemos otro archivo externo, que sería este. 176 00:13:20,200 --> 00:13:41,159 Bien, ¿cómo lo introduce? Lo introduce a través de document y una referencia a ese archivo externo. La sentencia XSL que se le añade al documento XSLT sería esta de aquí, a través del value of select, en el que indica document y el archivo que quiere optar. 177 00:13:41,159 --> 00:14:07,320 Aquí lo he puesto mejor explicado, que sería toda esta línea, en el que lo que hace es cargar, este sería el original, este sería el externo, entonces lo que hace es que carga el archivo XML externo y ya nos permite acceder también a como si un fichero XML estuviera integrado dentro del otro. 178 00:14:07,320 --> 00:14:35,279 Y a continuación le añades esta otra línea aquí, en la que nos va a indicar que, oye, búscame dentro del mismo entre salarios empleado y me está diciendo, y ahora dime, cógeme, está poniendo una expresión en la que nos está diciendo, filtra los empleados cuyo ID coincida con el ID del nodo actual en el XML principal, con lo cual está comparando este que ha introducido con el principal anterior. 179 00:14:35,279 --> 00:14:57,419 Veis la utilidad de documento. Plantillas, lo que hemos visto anteriormente, que era el XSL template, que os prometí al principio que hablaríamos de ello y que es bastante útil. De hecho, la práctica es hacer básicamente un fichero XSLT y se puede hacer de dos modos. 180 00:14:57,419 --> 00:15:04,379 Lo puedes hacer o bien a través de un bucle con un for each o lo puedes hacer a través de un template. 181 00:15:05,840 --> 00:15:10,100 Un template permite definir el formato de salida para ciertos datos XML. 182 00:15:10,840 --> 00:15:17,100 Usa el atributo match para seleccionar nodos según XPAT y su contenido debe estar bien estructurado en XHT. 183 00:15:18,100 --> 00:15:22,639 Aquí tenemos las tres sentencias que vamos a utilizar en un template, que serían estas tres etiquetas. 184 00:15:22,639 --> 00:15:28,600 sería template con match, que define la plantilla para la raíz del documento. 185 00:15:28,679 --> 00:15:35,220 Luego tendríamos el apply templates, que nos va a decir dónde va a aplicar la plantilla a los nodos. 186 00:15:35,659 --> 00:15:43,320 Y por último, define la plantilla para cada uno de los elementos en el template. 187 00:15:43,500 --> 00:15:43,980 Ahora lo veremos. 188 00:15:44,500 --> 00:15:45,639 Aquí tenemos los pasos. 189 00:15:46,200 --> 00:15:50,700 Primero este es el XML que tenemos, y vemos su jerarquía. 190 00:15:50,700 --> 00:16:16,659 A continuación, nosotros lo que queremos llegar es a esta salida. Entonces, lo primero que hace, si veis en el fichero XSLT, aparte de la primera línea que siempre es la misma, también la segunda, que es el output, para decir que va a ser un documento HTML, entramos en lo que es la plantilla y va a ser una plantilla además que se va a aplicar a la raíz del documento XML. 191 00:16:16,659 --> 00:16:31,340 Por eso ha puesto la barra. A continuación, está metiendo los LREs, las etiquetas HTML que van a salir tal y como están metidas. No hay transformación. Y aquí, lista de empleados, tal. Si veis, eso va a ser exactamente igual aquí. 192 00:16:31,340 --> 00:16:44,679 ¿Vale? Llega hasta aquí y ahora va a aplicar la plantilla. La plantilla es a través de la Apply Templates, en el que primero selecciona dónde va a aplicar la plantilla y va a ser justamente dónde. 193 00:16:44,799 --> 00:16:55,799 Donde Empresa, en la dirección absoluta Empresa barra Empleado. Si veis aquí, aquí hay una tabla. Aquí está haciendo la aplicación de la misma. 194 00:16:55,799 --> 00:17:09,140 Y aquí hay una tabla. Después necesita la plantilla para cada empleado, porque lo que va a querer meter dentro de cada celda de los TDs va a ser el nombre y el puesto de cada uno de los empleados. 195 00:17:09,140 --> 00:17:28,980 Y eso se va a aplicar, si veis esto realmente no lo he hecho, podía haberlo hecho en una diapositiva en el que podía haber hecho con un for each lo mismo y realmente lo único que está haciendo es le está aplicando a cada empleado para generar una fila en la tabla con el nombre y el puesto. 196 00:17:28,980 --> 00:17:31,019 ¿vale? realmente lo que va a hacer 197 00:17:31,019 --> 00:17:32,940 esto al final es una tabla con una fila 198 00:17:32,940 --> 00:17:34,339 en la que va a tener 199 00:17:34,339 --> 00:17:37,019 cada fila, con respecto a aquí 200 00:17:37,019 --> 00:17:38,900 como va a tener dos filas porque no tiene más que un 201 00:17:38,900 --> 00:17:41,240 nombre y puesto, pues era lo que va a generar 202 00:17:41,240 --> 00:17:42,940 y si veis, lo que está haciendo 203 00:17:42,940 --> 00:17:44,960 es como una especie de bucle, es un 204 00:17:44,960 --> 00:17:46,960 for each, entonces esto se puede 205 00:17:46,960 --> 00:17:48,960 haber hecho con un for each o bien lo puedes hacer a través 206 00:17:48,960 --> 00:17:51,119 de un template, que sería 207 00:17:51,119 --> 00:17:52,579 pues este que he aplicado aquí, ¿vale? 208 00:17:54,519 --> 00:17:55,200 Francisco, perdón 209 00:17:55,200 --> 00:17:57,039 una preguntilla, el template del 210 00:17:57,039 --> 00:17:58,960 el match, el primero, el de la plantilla 211 00:17:58,960 --> 00:18:01,140 raíz, o sea, ¿ese es 212 00:18:01,140 --> 00:18:02,779 necesario o 213 00:18:02,779 --> 00:18:03,880 no? 214 00:18:04,640 --> 00:18:07,140 Sí, porque tú le estás diciendo, oye, aplícame el template 215 00:18:07,140 --> 00:18:07,700 para 216 00:18:07,700 --> 00:18:11,059 dentro de este, imagínate 217 00:18:11,059 --> 00:18:12,859 este fichero de XML muy pequeñito, pero tú 218 00:18:12,859 --> 00:18:14,220 imagínate que quieres aplicarle 219 00:18:14,220 --> 00:18:15,359 aquel 220 00:18:15,359 --> 00:18:18,839 el template, lo quieres aplicar a una parte del 221 00:18:18,839 --> 00:18:20,420 XML, pues 222 00:18:20,420 --> 00:18:22,779 no vas a poner la barra, la barra te está indicando 223 00:18:22,779 --> 00:18:24,380 que lo va a aplicar a todo, ¿vale? 224 00:18:25,380 --> 00:18:25,980 Va a empezar aquí. 225 00:18:27,039 --> 00:18:46,519 Para eso tienes que aplicar desde dónde va a generarse esa estructura. ¿Cómo lo hace? Lo hace a través del match, del template. El template te va a indicar que se va a aplicar a la raíz del XML, a partir de ahí. 226 00:18:48,359 --> 00:18:52,740 O sea, que normalmente se suele poner siempre el match por abajo, normalmente. 227 00:18:52,740 --> 00:19:09,660 Sí, pero imagínate que a lo mejor quieras poner, quieres hacer el template, que realmente esto es una plantilla, una plantilla que le vas a aplicar a una zona de tu XML. Aquí se le está aplicando a todo el XML, ¿vale? Pero tú imagínate que quieres aplicar esa plantilla a una parte del XML. 228 00:19:09,660 --> 00:19:27,579 Porque imagínate un XML de esos brutales que tiene, no sé, 200 líneas y tú le quieres 300, 1000 líneas, le quieres aplicar solo a una parte de ese XML, pues le aplicarías el template a esa parte, ¿vale? Entonces, lógicamente, no habría que poner barra, habría que poner otra cosa, ¿vale? Pero esto indica que se lo va a aplicar a todo, ¿vale? 229 00:19:27,579 --> 00:19:43,519 Pero fijaos qué fácil es hacer una plantilla para hacer una operación recursiva, por eso no es más que una operación recursiva, en la que está recorriendo de manera recursiva todo el XML y metiendo lo que yo quiero en una tabla a través de filas. 230 00:19:43,519 --> 00:19:45,400 ¿Cómo lo puedo hacer también? 231 00:19:45,579 --> 00:19:47,039 Que es lo que os he dicho de la tarea 232 00:19:47,039 --> 00:19:48,779 La tarea la puedo hacer o así 233 00:19:48,779 --> 00:19:50,119 Con esto 234 00:19:50,119 --> 00:19:52,480 O la puedo hacer con 235 00:19:52,480 --> 00:19:54,279 Con un for each 236 00:19:54,279 --> 00:19:56,779 Ya digo, el que 237 00:19:56,779 --> 00:19:58,660 Me sepa hacer 238 00:19:58,660 --> 00:20:01,079 Bueno, no es necesario, pero el que me sepa hacer 239 00:20:01,079 --> 00:20:01,960 De las dos vías 240 00:20:01,960 --> 00:20:04,759 Le pongo un 10, si me lo sabe explicar 241 00:20:04,759 --> 00:20:08,039 ¿Y qué me queda? 242 00:20:08,720 --> 00:20:09,619 Son menos 20 ya 243 00:20:09,619 --> 00:20:10,579 A ver, me queda 244 00:20:10,579 --> 00:20:14,900 esto es un ejemplo también como el que hemos visto 245 00:20:14,900 --> 00:20:16,819 DotaTemplate, nada, lo leéis 246 00:20:16,819 --> 00:20:18,960 esto también se indica 247 00:20:18,960 --> 00:20:20,539 cuál sería el resultado de aplicar la transformación 248 00:20:20,539 --> 00:20:22,420 bueno, este es un ejercicio que ahí viene en la 249 00:20:22,420 --> 00:20:24,380 y os lo quería poner aquí 250 00:20:24,380 --> 00:20:26,900 para que estuviera visualmente 251 00:20:26,900 --> 00:20:28,940 un poquito mejor, no lo explico, viene explicado 252 00:20:28,940 --> 00:20:29,900 en el aula virtual 253 00:20:29,900 --> 00:20:32,579 ya nos quedan los procesadores XSLT 254 00:20:32,579 --> 00:20:34,779 esto es un poco de teoría 255 00:20:34,779 --> 00:20:36,880 en el que, bueno, es un software que transforma 256 00:20:36,880 --> 00:20:38,980 el documento XML aplicando reglas XSLT 257 00:20:38,980 --> 00:20:41,500 Es el que realmente va a ejecutar esta transformación. 258 00:20:42,140 --> 00:20:47,440 Genera un documento de salida, ya lo hemos visto, que realmente lo que va a generar es una información formateada 259 00:20:47,440 --> 00:20:51,940 y que puede ejecutarse tanto en navegadores como en servidores web como en línea por línea de comandos. 260 00:20:52,500 --> 00:20:59,140 Existen varios métodos para aplicar XSLT, aquí tenemos todos, por ejemplo, de Microsoft XML, hay muchos. 261 00:21:00,200 --> 00:21:03,460 Los navegadores modernos permiten aplicar XSLT. 262 00:21:03,460 --> 00:21:18,619 Ya os he dicho Edge y... no me acuerdo cuál era el otro, los dos. Firefox, pero también Chrome me imagino, ¿no? Sí, Chrome también. Permiten ya, viene introducido para que se pueda aplicar XSLT, ¿vale? 263 00:21:18,619 --> 00:21:28,819 para enlazarlo a acordador de esta línea, que ya la hemos visto tres veces, con el href a la hoja xslt y ya está. 264 00:21:28,819 --> 00:21:37,500 La transformación queda ligada a la vista del navegador y no se puede reutilizar fácilmente en otro sistema, dependencia del soporte xslt del navegador. 265 00:21:39,019 --> 00:21:46,980 Edición y procesamiento, la mayoría de editores xml permiten escoger el procesador xslt y se pueden configurar para usar diferentes motores de transformación. 266 00:21:46,980 --> 00:21:55,420 Bueno, esto no nos queda más que los depuradores XSLT, que es un software que va a permitir analizar la transformación paso a paso. 267 00:21:56,160 --> 00:22:02,079 En cuanto, claro, esto no va a permitir, como todo depurador, ver o localizar dónde está el error. 268 00:22:02,779 --> 00:22:11,880 ¿Qué se puede hacer en funcionalidad de un depurador? Pues como todos los depuradores, ejecutar paso a paso, hasta el cursor, hasta el final, pausar y detener la ejecución, pues como todos. 269 00:22:11,880 --> 00:22:19,119 que permite visualizar simultáneamente la plantilla que es SLT, los datos XML y la salida generada. 270 00:22:19,279 --> 00:22:25,839 Fijaos, está bastante bien porque todo a la vez en tiempo real y que nos permite recorrer cada uno por pasos 271 00:22:25,839 --> 00:22:27,700 viendo dónde puede estar el error. 272 00:22:28,920 --> 00:22:30,700 ¿Qué facilita la corrección de errores? 273 00:22:31,619 --> 00:22:37,460 Ayuda a detectar qué plantillas generan la salida incorrecta, facilita el ajuste del formato y la lógica de transformación 274 00:22:37,460 --> 00:22:41,099 y permite probar distintas modificaciones sin afectar al XML original. 275 00:22:41,880 --> 00:22:49,259 Algunos ejemplos de herramientas están aquí, Oxygen, Altova y Stylus Studio y poco más.