Upload
vahe
View
49
Download
0
Tags:
Embed Size (px)
DESCRIPTION
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 . - PowerPoint PPT Presentation
Citation preview
Curso: XML, de los datos a la presentaciónJulio de 2005
CAPTIVA · www.captiva.es
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)
XMLXML
XSLXSL
Procesador XSLT
Procesador XSLT
TEXTEX
XSLFOXSLFO ProcesadorXSLFO
ProcesadorXSLFO
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.
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>
Estructura documento XSLFO (II)
Plantillas de páginas
Contenido de páginas
Plantillas de páginas
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>
<fo:layout-master-set />
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.
Plantillas de páginas (II)<fo:simple-page-master />
<fo:region-start/>
<fo:region-end/>
<fo:region-before/>
<fo:region-after/>
<fo:region-body/>
Sistema de escritura occidental: de izquierda a derecha y de arriba a abajo
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.
Plantillas de páginas (III)<fo:simple-page-master />
<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
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 />
<fo:page-sequence master-reference=“miPagina"> <!-- Contenido --></fo:page-sequence>
Flujo de contenido
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.
<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.
Flujo de contenido<fo:flow />
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.
Por cada caja o área se distinguen una serie de zonas:
Contenido
Margen
Borde
Relleno
Contenido
Bloques XSLFO (II)
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.)
Bloques XSLFO (III)
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
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>
Propiedades (II)
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.
Procesadores XSLFO
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”
Ejercicio