Activa JavaScript para disfrutar de los vídeos de la Mediateca.
Conversión y Adaptación de Documentos XML. Parte 2 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Conversión y Adaptación de Documentos XML
la universidad estudiante número uno y dentro nombre está indicando este aquí tenemos la
00:00:04
diferencia entre nodo actual no lo contestó y tamaño del contexto que el primero es el
00:00:12
nodo en el que se encuentra el procesador que el segundo es el conjunto de nodos sobre los
00:00:17
que se va a evaluar la expresión y que el tercero es el número total de nodos del contexto bien
00:00:21
ruta locales de localización en x para la protección indica el camino para localizar
00:00:28
un nodo en XML, ya lo hemos visto. Es posible que te devuelva un conjunto, porque no siempre
00:00:33
va a tener un contenido, puede estar vacío. La creación de rutas de localización se crean
00:00:40
uniendo varios pasos de localización y se pueden usar, lo hemos visto, rutas absolutas
00:00:46
y rutas relativas. Aquí tenemos rutas de localización básica, sería rutas absolutas
00:00:51
a través del nodo RAID, que lo hemos visto antes, localización del elemento, que sería
00:00:56
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
00:01:00
para indicar un determinado atributo. Luego, rutas de localización básicas en cuanto a localización de comentarios, de nodos de texto
00:01:07
y de instrucciones de procesamiento. Aquí tenemos este ejemplo, en el que veis ha metido un comentario en el XML para que sea localizado
00:01:14
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
00:01:20
los comentarios
00:01:28
que hay ahí, te sacará este, ¿vale?
00:01:30
También text, que sería pues
00:01:32
el de texto, que también
00:01:34
lo hemos visto anteriormente, o sea, quiero que me saques
00:01:36
pues al poner barra barra text
00:01:38
me está indicando, sácame todos los textos
00:01:40
que estén
00:01:42
flanqueados por etiqueta
00:01:42
y entonces aquí le saca a todos ellos
00:01:46
y por último tenemos localización de instrucciones de
00:01:48
procesamiento, bueno, esto es
00:01:50
tampoco lo he puesto, pero tampoco tiene una
00:01:51
gran, que es este tipo
00:01:54
de instrucciones que aparecen aquí, que serían
00:01:56
localizadas a través del proceso de instrucción.
00:01:58
Pero bueno, esto no le daría
00:02:00
yo mucha importancia, ¿vale?
00:02:02
Perdona, Francisco, otra preguntilla.
00:02:04
En
00:02:07
la ruta relativa que pones
00:02:07
es nodo barra hijo, delante
00:02:10
de nodo no irían dos barras,
00:02:12
o sea, quiero decir, porque nodo raíz
00:02:14
es con una barra y
00:02:15
No, porque al poner el
00:02:17
nodo barra hijo, está diciendo que
00:02:20
desde el
00:02:22
lugar actual, ya no es una
00:02:24
ruta absoluta. Ya no estoy empezando
00:02:26
desde aquí. Estoy diciendo
00:02:28
desde el nodo actual
00:02:30
donde está
00:02:32
el procesador,
00:02:33
desde ahí recórreme
00:02:36
esto. Por eso es más relativa.
00:02:38
¿No ves que aquí no he puesto barra?
00:02:40
Sí, pero quiere decir, por ejemplo,
00:02:42
imaginemos que quiero sacar
00:02:44
párrafos. Entonces,
00:02:45
sería párrafo,
00:02:49
barra, o sea, contenido
00:02:50
barra, párrafo, entiendo, ¿no?
00:02:52
A ver, si tú, por ejemplo,
00:02:54
le pones, tú quieres coger
00:02:56
párrafos, pero quieres que te saque
00:02:58
todos, sería el barra, barra
00:03:00
p, que es lo que hemos visto antes, entre llaves,
00:03:02
¿vale? O sea, el
00:03:04
ese te va a recorrer todo, desde
00:03:05
el elemento raíz te va a recorrer todo el documento,
00:03:07
¿vale? Esa sería
00:03:10
la diferencia, o sea, podemos tener tres vías,
00:03:12
bueno, cuatro. Tendríamos
00:03:14
el elemento raíz, que te va a empezar desde el raíz,
00:03:16
yo, la ruta absoluta, ¿vale?
00:03:18
Le pongo documentos, título,
00:03:20
lo que quiera, ¿vale? Luego, el
00:03:21
elemento que
00:03:23
es igual que
00:03:25
cuando tú estás manejando
00:03:27
un OMS2 o Linux o igual
00:03:29
desde el directorio actual
00:03:32
si tú no le pones una barra, desde ese directorio
00:03:34
actual, desde donde estás
00:03:36
le está pidiendo que
00:03:38
se recorra nodo e hijo
00:03:40
¿vale?
00:03:41
y la tercera vía sería
00:03:44
ponme dos barras delante
00:03:46
y te va a recorrer todo ello pero no sólo
00:03:47
te va a
00:03:50
parar en la primera que encuentres, sino que va a
00:03:51
recorrer y te va a localizar todos los que haya no sé si me explico las vías y luego la cuarta
00:03:53
que sería pues para atributos nada más vale que sería con el arroba vale vale como tienes en x
00:04:02
para tenemos el comité como dyn de asterisco que selecciona cualquier nodo en cualquier nodo de
00:04:11
elemento el no de que selecciona cualquier tipo de nodo y luego el seleccionar cualquier nodo de
00:04:16
atributo que ya hemos visto antes en un ejemplo vale aquí tenemos los tres ejemplos este es el
00:04:22
fichero xml y lo que hace es que ruta absoluta desde empresa y en nodo vale pues que lo que va
00:04:28
a hacer el primer nodo que encuentra dentro de empresa que es empleado y cogerá y se sacará
00:04:37
los dos empleados en la otra vía sería ponme desde valor absoluto esa dirección absoluta
00:04:42
desde empresa y me sacas todos. De hecho, todo lo que esté contenido dentro de empresa
00:04:51
te lo sacará. Y la otra vía sería a través de los atributos. Cógeme desde dirección
00:04:56
absoluta, desde empresa, pasas a empleado y dentro de empleado me coges todos los atributos
00:05:03
que haya. Como solo tiene uno, bueno, tiene dos, perdón. Te coge este y te coge este.
00:05:07
Y ya estaría. Funciones. También XPath proporciona funciones. Ya hemos visto algunas.
00:05:13
estas funciones para operar sobre los conjuntos de nodos seleccionados
00:05:20
y las funciones pueden combinarse con rutas de localización para obtener
00:05:24
información específica. Tenemos boolean
00:05:27
not, true, false
00:05:30
count, position, last
00:05:32
aquí he metido tres de las funciones
00:05:35
que serían count, que ya lo hemos visto anteriormente
00:05:39
que lo único que te hace count es que de esta ruta
00:05:42
empresa empleado
00:05:45
cuéntame cuántos
00:05:47
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,
00:05:49
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?
00:06:03
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.
00:06:15
También tenemos funciones como name, que devuelve el nombre de un nodo, local name, que devuelve el nombre local de un nodo,
00:06:28
y namespace urri, que devuelve el urri del espacio de nombre del nodo.
00:06:34
Aquí no he puesto ejemplos, pero bueno.
00:06:38
se haría eterno, normalize space
00:06:40
que elimina espacios necesarios en una cadena, string que devuelve un objeto
00:06:43
como una cadena, concat ya lo hemos visto y aquí hay un ejemplo de concat
00:06:47
string length que nos va a devolver el número de caracteres de una cadena, bueno como veis hay
00:06:51
muchas funciones, aquí tengo un ejemplo de suma en el que bueno en este fichero
00:06:55
de XML lo que ha hecho es que sumame
00:06:59
todos los elementos pues que salario hace
00:07:02
la ruta absoluta desde empresa, empleado hasta salario y que coge todo si quiero que me lo sumes
00:07:06
y me obtengas el resultado, con lo cual suma no va a tener un número.
00:07:12
Y ya pasamos a predicados. ¿Qué es un predicado? Es una expresión booleana dentro de una ruta
00:07:17
de localización y esta incluye unos corchetes. ¿Para qué va a servir? Para filtrar nodos
00:07:25
en función de ciertas características. Permite seleccionar nodos específicos dentro de una
00:07:30
ruta de localización y puede incorporar esas funciones que hemos visto para mayor
00:07:36
petición. Aquí tendríamos un ejemplo, pero bueno, ya hemos visto algunos anteriormente.
00:07:40
Aquí tenemos una ruta absoluta que va desde receta, ingredientes y luego ingrediente y
00:07:47
le ha metido aquí el predicado. Está diciendo, oye, cógeme aquel atributo código en el
00:07:54
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?
00:08:00
Tenemos los ejes en predicado, los ejes serían, pues, todos estos que aparecen aquí, child, attribute, descendant, self, parent y ancestor.
00:08:12
Child nos va a indicar, si veis aquí la ruta absoluta, nos va a indicar que cojamos el elemento hijo.
00:08:25
Aquí está diciendo que pasemos desde receta a ingredientes y dentro de ingredientes cojamos el hijo y dentro del hijo el valor de nombre.
00:08:37
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.
00:08:51
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,
00:09:05
o padre superior al que esté marcado.
00:09:34
Aquí te está diciendo que dentro de receta pasas ingredientes y dentro de ingrediente y luego nombre.
00:09:38
Y dentro te está diciendo que como ancestro receta, te daría toda ella.
00:09:43
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.
00:09:50
Te va a salir al final el mismo resultado.
00:10:01
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
00:10:02
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
00:10:18
La otra manera era, acordaos, para seleccionar el atributo era a través del arroba
00:10:27
y seleccionar todos los descendientes como lo hemos dicho anteriormente,
00:10:32
pues a través de las dos barras recorría y buscaba a todos en profundidad
00:10:36
a través de todo el fichero XML.
00:10:40
Para seleccionar el nodo actual o el padre, pues sería como pasa en Linux,
00:10:42
pues a través de un punto o a través de dos puntos.
00:10:48
Luego tenemos, bueno, esto ya lo hemos visto anteriormente, el nuevo repaso.
00:10:53
Tenemos los operadores lógicos, que no hemos visto ningún ejemplo,
00:10:58
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.
00:11:00
Solo voy a ver este, por ejemplo, que sería pues dentro pues de la dirección absoluta de empresa, empresa empleado,
00:11:07
cógeme aquellos cuyo departamento sea igual a ventas, el valor de departamento sea igual a ventas y salario sea mayor de 3.000.
00:11:15
Entonces recorrerá todos ellos y te dará pues concretamente el que suceda eso.
00:11:24
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.
00:11:28
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.
00:11:48
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.
00:12:03
es bastante facilito
00:12:28
lo repasáis, viene aquí un poquito
00:12:31
más explicado que lo que viene
00:12:33
en el aula, lo voy a poner por pasos
00:12:35
para que lo veáis y con la explicación aquí abajo
00:12:37
acceso a datos
00:12:39
de otro documento XML
00:12:43
con la función document
00:12:45
aquí XPath permite acceder a datos
00:12:47
del XML con el que
00:12:49
se trabaja directamente, que es el que hemos visto
00:12:51
pero sin embargo, que sucede si queremos acceder
00:12:53
a otros archivos de XML, pues hay que utilizar
00:12:55
la función document
00:12:57
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.
00:12:58
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.
00:13:20
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.
00:13:41
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.
00:14:07
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.
00:14:35
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.
00:14:57
Un template permite definir el formato de salida para ciertos datos XML.
00:15:05
Usa el atributo match para seleccionar nodos según XPAT y su contenido debe estar bien estructurado en XHT.
00:15:10
Aquí tenemos las tres sentencias que vamos a utilizar en un template, que serían estas tres etiquetas.
00:15:18
sería template con match, que define la plantilla para la raíz del documento.
00:15:22
Luego tendríamos el apply templates, que nos va a decir dónde va a aplicar la plantilla a los nodos.
00:15:28
Y por último, define la plantilla para cada uno de los elementos en el template.
00:15:35
Ahora lo veremos.
00:15:43
Aquí tenemos los pasos.
00:15:44
Primero este es el XML que tenemos, y vemos su jerarquía.
00:15:46
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.
00:15:50
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í.
00:16:16
¿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.
00:16:31
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.
00:16:44
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.
00:16:55
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.
00:17:09
¿vale? realmente lo que va a hacer
00:17:28
esto al final es una tabla con una fila
00:17:31
en la que va a tener
00:17:32
cada fila, con respecto a aquí
00:17:34
como va a tener dos filas porque no tiene más que un
00:17:37
nombre y puesto, pues era lo que va a generar
00:17:38
y si veis, lo que está haciendo
00:17:41
es como una especie de bucle, es un
00:17:42
for each, entonces esto se puede
00:17:44
haber hecho con un for each o bien lo puedes hacer a través
00:17:46
de un template, que sería
00:17:48
pues este que he aplicado aquí, ¿vale?
00:17:51
Francisco, perdón
00:17:54
una preguntilla, el template del
00:17:55
el match, el primero, el de la plantilla
00:17:57
raíz, o sea, ¿ese es
00:17:58
necesario o
00:18:01
no?
00:18:02
Sí, porque tú le estás diciendo, oye, aplícame el template
00:18:04
para
00:18:07
dentro de este, imagínate
00:18:07
este fichero de XML muy pequeñito, pero tú
00:18:11
imagínate que quieres aplicarle
00:18:12
aquel
00:18:14
el template, lo quieres aplicar a una parte del
00:18:15
XML, pues
00:18:18
no vas a poner la barra, la barra te está indicando
00:18:20
que lo va a aplicar a todo, ¿vale?
00:18:22
Va a empezar aquí.
00:18:25
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í.
00:18:27
O sea, que normalmente se suele poner siempre el match por abajo, normalmente.
00:18:48
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.
00:18:52
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?
00:19:09
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.
00:19:27
¿Cómo lo puedo hacer también?
00:19:43
Que es lo que os he dicho de la tarea
00:19:45
La tarea la puedo hacer o así
00:19:47
Con esto
00:19:48
O la puedo hacer con
00:19:50
Con un for each
00:19:52
Ya digo, el que
00:19:54
Me sepa hacer
00:19:56
Bueno, no es necesario, pero el que me sepa hacer
00:19:58
De las dos vías
00:20:01
Le pongo un 10, si me lo sabe explicar
00:20:01
¿Y qué me queda?
00:20:04
Son menos 20 ya
00:20:08
A ver, me queda
00:20:09
esto es un ejemplo también como el que hemos visto
00:20:10
DotaTemplate, nada, lo leéis
00:20:14
esto también se indica
00:20:16
cuál sería el resultado de aplicar la transformación
00:20:18
bueno, este es un ejercicio que ahí viene en la
00:20:20
y os lo quería poner aquí
00:20:22
para que estuviera visualmente
00:20:24
un poquito mejor, no lo explico, viene explicado
00:20:26
en el aula virtual
00:20:28
ya nos quedan los procesadores XSLT
00:20:29
esto es un poco de teoría
00:20:32
en el que, bueno, es un software que transforma
00:20:34
el documento XML aplicando reglas XSLT
00:20:36
Es el que realmente va a ejecutar esta transformación.
00:20:38
Genera un documento de salida, ya lo hemos visto, que realmente lo que va a generar es una información formateada
00:20:42
y que puede ejecutarse tanto en navegadores como en servidores web como en línea por línea de comandos.
00:20:47
Existen varios métodos para aplicar XSLT, aquí tenemos todos, por ejemplo, de Microsoft XML, hay muchos.
00:20:52
Los navegadores modernos permiten aplicar XSLT.
00:21:00
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?
00:21:03
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á.
00:21:18
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.
00:21:28
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.
00:21:39
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.
00:21:46
En cuanto, claro, esto no va a permitir, como todo depurador, ver o localizar dónde está el error.
00:21:56
¿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.
00:22:02
que permite visualizar simultáneamente la plantilla que es SLT, los datos XML y la salida generada.
00:22:11
Fijaos, está bastante bien porque todo a la vez en tiempo real y que nos permite recorrer cada uno por pasos
00:22:19
viendo dónde puede estar el error.
00:22:25
¿Qué facilita la corrección de errores?
00:22:28
Ayuda a detectar qué plantillas generan la salida incorrecta, facilita el ajuste del formato y la lógica de transformación
00:22:31
y permite probar distintas modificaciones sin afectar al XML original.
00:22:37
Algunos ejemplos de herramientas están aquí, Oxygen, Altova y Stylus Studio y poco más.
00:22:41
- Idioma/s:
- Materias:
- Informática
- Niveles educativos:
- ▼ Mostrar / ocultar niveles
- Formación Profesional
- Ciclo formativo de grado básico
- Primer Curso
- Segundo Curso
- Ciclo formativo de grado medio
- Primer Curso
- Segundo Curso
- Ciclo formativo de grado superior
- Primer Curso
- Segundo Curso
- Ciclo formativo de grado básico
- Autor/es:
- Francisco J. González Constanza
- Subido por:
- Francisco J. G.
- Licencia:
- Todos los derechos reservados
- Visualizaciones:
- 91
- Fecha:
- 25 de febrero de 2025 - 10:59
- Visibilidad:
- Público
- Centro:
- IES CIFP a Distancia Ignacio Ellacuría
- Duración:
- 22′ 50″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 430.66 MBytes