601 likes | 795 Views
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.
E N D
Curso de XSL Sistema para la visualización de documentos XML Curso XSL
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
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
¿ 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
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
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
Cómo se realiza la transformación (1) Curso XSL
Cómo se realiza la transformación(2) Curso XSL
Cómo se realiza la transformación(3) Curso XSL
Lo que ve el procesador • La raiz del documento. • Elementos. • Texto. • Atributos. • Espacios de nombres (Namespaces). • Instrucciones de procesamiento (PI). • Comentarios. Curso XSL
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
Procesamiento XSLT-Servidor Fuente de contenidos Visor de FO XSL_FO Procesador XSLT Navegador Web HTML XML XML Curso XSL
Procesamiento XSLT-Cliente Fuente de contenidos Visor de FO IMAGEN Procesador XSLT XML Navegador Web HTML Curso XSL
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
¿ 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
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
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
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
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
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
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
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
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
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
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
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
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
El atributo “select” <xsl:apply-templates select=“elemento”/> • Restringe a un tipo de hijos (subárboles) la aplicación de la regla. Curso XSL
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
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
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
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
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
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
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
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
Manejo de tipos de nodos • Text() • Comment() • Pi() • Node() Curso XSL
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
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
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
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
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
XPath Lenguaje de expresiones de localización Curso XSL
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
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
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
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
Ejes XPath Curso XSL
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
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