La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Curso: XML, de los datos a la presentación Julio de 2005 CAPTIVA · www.captiva.es XSLT.

Presentaciones similares


Presentación del tema: "Curso: XML, de los datos a la presentación Julio de 2005 CAPTIVA · www.captiva.es XSLT."— Transcripción de la presentación:

1 Curso: XML, de los datos a la presentación Julio de 2005 CAPTIVA · www.captiva.es XSLT

2 ¿Qué es XSLT?  Parte de XSL (eXtensible Stylesheet Language)  XSLT  XSL Transformations (Transformaciones)  XSL-FO  XSL Formatting Objects (Formato)  Aplicación XML  Lenguaje de programación en base a templates para transformar fichero XML en otro fichero XML  Se utiliza XPath para seleccionar partes del fichero de entrada

3 ¿Con qué se procesan?  Procesadores XSLT  Procesador XSLT MSXML (IE6) (.Net)  http://msdn.microsoft.com/library/en-us/xmlsdk/html/6b8e4b12-f090-49e5-a2e4-b8fb913ac320.asp http://msdn.microsoft.com/library/en-us/xmlsdk/html/6b8e4b12-f090-49e5-a2e4-b8fb913ac320.asp  Xalan del proyecto Apache (basado en LotusXSL de IBM) (Java)  Api y programa línea de comandos  http://xml.apache.org/xalan-j/ http://xml.apache.org/xalan-j/  Cocoon del proyecto Apache (Java)  Aplicación web para crear portales web multiformato  Hace uso de Xalan  http://cocoon.apache.org/ http://cocoon.apache.org/  Saxon (Java)  Versión comercial (soporta schema) y opensource  Versión estable (XSLT 1.0) y Saxon-B (XSLT 2.0 WD 4-04-2005)  http://saxon.sourceforge.net/ http://saxon.sourceforge.net/  XT (Java)  Uno de los primeros pero descontinuado (2002)  http://www.blnz.com/xt/index.html http://www.blnz.com/xt/index.html  4Suite (python)  Suite con procesamiento XML de todo tipo (DOM, RDF, XSLT, RELAX NG, …)  http://www.4suite.org http://www.4suite.org

4 ¿Con qué se procesan? (II)  Los navegadores más conocidos tienen soporte XSLT (Explorer, Mozilla/Firefox).  Si creamos plantilla XSL que convierta a XHTML  ¡Podemos ver directamente nuestro XML en un navegador!  La instancia de documento XML debe apuntar a la plantilla necesaria con la PI <?xml-stylesheet type=“text/xml" href=“url-a-plantilla.xsl"?> <?xml-stylesheet type=“text/xsl" href=“url-a-plantilla.xsl"?>

5 Estructura mínima  Este es un ejemplo de fichero mínimo XSLT válido:  El elemento raíz es xsl:stylesheet o xsl:transform (son sinónimos)  Es obligatorio indicar el namespace y el atributo de versión  Ejemplo  Aplicar basica.xsl a carta.xml (directorio ejemplos)

6 La pieza clave: Template  Elemento básico de programación  template  Formato  Ejemplo. Consideremos el fichero XML de entrada libro.xml. Aplicamos la siguiente plantilla libro-template.xsd. Ejecutar transformación en JEdit. Sin noticias de Grub Eduardo Mendoza <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> Un titulo Un autor

7 La pieza clave: Template (II)  ¿Cómo funciona procesador XSLT?  Documento coge nodo raíz (/)  Recorre nodo a nodo de arriba abajo pasando por todos hasta el final  Los templates para los padres se evalúan antes que los de sus hijos  Determina si hay reglas que seleccionen dicho nodo (match)  ¿Hay templates aplicables?  Deja en manos del template el procesado del nodo y descendientes  ¿No hay?  Regla por defecto.  Regla por defecto  Convertir a string el nodeset (o sea contenido textual del primer nodo elemento hijo) y seguir procesando la descendencia Un titulo Un autor

8 Extracción de texto   Convierte a texto una expresión XPath  Sintaxis:  Se evalúa dentro de un template.  Vamos a extraer el contenido de los nodos de libro.xml a través de la siguiente plantilla (libro-valueof.xsl): <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

9 Aplicación de templates  Hemos visto el funcionamiento por defecto  Seleccionar nodo (empezamos por raíz)  ¿Se le aplica alguna regla de template?  Sí lo procesa la regla  No  Procesado por defecto (para nodos elemento mostrar primer nodo hijo textual y procesar nodos elemento hijos)  Los templates pueden alterar cómo se recorre el árbol   Si no se especifica expresión Xpath para el subgrupo se sigue procesando todos los hijos  Ejemplos. Coger fichero ejemplo-apply- templates.xml y aplicar ejemplo-apply- templates.xsd  Descomentar uno a uno y explicar lo ocurrido

10 Reglas por defecto  Había siete tipos de nodos en XML: nodo raíz, elementos, texto, atributos, namespaces, PI, comentarios  XSLT proporciona templates por defecto para cada tipo  Hemos visto la regla para el raíz y elementos:

11 Reglas por defecto (II)  Regla por defecto para atributos y texto  Aplicar una plantilla vacía ( basica.xsl ) a ejemplo-apply- templates.xml  ¿Por qué no salen los valores de los atributos?  XSLT considera a los elementos padres de los atributos pero no al revés ¿?  Solución  Seleccionar manualmente atributos   Ejemplo  Plantilla ejemplo-default-templates.xsl  Regla por defecto para PI y comentarios  No hace nada  Regla por defecto para namespaces  No hay  El procesador XSLT los agrega adecuadamente en caso de que sean necesarios.

12 Modos  Modo  Aplicación de templates diferentes a mismos elementos  diferentes salidas con misma entrada  ¿Cómo se usan? …  Ejemplo  ejemplo-base.xml y ejemplo-modos.xsl

13 Atributos  Esta forma no funciona  Forma correcta  {}  Alternativa  color:  Ejemplos: ejemplo-atributos.xml ejemplo-atributos.xsl

14 Prioridad  Es posible que existan diversos templates que sirvan para procesar el mismo nodo  ¿Cómo decide el procesador cuál coger?  El procesador computa un valor de prioridad (entre -0.5 y 0.5)  Las reglas más específicas tienen más prioridad  P.e. match=“AAA” antes que match=“*”  Si dos reglas dan la misma prioridad  puede dar error el procesador  Se puede especificar valor de prioridad (mayor a más grande)   Ejemplo  Aplicar hoja de transformación ejemplo-prioridad.xsd sobre ejemplo-base.xml  Comparar resultado si se eliminan prioridades

15 Bucles   Aplica patrón nodo a nodo consecutivamente del conjunto especificado con select  Ejemplo: id=  Ejemplo: Aplicamos ejemplo-bucle.xsl a ejemplo- base.xml

16 Ordenación   Se pueden ordenar los nodos cuando se procesan en y  select determina por el nodo por el se ordena (típicamente “.”)  Ejemplo. Aplicamos ejemplo-orden.xsl a ejemplo-orden.xml  Vemos que los nombres salen ordenados  Podemos abrirlo directamente con navegador

17 Condiciones   Se utiliza típicamente con  Si se verifica la condición se aplica el patrón contenido dentro  Ejemplo. Separamos una lista de valores con comas y si es el último no ponemos,

18 Numeración  Dentro de un for-each podemos hacer uso de:  Nos va dando una numeración consecutiva  Podemos numerar de forma múltiple de acuerdo al nivel:  Atributo level=“multiple”  Podemos usar cualquier formato (p.e. letras, números romanos, etc.)  Atributo format=“i.1.A”  Ejemplo ejemplo-numeracion.xml y ejemplo- numeracion.xsl  Probar con level=“multiple”  Probar distintos formatos: P.e.: “1” “a” “1.I-A”

19 Variables  Declaración de una variable (2 formas)  Ámbito de variable  Global  Si se declara fuera de cualquier template  Local  Si se declara dentro de un template.  Referencia de una variable  Ejemplo.  Ficheros ejemplo-variables.xml y ejemplo- variables.xsl

20 Variables (II)  Copiado de fragmentos de árbol  Es posible asignar a una variable un fragmento de documento (no una cadena)......  Ejemplo. Ficheros ejemplo-copiado.xml y ejemplo-copiado.xsl  Cambiar alguno de los copy-of por value-of

21 Funciones  Declaración de la función  Esta es una función template de nombre “nombreFunc”  Los parámetros se referencian como si fueran variables  Llamada a la función de la función  Los nombres de los parámetros with-param y param deben coincidir  Ejemplo. Ficheros ejemplo-funcion.xml y ejemplo- funcion.xsl

22 Para saber más  Todo  http://www.w3.org/TR/xslt http://www.w3.org/TR/xslt  Tutoriales  http://www.w3schools.com/xsl/ http://www.w3schools.com/xsl/  http://geneura.ugr.es/~jmerelo/XSLT/ http://geneura.ugr.es/~jmerelo/XSLT/

23 Ejercicio (1/3)  Crear hoja de estilo XSLT que gane complejidad hasta que a partir de casino.xml obtengamos el XHTML salida-casino.html  Primera parte  Crear template para nodo “/” que sólo procese hijos (apply- templates)  Crear template para nodo “ casino ” que cree esqueleto HTML, imprima bienvenida y procese cada hijo “ mesa ”  Crear template para nodo “ mesa ” que imprima una tabla como la mostrada, con título “Mesa de juego ‘XXXX’” cada fila se procesará en base a un for-each para cada “ jugador ”. En cada jugador se aplicará template por cada “ carta ”  Crear template para “ carta ” se imprimirá sólo su valor entre corchetes  [As].

24 Ejercicio (2/3)  Segunda parte  Amplicar template “ carta ” con variable interna “ color ” que en base a del palo asigne un color que se usará como parámetro para [As de copas]  Evidentemente “As” y “copas” se extraen del elemento procesado en cuestión.  Añadir en template “ mesa ” la parte que suma todas las apuestas de la mesa, sacando los valores de € y $, tras la tabla. Sumar apuestas en € y $ por separado.

25 Ejercicio (3/3)  Tercera parte  Extraer del template “ mesa ” la parte que imprime la tabla a un template-funcion “ funcionMesa ” que es llamado desde “ mesa ” dos veces con un parámetro “ orden ” que toma cada vez los valores:  “ascending”  “descending”  El template-funcion en función de su parámetro de entrada “ orden ” imprimirá una tabla con cabecera “Mesa de juego ‘XXXX' en orden ‘Ascendente|Descendente' por Jugador”  Se aconseja crear variable local “ textoOrden ” que asocie un valor “ Ascendente ” ó “ Desdendente ” en función del parámetro de entrada “ orden ”  Comprobar que la hoja XSLT sigue funcionando con casino2.xml  salida-casino2.html


Descargar ppt "Curso: XML, de los datos a la presentación Julio de 2005 CAPTIVA · www.captiva.es XSLT."

Presentaciones similares


Anuncios Google