1 / 60

Curso de XSL

Curso de XSL. Sistema para la visualización de documentos XML. Arquitectura XSL. XSLT: lenguaje para la transformación de documentos XML. XPath: lenguage de consulta en estructuras XML. XSLFO: lenguaje de definición de objetos de formato de presentación. XSLT: definición.

lane
Download Presentation

Curso de XSL

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Curso de XSL Sistema para la visualización de documentos XML Curso XSL

  2. Arquitectura XSL • XSLT: lenguaje para la transformación de documentos XML. • XPath: lenguage de consulta en estructuras XML. • XSLFO: lenguaje de definición de objetos de formato de presentación. Curso XSL

  3. XSLT: definición • eXtensible Stylesheet Language Tranformations. • http://www.w3.org/TR/xstl • Diseñado para la transformación de documentos XML en otras estructuras XML y no-XML. Curso XSL

  4. ¿ Por que transformar XML ? • Conversión entre modelos de datos • Aunque legible, XML está pensado para el intercambio de información entre aplicaciones. • Es necesaria una capa de presentación para hacer “amigable” el acceso de los humanos a la información XML. • XML produce separación entre el modelo de datos y presentación visual. Curso XSL

  5. Cómo se construye una presentación • Una transformación estructural desde el documento con la estructura de datos original hacia una estructura que refleje la presentación gráfica deseada. • Formateo de la salida, utilizando los elementos de representación visual adecuados. Curso XSL

  6. Procesador de XSLT Nueva Estructura XML + FO Procesador De XSLFO Nueva Estructura XML + FO Nueva Estructura XML + FO XSLT Proceso de publicación XML-XSL. Doc. XML original HTML, PDF, ... Curso XSL

  7. Cómo se realiza la transformación (1) Curso XSL

  8. Cómo se realiza la transformación(2) Curso XSL

  9. Cómo se realiza la transformación(3) Curso XSL

  10. Lo que ve el procesador • La raiz del documento. • Elementos. • Texto. • Atributos. • Espacios de nombres (Namespaces). • Instrucciones de procesamiento (PI). • Comentarios. Curso XSL

  11. Como se implementa la transformación • Desarrollo de una aplicación a medida a partir de los “parsers” XML existentes (SAX, DOM). • Programación XSLT: lenguaje declarativo para definir reglas de transformación genéricas (dependientes de un contexto). Curso XSL

  12. Procesamiento XSLT-Servidor Fuente de contenidos Visor de FO XSL_FO Procesador XSLT Navegador Web HTML XML XML Curso XSL

  13. Procesamiento XSLT-Cliente Fuente de contenidos Visor de FO IMAGEN Procesador XSLT XML Navegador Web HTML Curso XSL

  14. Dónde tiene lugar la transformación • En el cliente: • Tanto el documento XML como el XSL son servidos al cliente y este los procesa. • En el servidor: • Éste aplica la XSL al XML y genera un documento publicable que envía al cliente (servlet, ASP, CGI, ...). • Un tercer programa hace la transformación. Curso XSL

  15. ¿ Por que XSL ? • Está diseñado para integrarse en la arquitectura XML. • Es mucho más potente que CSS. • Aunque un poco menos potente que DSSSL es mucho más sencillo de usar. • Cada vez hay más herramientas para XSL. Curso XSL

  16. Composición de los documentos XSL. • XSLT usa XML para describir las reglas: • patrones y plantillas. • Un documento XSL se construye a partir de una raiz: <xsl:stylesheet> ... </xsl:stylesheet> • Todos los elementos de XSL que son instrucciones pertenecen al espacio de nombres: • xmlns:xsl=“http://www.w3.org/XSL/Transform/1.0” Curso XSL

  17. Declaración de Hoja de Estilo • El elemento raiz de la Hoja de Estilo debe tener al menos el atributoversion=“x.y” <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet version="1.0“ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" version="1.0“ encoding="UTF-8" indent="yes"/> * * * </xsl:stylesheet> Curso XSL

  18. Asociar una XSL a un XML • Insertar una instrucción de procesamiento: <?xml version=“1.0”?> <?xml-stylesheet type=“text/xsl” href=“myHoja.xsl”?> • El atributo type debe contener el valor fijo “text/xsl”. • href debe contener la URL que localiza la hoja de estilo. Curso XSL

  19. xsl:import xsl:include xsl:strip-space xsl:preserve-space xsl:output xsl:key xsl:decimal-format xsl:namespace-alias xsl:attribute-set xsl:variable xsl:param xsl:template XSLT: Elementos “Top-level”. El elemento <xsl:stylesheet> puede contener como hijos cualquiera de los siguientes elementos (top-level): Curso XSL

  20. Definición de <xsl:output> • <!-- Category: top-level-element --> • <xsl:output • method="xml" | "html" | "text" | qname-but-not-ncname • version = nmtoken • encoding = string • omit-xml-declaration = "yes" | "no" • standalone = "yes" | "no" • doctype-public = string • doctype-system = string • cdata-section-elements = qnames • indent = "yes" | "no" • media-type = string /> Curso XSL

  21. Templates (Plantillas) • Es el elemento más importante de la especificación XSL. • Especifica la transformación que se aplicará a una parte concreta del documento origen. • Cada hoja de estilo debe tener al menos un “template”. • Un “template” seleccionado asocia una salida concreta con una entrada concreta. Curso XSL

  22. apply-templates • Para ir más allá de la raiz hay que dirigir al procesador en la búsqueda de elementos hijos del documento origen. • El uso de<xsl:apply-templates>indica dónde continuar recursivamente el proceso. • En dicho punto se aplicarán los templates apropiados según los hijos del elemento activo Curso XSL

  23. xsl:apply-templates • En general, este elemento es vacío e indica el punto de inserción de contenidos. • Cada nodo que cumple el patrón (match) es tratado como un árbol. <template match=“Capítulo”> <apply-templates/> </template> Curso XSL

  24. Cómo funcionan los “templates” <?xml version=“1.0”?> <?xml-stylesheet type=“text/xsl” href=“miEstilo.xsl”?> <Documento> <hijoA_1> <hijoA_1-1> ... </hijoA_1-1> <hijoA_1-2> ... </hijoA_1-2> <hijoA_1-1> ... </hijoA_1-1> </hijoA_1> <hijoB_1> ... <hijoB_1> </Documento> Curso XSL

  25. Cómo funcionan los “templates” <?xml version=“1.0”?> <xsl:stylesheet xmlns:xsl=“http://www.w3.org/XSL/Transaform/1.0”> <xsl:template match=“/”> <html> <xsl:apply-templates/></html> </xsl:template> <xsl:template match=“Documento”> <body><xsl:apply-templates/></body> </xsl:template> </xsl:stylesheet> Curso XSL

  26. Cómo funcionan los “templates” <xsl:template match=“hijoA_1”> <h1>Esto es la salida<h1> <xsl:apply-template> </xsl:template> <xsl:template match=“hijoA_1-1”> <p>Elemento = HijoA_1.1</p> </xsl:template> </xsl:stylesheet> Curso XSL

  27. Cómo funcionan los “templates” • Resultado: <html> <body> <h1>Esto es la salida<h1> <p>Elemento=HijoA_1.1</p> <p>Elemento=HijoA_1.1</p> </body> </html> Curso XSL

  28. El atributo “select” <xsl:apply-templates select=“elemento”/> • Restringe a un tipo de hijos (subárboles) la aplicación de la regla. Curso XSL

  29. xsl:value-of <xsl:template match=“padre”> <xsl:value-of select=“id_hijo”/> <xsl:template/> • Copia el contenido del nodo seleccionado en la salida. • El valor de “id_hijo” es relativo al nodo fuente seleccionado en el template. Curso XSL

  30. Regla por defecto para texto <xsl:template match=“text()”> <xsl:value-of select=“.”/> </xsl:template> • Concuerda con todos los nodos-texto y copia sus contenidos a la salida. • Asegura que como mímimo se imprime el texto de todos los elementos seleccionados. • Se puede sobrecargar esta regla para modificar el comportamiento por defecto. Curso XSL

  31. Regla por defecto para elementos • Situación: no queremos procesar un elemento pero si algunos de sus hijos. <xsl:template match=“*|/”> <xsl:apply-templates/> </xsl:template> • Asegura que todos los elementos serán procesados (visitados) recursivamente. Curso XSL

  32. Regla por defecto para elementos(ejemplo-1) <libro> <introducción> <para> Esto es un párrafo</para> <para> Otro párrafo</para> </introducción> </libro> Curso XSL

  33. Regla por defecto para elementos(ejemplo-2) <template match=“libro”> <apply-templates/> </template> <template match=“para”> <apply-templates/> </template> <!– No hay template para “introducción” --> Curso XSL

  34. Modificar la regla por defecto • Ejemplo: • Evitar que se procese ningún hijo de un elemento que no tenga definido un template. <template match=“*|/”> <!– Nada --> </template> Curso XSL

  35. Ocultar contenidos <nota><para>...</para><para>...</para></nota> <template match=“nota”></template> Como consecuencia: es necesaria una regla vacía para que no se procese un subárbol que depende de un elemento concreto. Curso XSL

  36. xsl:for-each <xsl:for-each select=“”> otras reglas XSL </xsl:for-each> • Se aplica a colecciones de nodos. • Si no hay select, se aplica a todos los hijos del nodo actual. Curso XSL

  37. Manejo de tipos de nodos • Text() • Comment() • Pi() • Node() Curso XSL

  38. Manipulación de espacios en blanco <xsl:preserve-space element=“nombre”/> Indica el subárbol origen al cual hay que preservarle los espacios en blanco. <xsl:strip-space element=“nombre”/> Indica el subárbol origen al cual hay que preservarle los espacios en blanco. Curso XSL

  39. Xsl:choose – xsl:when <xsl:template match=“capítulo/título”> <xsl:choose> <xsl:when test=“.[first-of-type()]”> Primer capítulo: </xsl:when> <xsl:otherwise> Capítulo siguiente: </xsl:otherwise> </xsl:choose> </xsl:template> Curso XSL

  40. xsl: element- attribute - text • Insertan: un elemento, un atributo y un nodo hijo de tipo texto, respectivamente, en el árbol de salida. <xsl:element name=“libro”> <xsl:attribute name=“título”>El Quijote </xsl:attribute> <xsl:text>Este libro es famoso.</xsl:text> </xsl:element> <libro título=“El Quijote”>Este libro es famoso.</libro> Curso XSL

  41. Templates con nombre • Se parece a la definición y llamada a subrutina: <xsl:template name=“nombreTemplate”> <xsl:param name=“parametro1”/> <!– El código va aquí --> </xsl:template> <xsl:call-template name=“nombreTemplate”> <xsl:with-param name=“parametro1” select=“valorParam”/> </xsl:call-template> Curso XSL

  42. Variablesy función “document()” • Muy Importante: Una vez instanciadas NUNCA pueden cambiar de valor !!! <xsl:variable name=“ficheroExt” select=“document(“url”)/XPath”/> ... <xsl:apply-templates select=“$ficheroExt/XPath”/> Curso XSL

  43. XPath Lenguaje de expresiones de localización Curso XSL

  44. Expresiones XPath • Parten una gramática formal especificación). • Generan un lenguaje formal no-ambiguo. • Expresiones de localización con doble funcionalidad en las operaciones: • “pattern matching” -> devuelven un booleano. • Evaluación de expresiones -> devuelven un conjunto de nodos. Curso XSL

  45. Expresiones de localización(1) • Seleccionan un conjunto de nodos del documento origen. • Existe un punto absoluto de referencia para las localizaciones: “/”, la raiz del documento origen. • Las expresiones que no comienzan con “/” son relativas a un nodo de contexto (normalmente el actual). Curso XSL

  46. Expresiones de localización(2) • El símbolo “/” a mitad de expresión sirve para incluir expresiones recursivamente (paso de localización), actuando como filtros sucesivos. • Un paso de localización se compone de: • Una base: • Un eje de identificación (indicando dirección de localiz.). • Un nodo de “test” (filtrando nodos de su tipo y nombre). • Uno o más predicados (filtrando nodos). Curso XSL

  47. ancestor:: ancestor-or-self:: attribute:: child:: descendant:: descendant-or-self:: following:: following-sibling:: namespace:: parent:: preceding:: preceding-sibling:: self:: Ejes de localización Hay trece ejes de localización: Curso XSL

  48. Ejes XPath Curso XSL

  49. Ejes de localización:abreviaturas • Un nombre o tipo de nodo indica child:: • Un carácter ‘@’ indica attribute:: • La secuencia “//” indica /descendant-or-self::node()/ • La secuencia “..” indica parent::node() • La secuencia “.” indica self::node() Curso XSL

  50. Nodos de “test” • Determinan que nodos localizar en el eje indicado: • Por nombre del nodo. • Por tipo de nodo. • Por valor de atributo. Curso XSL

More Related