210 likes | 373 Vues
XML. eXtensible Stylesheet Language Formatting Objects. Introducción. XSL Formatting Objects Aplicación desarrollada enteramente en XML. Permite describir de forma precisa la posición del texto en una página Orientado a impresión .
E N D
XML eXtensible Stylesheet Language Formatting Objects
Introducción • XSL Formatting Objects • Aplicación desarrollada enteramente en XML. • Permite describir de forma precisa la posición del texto en una página Orientado a impresión. • Define elementos que representan: páginas, bloques de texto dentro de las páginas, gráficos, reglas horizontales, etc. • Normalmente no se escribe XSLFO directamente sino que se escriben hojas de estilo XSLT que transforman un documento nativo XML en XSLFO.
Introducción(II) • XSL Formatting Objects • Finalmente la aplicación de renderizado lee XSLFO y la presenta al usuario. • Debido a que la mayoría de los navegadores no soporta renderizar directamente XSLFO, es necesario un procesamiento de transformación adicional: • XSLFO a PDF. • XSLFO a TEX. • …
Introducción (III) XSL XML XSLFO ProcesadorXSLFO Procesador XSLT TEX
Documento XSLFO • Un documento XSL-FO es un documento XML con información de salida, que contiene tanto información de composición de la salida como información de contenido. • Un documento XSL-FO se puede almacenar con extensión .fo, .fob o incluso también .xml, para facilitar su acceso a los editores XML.
Estructura documento XSLFO • Elemento raíz: fo:root • <?xml version="1.0" encoding="ISO-8859-1"?><fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"></fo:root> • Plantillas de páginas: fo:layout-master-set • Contiene uno o más elementos con la configuración de las diferentes plantillas de páginas. • Incluye información de tamaño de página, posición, márgenes, etc. • Contenido de las páginas: fo:page-sequence • Uno o más elementos con información de contenido e instrucciones de formato. • Cada elemento referencia a una plantilla definida anteriormente en el elemento fo:layout-master-set.
Estructura documento XSLFO (II) • Ejemplo documento XSLFO: • <?xml version="1.0" encoding="ISO-8859-1"?><fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple-page-master master-name=“miPagina"> <!– Plantilla de la página --> </fo:simple-page-master> </fo:layout-master-set> <fo:page-sequence master-reference=“miPagina"> <!– Contenido de la página --> </fo:page-sequence></fo:root> Plantillas de páginas Contenido de páginas
Plantillas de páginas <fo:layout-master-set /> • XSLFO define únicamente un tipo de plantilla: • Elemento fo:simple-page-master • Representa una página rectangular estándar con márgenes en los cuatro lados. • Tiene un único nombre (atributo: master-name). • Atributos que definen el tamaño de la página y de los márgenes: <fo:simple-page-master master-name=“miPagina" page-height="21cm" page-width="29.5cm" margin-top="1cm" margin-bottom="1cm" margin-left="2cm" margin-right="2cm"> <!–- Regiones separadas de la página --></fo:simple-page-master>
Plantillas de páginas (II) <fo:simple-page-master /> • La plantilla define 5 regiones dentro de una página: • region-start, region-end, region-before, region-after y region-body. • Su disposición en la página depende del sistema de escritura, que puede ser occidental, hebreo, chino y otras posibles combinaciones.
Sistema de escritura occidental: de izquierda a derecha y de arriba a abajo <fo:region-start/> <fo:region-end/> <fo:region-before/> <fo:region-after/> <fo:region-body/>
Plantillas de páginas (III) <fo:simple-page-master /> • fo:region-body obligatorio, el resto opcionales. • Por defecto una página únicamente contiene la región body. • En caso de especificar regiones de tipo start, end, before o after es necesario indicar su correspondiente anchura o altura mediante el atributo “extent” y especificar los márgenes de la region body “margin-top”, “margin-left”, etc para que no se solapen. <fo:simple-page-master master-name=“miPagina" page-height="21cm" page-width="29.5cm" margin-top="1cm" margin-bottom="1cm“ margin-left="2cm“ margin-right="2cm"> <fo:region-before extent="2.5cm" /> <fo:region-body margin-top="3cm" margin-bottom="2cm" /> <fo:region-after extent="1cm" /> </fo:simple-page-master>
Flujo de contenido <fo:page-sequence /> • Cada elemento fo:page-sequence indica mediante el atributo “master-reference” la plantilla de página que se va a utilizar en la composición del documento. • Habrá tantos elementos fo:page-sequence como secuencias de páginas con diferentes plantillas de página. • Dentro de un elemento fo:page-sequence la información de contenido y de composición fluye a través de elementos fo:flow. <fo:page-sequence master-reference=“miPagina"> <!-- Contenido --></fo:page-sequence>
Flujo de contenido <fo:flow /> • Cada elemento fo:flow dentro de una secuencia de páginas indica mediante el atributo “flow-name” la region dentro de la página donde incluir el contenido. • El contenido de las páginas se organiza en forma de bloques mediante elementos fo:block anidados dentro de elementos fo:flow. • El SW de formateo va rellenando páginas con la información de contenido de los elementos contenidos dentro del elemento fo:flow. Cuando una página se completa se utiliza una y otra vez la misma plantilla hasta que todo el texto queda impreso.
Flujo de contenido <fo:flow /> • Contiene elementos de formateo a nivel de bloque. • fo:block elemento básico. • Otros: fo:block-container, fo:list-block (listas), fo:table, fo:table-and-caption (tablas), etc. • fo:block puede contener texto o elementos de formateo de objetos: fo:external-graphic, fo:inline, fo:page-number, fo:footnote e incluso nuevos elementos fo:block.
Bloques XSLFO • XSLFO define una serie de áreas rectangulares o cajas (boxes). • Áreas de tipo bloque, línea, áreas dentro de línea, etc. • Las áreas de tipo bloque o dentro de línea se definen mediante elementos XSLFO, mientras que las de tipo línea son generadas por el formateador según son necesarias. • El motor de renderización normalmente decide automáticamente el lugar y tamaño de las diferentes áreas que componen el documento. • Sin embargo siempre se pueden definir propiedades de posición tanto relativa como absoluta, de tamaño, de separación, etc. dentro de una página. • Por defecto las áreas no se solapan, aunque se puede forzar para que ocurra.
Bloques XSLFO (II) • Por cada caja o área se distinguen una serie de zonas: Contenido Contenido Relleno Borde Margen
Bloques XSLFO (III) • A partir de aquí XSLFO se convierte en un lenguaje de descripción y composición de salida al igual que lo puede ser HTML, LATEX, etc. • Con gran variedad de elementos (tablas, listas, símbolos, etc.) y atributos (márgenes, estilos, colores, etc.)
Propiedades • Existen multitud de propiedades de formateo con la misma sintaxis que en CSS • Las propiedades se pueden aplicar a los bloques o cualquier elemento • Son heredadas en elementos descendientes • Ejemplo de clase CSS: dish { display: block; font-family: Helvetica, Arial, sans-serif; font-size: 20pt; font-weight: bold; text-align: center } • Equivalente aplicado a un bloque renderizado desde template XSLT: <xsl:template match="dish"> <fo:block font-family="Helvetica, Arial, sans-serif" font-size="20pt" font-weight="bold" text-align="center"> <xsl:apply-templates/> </fo:block> </xsl:template>
Propiedades (II) • En algunas ocasiones las propiedades de CSS se traducen en elementos FO • El ejemplo son las listas. Los elementos necesarios para formar una lista son: <fo:list-block> <fo:list-item> <!– Carácter unicode para el ● --> <fo:list-item-label>•</fo:list-item-label> <fo:list-item-body>Primer elemento</fo:list-item-body> </fo:list-item> <fo:list-item> <fo:list-item-label>•</fo:list-item-label> <fo:list-item-body>Segundo elemento</fo:list-item-body> </fo:list-item> </fo:list-block>
Procesadores XSLFO • Un procesador XSLFO es un programa que formatea documentos XSLFO generando una salida. • La mayoría de los procesadores XSLFO permiten transformar a formatos PDF y formatos de calidad de impresión así como otros tipos de formatos, incluso HTML. • También existen IDEs que permiten diseñar composiciones de salida de manera gráfica generando los elementos XSLFO automáticamente. • XSL Formatter, Scriptura, XMLSpy, Stylus Studio, etc.
Ejercicio • Partiremos de ejemploFO.xsl y lo modificaremos para que sólo nos saque con formato “principal” el primer capítulo y el resto con formato “apaisada2columnas” • Adecentaremos primero el código definiendo dos variables globales “fragmentoEncabezado” y “fragmentoPie” que contengan respectivamente los elementos • <fo:static-content flow-name="xsl-region-before"> • <fo:static-content flow-name="xsl-region-after"> • Igualmente crearemos un template para “parrafo” extrayendo su contenido fuera • Para indicar a qué tipo de página asociamos cada page-sequence dentro del template del capítulo usaremos una variable local “tipoPaginaCuerpo”