XSL-FO ( XSL Formatting Objects ) es un lenguaje de marcado para el formato de documentos XML que se utiliza con mayor frecuencia para generar archivos PDF . XSL-FO es parte de XSL (Extensible Stylesheet Language), un conjunto de tecnologías del W3C diseñadas para la transformación y el formato de datos XML. Las otras partes de XSL son XSLT y XPath . La versión 1.1 de XSL-FO se publicó en 2006.
El W3C considera que XSL-FO está completo en cuanto a sus características: [1] la última actualización del borrador de trabajo fue en enero de 2012, y su grupo de trabajo cerró en noviembre de 2013. [2]
A diferencia de la combinación de HTML y CSS , XSL-FO es un lenguaje de presentación unificado. No tiene marcado semántico como se usa este término en HTML. Y, a diferencia de CSS que modifica la presentación predeterminada de un documento XML o HTML externo, almacena todos los datos del documento dentro de sí mismo.
La idea general detrás del uso de XSL-FO es que el usuario escribe un documento, no en FO, sino en un lenguaje XML. XHTML , DocBook y TEI son ejemplos posibles. Luego, el usuario obtiene una transformación XSLT , ya sea escribiendo una por sí mismo o encontrando una para el tipo de documento en cuestión. Esta transformación XSLT convierte el XML en XSL-FO.
Una vez que se genera el documento XSL-FO, se pasa a una aplicación llamada procesador FO. Los procesadores FO convierten el documento XSL-FO en algo que se puede leer, imprimir o ambas cosas. La salida más común de XSL-FO es un archivo PDF o PostScript , pero algunos procesadores FO pueden generar otros formatos como archivos RTF o incluso una ventana en la interfaz gráfica de usuario que muestra la secuencia de páginas y su contenido.
El lenguaje XSLT en sí fue concebido originalmente sólo para este propósito; ahora se usa ampliamente para transformaciones XML más generales. Este paso de transformación se da tan por sentado en XSL-FO que no es raro que la gente llame al XSLT que convierte XML en XSL-FO el documento XSL-FO en sí. Incluso los tutoriales sobre XSL-FO tienden a estar escritos con comandos XSLT en torno a las instrucciones de procesamiento de FO.
El paso de transformación XSLT es excepcionalmente potente. Permite la generación automática de una tabla de contenidos, referencias vinculadas, un índice y varias otras posibilidades.
Un documento XSL-FO no es como un documento PDF o PostScript. No describe de forma definitiva la disposición del texto en las distintas páginas, sino que describe el aspecto de las páginas y dónde se ubican los distintos contenidos. A partir de ahí, un procesador FO determina cómo posicionar el texto dentro de los límites descritos por el documento FO. La especificación XSL-FO incluso permite que distintos procesadores FO tengan distintas respuestas con respecto a las páginas generadas resultantes.
Por ejemplo, algunos procesadores FO pueden dividir palabras con guiones para minimizar el espacio al dividir una línea, mientras que otros optan por no hacerlo. Diferentes procesadores pueden incluso utilizar diferentes algoritmos de división de palabras, que van desde algoritmos muy simples hasta algoritmos más complejos que tienen en cuenta si la línea anterior o siguiente también está dividida. Estos cambiarán, en algunos casos límite de manera bastante sustancial, el diseño de las distintas páginas. Hay otros casos en los que la especificación XSL-FO permite explícitamente a los procesadores FO cierto grado de elección con respecto al diseño.
Esta diferenciación entre procesadores FO, que crea resultados inconsistentes entre procesadores, no suele ser un problema. Esto se debe a que el propósito general detrás de XSL-FO es generar medios impresos paginados. Los documentos XSL-FO en sí mismos se utilizan generalmente como intermediarios, principalmente para generar archivos PDF o un documento impreso como el formato final para ser distribuido. Esto es a diferencia de cómo se genera HTML y se distribuye como un formato final directamente al usuario. Distribuir el PDF final en lugar de la entrada del lenguaje de formato (ya sea HTML/CSS o XSL-FO) significa, por un lado, que los destinatarios no se ven afectados por la imprevisibilidad resultante de las diferencias entre los intérpretes del lenguaje de formato, mientras que, por otro lado, significa que el documento no se puede adaptar fácilmente a las diferentes necesidades del destinatario, como un tamaño de página diferente o un tamaño de fuente preferido, o la adaptación para la presentación en pantalla frente a la presentación en papel frente a la presentación en audio.
El lenguaje XSL-FO fue diseñado para medios paginados; como tal, el concepto de páginas es una parte integral de la estructura de XSL-FO.
El formato FO funciona mejor para lo que se podría llamar un diseño "basado en el contenido". Este es el método estándar de diseño para libros, artículos, documentos legales, etc. Implica un único fragmento de texto bastante contiguo, con información repetida incorporada en los márgenes de una página. Esto es lo opuesto al diseño "basado en el diseño", que se utiliza en periódicos o revistas. Si el contenido de esos documentos no cabe en el espacio requerido, se recorta una parte hasta que cabe. XSL-FO no maneja fácilmente las estrictas restricciones del diseño de revistas; de hecho, en muchos casos, carece de la capacidad de expresar algunas formas de dicho diseño.
A pesar de la naturaleza básica del diseño del lenguaje, es capaz de ofrecer una gran expresividad. Están disponibles tablas, listas, elementos flotantes laterales y una variedad de otras características. Estas características son comparables a las características de diseño de CSS, aunque se espera que algunas de esas características sean creadas por XSLT.
Los documentos XSL-FO son documentos XML, pero no tienen por qué cumplir ninguna DTD ni ningún esquema, sino que se ajustan a una sintaxis definida en la especificación XSL-FO.
Los documentos XSL-FO contienen dos secciones obligatorias. La primera sección detalla una lista de diseños de página con nombre. La segunda sección es una lista de datos del documento, con marcado, que utiliza los distintos diseños de página para determinar cómo se llena el contenido en las distintas páginas.
Los diseños de página definen las propiedades de la página. Pueden definir las direcciones en las que se debe escribir el texto, de modo que se ajusten a las convenciones del idioma en cuestión. Definen el tamaño de una página, así como los márgenes de esa página. Y lo que es más importante, pueden definir secuencias de páginas que permiten lograr efectos en los que las páginas pares e impares se ven diferentes. Por ejemplo, se puede definir una secuencia de diseño de página que otorgue espacio adicional a los márgenes internos para fines de impresión; esto permite dar más espacio al margen donde se encuadernará el libro.
La parte de datos del documento se divide en una secuencia de flujos, donde cada flujo está asociado a un diseño de página. Los flujos contienen una lista de bloques que, a su vez, contienen una lista de datos de texto, elementos de marcado en línea o una combinación de ambos. También se puede agregar contenido a los márgenes del documento, para números de página, títulos de capítulos y similares.
Los bloques y los elementos en línea funcionan de forma muy similar a CSS, aunque algunas de las reglas de relleno y márgenes difieren entre FO y CSS. La dirección, relativa a la orientación de la página, para la progresión de bloques y elementos en línea se puede especificar por completo, lo que permite que los documentos FO funcionen en idiomas que se leen de forma diferente al inglés. El lenguaje de la especificación FO, a diferencia del de CSS 2.1, utiliza términos neutrales en cuanto a la dirección, como inicio y fin, en lugar de izquierda y derecha, al describir estas direcciones.
El marcado de contenido básico de XSL-FO se deriva de CSS y sus reglas en cascada. Por lo tanto, muchos atributos de XSL-FO se propagan a los elementos secundarios a menos que se anulen explícitamente.
XSL-FO es capaz de ofrecer una gran cantidad de funciones de diseño de texto. Además de la información especificada anteriormente, el lenguaje XSL-FO permite especificar lo siguiente:
Se puede definir una página para que tenga varias columnas. Cuando este es el caso, los bloques pasan de una columna a la siguiente de forma predeterminada. Se pueden configurar bloques individuales para que abarquen todas las columnas, creando un salto de texto en la página. Las columnas que se encuentran por encima de este salto se unirán entre sí, al igual que las columnas que se encuentran por debajo del salto. Sin embargo, no se permite que el texto pase de la sección superior a la sección inferior.
Debido a la naturaleza de la especificación de páginas de XSL-FO, es posible que varias páginas tengan diferentes cantidades y anchos de columnas. Por lo tanto, el texto puede pasar de una página de 3 columnas a una de 5 columnas y luego a una de 1 columna con bastante facilidad.
Todas las funciones de FO funcionan dentro de las restricciones de una página de varias columnas.
Podemos abarcar varias columnas especificando dos atributos, es decir, span y padding-after.
Una lista XSL-FO es, esencialmente, dos conjuntos de bloques apilados uno al lado del otro. Una entrada consta de un bloque a la "izquierda", o dirección inicial en línea, y una secuencia de bloques a la "derecha", o dirección final en línea. El bloque de la izquierda es conceptualmente lo que sería el número o la viñeta en una lista. Sin embargo, podría ser fácilmente una cadena de texto, como se puede ver en una entrada de glosario. El bloque de la derecha funciona como se espera. Ambos bloques pueden ser contenedores de bloques o tener múltiples bloques en una sola entrada de lista.
Se espera que la numeración de las listas XSL-FO, cuando estén numeradas, la realice el XSLT o cualquier otro proceso que haya generado el documento XSL-FO. Por lo tanto, las listas numeradas deben estar numeradas explícitamente en XSL-FO.
El usuario puede especificar Widow y Orphan para los bloques o para el flujo en sí, y permitir que los atributos se distribuyan en cascada en bloques secundarios. Además, se puede especificar que los bloques se mantengan juntos en una sola página. Por ejemplo, un bloque de imagen y la descripción de esa imagen se pueden configurar para que nunca se separen. El procesador FO hará todo lo posible por cumplir con estos comandos, incluso si requiere crear una gran cantidad de espacio vacío en una página.
El usuario puede crear notas al pie que aparezcan al final de una página. La nota al pie se escribe, en el documento FO, en el flujo normal de texto en el punto donde se hace referencia a ella. La referencia se representa como una definición en línea, aunque no es obligatoria. El cuerpo es uno o más bloques que el procesador FO coloca al final de la página. El procesador FO garantiza que, independientemente de dónde se encuentre la referencia, la nota al pie citada por esa referencia comenzará en la misma página. Esto será así incluso si significa crear un espacio vacío adicional en una página.
Una tabla FO funciona de forma muy similar a una tabla HTML/CSS. El usuario especifica filas de datos para cada celda individual. El usuario también puede especificar cierta información de estilo para cada columna, como el color de fondo. Además, el usuario puede especificar la primera fila como fila de encabezado de tabla, con su propia información de estilo independiente.
Se le puede indicar al procesador FO exactamente cuánto espacio darle a cada columna, o se le puede indicar que ajuste automáticamente el texto en la tabla.
FO cuenta con amplios controles para orientar bloques de texto. Se puede, en medio de una página, designar un bloque de texto para que se oriente en una orientación diferente. Estos bloques orientados se pueden utilizar para idiomas con una orientación diferente a la del resto del documento, o simplemente si se necesita orientar el texto para fines de diseño. Estos bloques pueden contener prácticamente cualquier tipo de contenido, desde tablas hasta listas o incluso otros bloques de texto reorientado.
La versión 1.1 de XSL-FO agrega una serie de nuevas características a la versión 1.0.
XSL-FO 1.0 era bastante restrictivo en cuanto a qué texto se permitía incluir en qué áreas de una página. La versión 1.1 flexibiliza significativamente estas restricciones, permitiendo que el texto fluido se asigne a múltiples regiones explícitas de una página. Esto permite una composición tipográfica más parecida a la de un periódico.
Muchos formatos de salida para procesadores XSL-FO, en especial PDF, tienen funciones de marcadores. Estas permiten que el formato especifique una cadena de texto en una ventana separada que el usuario puede seleccionar. Cuando se selecciona, la ventana del documento se desplaza inmediatamente a una región específica del documento.
XSL-FO v1.1 ahora proporciona la capacidad de crear marcadores con nombre en XSL-FO, lo que permite al procesador pasar esto a un formato de salida que lo admita.
XSL-FO 1.1 tiene características que permiten generar un índice que puede encontrarse al final de un libro. Esto se hace mediante la referencia a elementos correctamente marcados en el documento FO.
La última página se puede generar sin proporcionar una referencia explícita en el documento a un punto de anclaje específico en el documento FO. La definición de "última página" se puede restringir a un conjunto específico de páginas o para cubrir todo el documento. Esto permite al usuario especificar algo como "Página 2 de 15", donde página 15 es el número de página de una definición de última página.
Los marcadores de tabla permiten al usuario crear contenido dinámico dentro de los encabezados y pies de página de las tablas, como totales acumulados en la parte inferior de cada página de una tabla o indicadores de "tabla continua".
XSL-FO 1.1 añade las palabras clave "inside" y "outside" para los márgenes laterales, lo que permite lograr diseños de página con márgenes ubicados en los bordes externos o internos de las páginas. Inside se refiere al lado de la página que está hacia la encuadernación del libro, y outside se refiere al lado de una página que está lejos de la encuadernación del libro.
XSL-FO 1.1 perfecciona la funcionalidad para ajustar el tamaño de los gráficos, con la capacidad de encogerse para ajustarse (pero no de crecer para ajustarse), así como la capacidad de definir pasos de escala específicos. Además, se puede hacer referencia al factor de escala resultante para su visualización (por ejemplo, para decir en el título de una figura, "la imagen mostrada tiene un tamaño real del 50%)
Al intentar decidir si XSL-FO funcionará o no para un documento determinado, los siguientes requisitos tipográficos y de diseño generalmente indican que XSL-FO no funcionará (aunque algunos de ellos pueden satisfacerse mediante extensiones propietarias):
Estándares XML y HTML , con el estándar CSS , ya que CSS2 (módulo de medios paginados) comienza a proporcionar características básicas a los medios impresos. Con el módulo de medios paginados CSS nivel 3, el W3C está completando la formulación de un estándar integrado para el formato de documentos y la generación de PDF. Así, desde 2013, [2] CSS3-paged es una propuesta del W3C para reemplazar a XSL-FO.
Las notas de diseño para una versión 2.0 de objetos de formato XSL se publicaron por primera vez en 2009 y se actualizaron por última vez en 2012. [3]
{{cite mailing list}}
: Enlace externo en |mailing-list=
( ayuda )