-
Pgina 1Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
Primeros pasos con XML y XSL
Ricardo Borillo Domenech
http://xml-utils.com
Table of Contents
1. Apartados principales2. Introduccin al lenguaje de marcas
XML3. Estructura de los documentos: DTDs
3.1. Asociar un DTD a un documento XML: Elemento raiz3.2.
Elementos padre/hijo en los documentos XML3.3. Operador (*): Cero o
muchas apariciones de un nodo3.4. Operador (+): Una o muchas
apariciones de un nodo3.5. Operador (?): Cero o una aparicin de un
nodo (opcionalidad)3.6. Combinacin de los operadores +, * y ?3.7.
Operador (|): Aparicin de uno u otro elemento3.8. Intercalado de
nodos y texto en un documento3.9. Utilizacin de los atributos en
los nodos3.10. Tipos de atributos CDATA, NMTOKEN y NMTOKENS3.11.
Tipo de atributo ID3.12. Tipo de atributo IDREF y IDREFS3.13.
Enumeraciones en los atributos de un nodo3.14. Atributos
requeridos, opcionales y valores por defecto3.15. El elemento
vacio
4. DTD Vs XML-Schema
4.1. Ejemplo de documento XML para matrcula4.2. Ejemplo de DTD
para matrcula4.3. Ejemplo de XML-Schema para matrcula4.4.
XML-Schemas y RELAX NG
5. XSL: Hojas de estilo para la transformacin de documentos
XML
5.1. Patrones de transformacin XSLT5.2. Expresiones de acceso a
nodos XML con Xpath
6. Diseo de hojas de estilos XSL7. Transformacin de ficheros XML
con Apache Ant8. Formatting Objects
IntroduccinImplementaciones disponiblesVentajas del uso de FO
para la generacin de documentosDescripcin del proceso de generacin
de PDFsDocumento XML que contendr la informacin a mostrarEstructura
del documento XSL-FO resultadoCreacin de una hoja de estilos XSL
que transformar el documento XML en un fichero XSL-FOEjecutar la
transformacin con un parser XSL
-
Pgina 2Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
Procesamiento de dicho fichero XSL-FO con Apache FOP
7. Herramientas para el trabajo con XML8. Entornos de trabajo
con XML
Abstract
Conceptos bsicos para conocer las tecnologias que han nacido
alrededor de XML y como aplicarlas.
1. Apartados principales1. Introduccin al lenguaje de marcas
XML
2. Estructura de los documentos: DTDs
3. DTD Vs XML-Schemas
4. Proceso de transformacin de los documentos XML
5. XSL: Hojas de estilo para la transformacin de documentos
XML
6. Diseo de hojas de estilos XSL
7. Herramientas para el trabajo con XML
2. Introduccin al lenguaje de marcas XML
3. Estructura de los documentos: DTDs
3.1. Asociar un DTD a un documento XML: Elemento raiz
Un documento XML es vlido si ha sido asociado a un documento de
definicin de tipos y si eldocumento cumple las restricciones
expresadas en l. El documento de definicin de tipos tiene
queaparecer antes del primer elemento del documento. El nombre que
sigue a DOCTYPE en el documentode definicin de tipos debe ser el
mismo que el nombre del elemento raz.
Example 1.
Un documento puede contener nicamente el elemento raz tutorial
que contiene algn texto.
Un documento vlido que contiene algn texto
Este es un documento XML
Este documento tambin es vlido
-
Pgina 3Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
3.2. Elementos padre/hijo en los documentos XML
Un tipo elemento puede contener otros elementos hijos. En este
caso no podr contener ningn textosino tan solo elementos separados,
opcionalmente, por espacios en blanco.
Example 2.
El elemento raz XXX debe contener nicamente un elemento AAA
seguido de otro elemento BBB. Loselementos AAA y BBB pueden
contener texto pero no otros elementos.
Un documento vlido que contiene algn texto
Comienzo Fin
Este documento tambin es vlido
3.3. Operador (*): Cero o muchas apariciones de un nodo
Si el nombre de un elemento en una DTD va seguido por un
asterisco [*], este elemento puede aparecerninguna, una o varias
veces.
Example 3.
El elemento raz XXX puede contener ninguno, uno o varios
elementos AAA seguido de exactamenteun elemento BBB. El elemento
BBB tiene que estar siempre presente.
Un documento vlido
Otro documento vlido. El elemento AAA no es obligatorio
-
Pgina 4Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
Ms de un elemento AAA puede aparecer dentro del documento
3.4. Operador (+): Una o muchas apariciones de un nodo
Si el nombre de un elemento en una DTD est seguido por el
caracter ms [+], este elemento tiene queaparecer una o ms veces
.
Example 4.
El elemento raz XXX debe contener uno o ms elementos AAA
seguidos de exactamente un elementoBBB. El elemento BBB tiene que
estar siempre presente.
Un documento vlido
Pueden aparecer varios elementos AAA en el documento
3.5. Operador (?): Cero o una aparicin de un nodo
(opcionalidad)
Si el nombre de un elemento en la DTD est seguido por un signo
de interrogacin [?], este elementopuede aparecer ninguna o una
vez.
Example 5.
El elemento raz XXX puede contener un elemento AAA seguido de
exactamente un elemento BBB. Elelemento BBB tiene que estar siempre
presente:
Un documento vlido:
-
Pgina 5Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
El elemento AAA no es obligatorio:
3.6. Combinacin de los operadores +, * y ?
Este ejemplo usa una combinacin de [ + * ?]
Example 6.
El elemento raz XXX puede contener un elemento AAA seguido de
uno o ms elementos BBB. Elelemento AAA puede contener un elemento
CCC y varios elementos DDD. El elemento BBB tiene quecontener,
exactamente, un elemento CCC y un elemento DDD:
Un documento vlido:
Los elementos en AAA no son obligatorios:
El elemento AAA no puede ser omitido:
3.7. Operador (|): Aparicin de uno u otro elemento
-
Pgina 6Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
Con el caracter [ | ] se puede seleccionar uno de entre varios
elementos.
Example 7.
El elemento raz XXX debe contener un elemento AAA seguido de un
elemento BBB. El elementoAAA tiene que contener un elemento CCC
seguido de un elemento DDD. El elemento BBB tiene quecontener bien
un elemento CCC o bien un elemento DDD:
Un documento vlido:
Otro documento vlido:
3.8. Intercalado de nodos y texto en un documento
El texto puede ser intercalado con elementos.
Example 8.
El elemento AAA puede contener o bien BBB o CCC. Por otro lado
el elemento BBB puede contenercualquier combinacin de texto y
elementos CCC.:
Un documento vlido que explora varias posibilidades:
-
Pgina 7Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
Exactamente un elemento. Esta es una combinacion de elementos
CCC y texto . Slo texto.
3.9. Utilizacin de los atributos en los nodos
Los atributos se usan para asociar pares nombre-valor con
elementos. La especificacin de atributos slopuede aparecer dentro
de la etiqueta de apertura y en los elementos vacios. La declaracin
comienza conATTLIST seguido del nombre del elemento al que
pertenece el atributo y despus le sigue la definicinindividual de
cada atributo.
Example 9.
Un atributo del tipo CDATA puede contener cualquier caracter si
ste se atiene a las reglas deformacin. Los atributos #REQUIRED
deben estar siempre presentes, los #IMPLIED son opcionales:
Los atributos CDATA pueden contener cualquier caracter que se
atenga a las reglas:
Text
El orden de los atributos es indiferente:
Texto
El atributo bbb puede omitirse ya que es #IMPLIED:
-
Pgina 8Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
3.10. Tipos de atributos CDATA, NMTOKEN y NMTOKENS
Un atributo del tipo CDATA puede contener cualquier caracter si
ste se atiene a las reglas deformacin. Si es del tipo NMTOKEN slo
puede contener letras, dgitos, punto [ . ], guin [ - ],subrayado [
_ ] y dos puntos [ : ] . Los del tipo NMTOKENS pueden contener los
mismos caracteres queNMTOKEN ms espacios en blanco. Un espacio en
blanco consiste en uno o ms espacios, retornos decarro o
tabuladores.
Example 10.
Los atributos bbb y ccc siempre tienen que estar presentes, el
atributo aaa es opcional:
Todos los atributos obligatorios estn presentes y sus valores
son del tipo correcto:
Todos los atributos obligatorios estn presentes y sus valores
son del tipo correcto:
3.11. Tipo de atributo ID
El valor de un atributo de tipo ID puede contener slo caracteres
vlidos en NMTOKEN y debecomenzar con una letra. Ningn tipo de
elemento puede tener especificado ms de un atributo de tipoID. El
valor de un atributo ID debe ser nico entre todos los valores de
atributos ID.
Example 11.
Los atributos id, code y X determinan de manera inequvoca su
elemento:
-
Pgina 9Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
Y NMTOKEN #IMPLIED>
Todos los valores ID son nicos:
Los atributos list y Y son del tipo NMTOKEN no ID. stos pueden
tener, por lo tanto, el mismo valorque los atributos ID o tener el
mismo valor en varios elementos:
3.12. Tipo de atributo IDREF y IDREFS
El valor de un atributo IDREF tiene que corresponder con el
valor de algn atributo ID del documento.El valor del atributo
IDREFS puede contener varias referencias a elementos con atributos
ID separadospor espacios en blanco.
Example 12.
Los atributos id y mark determinan inequvocamente su elemento.
Los atributos ref hacen referencia aestos elementos:
Todos los valores ID son nicos y todos los valores IDREF e
IDREFS apuntan a elementos con IDsrelevantes:
-
Pgina 10Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
3.13. Enumeraciones en los atributos de un nodo
Se pueden definir los valores permitidos en un atributo en la
DTD.
Example 13.
Esta DTD declara los valores exactos que son permitidos:
Todos los valores se dan en la DTD:
3.14. Atributos requeridos, opcionales y valores por defecto
Si un atributo es opcional (#IMPLIED), puede definrsele un valor
por defecto para cuando el atributo nose usa.
Example 14.
Ambos atributos son opcionales. Se dan sus valores por
defecto.:
Los valores de true son yes, no y yes. Los valores de month son
8, 2 y 1.:
-
Pgina 11Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
3.15. El elemento vacio
Un elemento puede ser definido EMPTY (vacio). En ese caso slo
puede contener atributos pero notexto.
Example 15.
Los elementos AAA pueden contener solamente atributos pero no
texto:
Ambas formas son vlidas. En el segundo caso la etiqueta de
cierre debe seguir inmediatamente al deapertura:
4. DTD Vs XML-Schema
4.1. Ejemplo de documento XML para matrcula
Definici general del documento XML que representa la imagen de
matrcula de un alumno que realizala Automatrcula en la Universitat
Jaume I. En esto documento no diferenciamos si su estructura
internava a ser definida por un DTD o por un XML-Schema ...
52945813C Ricardo Borillo Domenech Enginyeria Informtica (Pla
2001) 2002/2003
C/ Principal n1 C/ Secundaria n2
-
Pgina 12Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
Matrcula ordinria
En el caso de que queramos definir la estructura del documento
mediante un XML-Schema, deberemossustituir la cabecera del
documento de la forma siguiente:
...
Si por el contrario, queremos seguir utilizando la estructura
clsica de un DTD:
...
4.2. Ejemplo de DTD para matrcula
4.3. Ejemplo de XML-Schema para matrcula
-
Pgina 13Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
4.4. XML-Schemas y RELAX NG
Al igual que surgi XML Schema como una mejora necesaria sobre la
idea en la que se fundamentabanlas DTDs, han surgido distintas
propuestas al margen de los Schemas, de estas ideas no vamos a
quedarcon una, RELAX NG, que es, a su vez, la fusin de otras dos
iniciativas TREX y RELAX que paraconseguir un mayor avance han
decidido aunar fuerzas. Bsicamente, RELAX NG maneja documentosXML
que representan esquemas e instancias a travs de un modelo
abstracto de datos, esto que suena unpoco oscuro viene a querer
expresar que, para RELAX NG, un documento XML es la representacin
deun elemento y que a su vez un elemento est formado por una serie
de "partes" como son: un nombre, uncontexto, un conjunto de
atributos y una secuencia ordenada de cero o ms hijos. Y as con
cada una deestas partes. Aunque la especificacin completa se puede
encontrar en OASIS7, vamos a mostrar cualesson la principales
diferencias, no tanto conceptuales si no de uso, de RELAX NG con
respecto a XMLSchema. En primer lugar es importante resaltar que
RELAX NG, y sus precursores RELAX y TREX,son intentos de
simplificar y/o potenciar la utilidad de las DTDs en general y en
particular de XMLSchema. Tambin es importante indicar que esta
iniciativa no es oficial de W3.ORG, si bien estimpulsndose dentro
de un nutrido grupo de gente lideradas por James Clark, MURATA
Makoto, y anno est reconocido por el estndar ni tan siquiera como
recomendacin. En segundo lugar, podemosdecir, sin mucho margen de
error, que la principal mejora de RELAX NG respecto a XML Schema es
lamayor simplicidad en manejo y aprendizaje que requiere. Como
consecuencia de esta simplificacinrenunciamos al uso de los y a
favor del uso de, nicamente, elementos yciertas etiquetas
especiales para marcar nmero requerido de apariciones, tipo de dato
de un elemento,etc.
-
Pgina 14Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
5. XSL: Hojas de estilo para la transformacin de
documentosXML
XSL es un lenguaje creado para dar estilo a los documentos XML a
los cuales se aplica. As, XSL es unaespecificacin que se compone de
partes o recomendaciones:
Xpath. Lenguaje que permite escribir expresiones para la bsqueda
de nodos dentro del arbolXML.
XSLT. Reglas o patrones para la transformacin del contenido de
los nodos XML sobre los cualesse consigue una correspondencia. Si
lo que queremos es generar pginas HTML a partir dedocumentos XML,
podemos complementar/sustituir XSL por CSS.
Formatting Objects. Actualmente, constituye un lenguaje de
especificacin de estilo en base alcual nos es posible la generacin
de PDFs.
5.1. Patrones de transformacin XSLT
1. Definicin de las cabeceras de la pgina XSL
-
Pgina 15Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
Example 16.
...
2. El patrn o template: Elemento bsico de la pginas de
estilo
Para cada nodo del rbol XML tenemos la posibilidad de definir un
patrn de estilos que marcarcomo se va a presentar este nodo en el
documento final. Por ejemplo, si tenemos el siguientedocumento
XML:
Example 17.
Prueba de patrones XSL Cuerpo del documento
... y esta hoja de estilos:
... el resultado de la transformacin ser el siguiente:
-
Pgina 16Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
Prueba de patrones XSL Prueba de patrones XSL Cuerpo del
documento
En este ejemplo podemos apreciar de varias instrucciones
XSL:
Uso de la instruccin "xsl:template" para definir nuevos
templates con los que van a iridenticndose los nodos del documento
XML. En los templates, podemos utilizar el atributomodificador
"mode" con el fin de poder llamar a un mismo template desde dos
contextosdistintos en los que queremos dos resultados distintos. Es
por esto que procesar el nodo"title" desde la cabecera o desde el
cuerpo del documento HTML, va ha tener unarepresentacin
distinta.
Uso de sentencias de procesamiento de templates como
"xsl:apply-templates". Estainstruccin lanza la bsqueda de templates
a aplicar a partir del punto en el que nosencontremos del rbol XML.
Si ya hemos procesado el nodo titulo con un template'xsl:template
match="titulo"' y desde aqu queremos procesar la descripcin, no
podremosutilizar directamente un "xsl:apply-templates" ya que este
nodo se encuentra en otro puntode la jerarqua. A esta instruccin
podemos aplicarle el atributo modificador "select", pararestringir
los templates que se aplican a los de un tipo determinado.
5.2. Expresiones de acceso a nodos XML con Xpath
Ejemplos de expresiones que podemos aplicar dentro del
modificador "select" de un a instruccin"xsl:apply-templates":
Acceso a todos los nodos "titulo":
Acceso a todos los nodos "titulo" que tengan como padre a
"test1":
Acceso al nodo raiz del documento XML:
Acceso a todos los nodos "titulo" que tengan como antecesor a
"test1":
Acceso al primero de los nodos "titulo" que tengan como padre a
"test1":
-
Pgina 17Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
Acceso al ltimo de los nodos "titulo" que tengan como padre a
"test1":
Acceso a los nodos "titulo" que sean pares y que tengan como
padre a "test1":
Acceso a todos los nodos "titulo" en cualquier parte del
documento:
Acceso a todos los nodos "titulo" en cualquier parte del
documento, a partir del contexto actual:
Acceso a todos los nodos "titulo" que tengan como "abuelo" a
"test1":
Acceso a todos los nodos "titulo" que tengan un atributo
"id":
Acceso a todos los nodos "titulo" que NO tengan un atributo
"id":
Acceso a todos los nodos "titulo" que tengan un atributo "id"
con valor "XXX":
Acceso a todos los nodos "test1" que tengan un hijo "titulo" con
valor "XXX":
Acceso a todos los nodos "test1" que tengan un hijo "titulo" con
valor "XXX", normalizando labsqueda, es decir, eliminado espacios
en blanco al inicio y final del nodo:
Acceso a todos los nodos "titulo" o "descripcion":
-
Pgina 18Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
6. Diseo de hojas de estilos XSL
1. Seleccin de valores individuales.
Example 18.
Para la seleccin de valores individuales, extraidos de los nodos
del rbol XML, debemos utilizarla instruccin "xsl:value-of", con
ella podemos hacer referencia tanto a nodos, como variables,clculos
matemticos, etc. Para el acceso a los nodos, debemos utlizar las
expresiones Xpathpreviamente descritas:
2. Templates y el modificador "mode" (Ya espuesto en el apartado
5.1, punto 2).
3. Templates con nombre . Este tipo de templates no se
corresponden con ningn nodo deldocumento XML y slo podemos
invocarlos haciendo referencia a ellos directamente. Susentencia de
definicin ya no incluye el atributo "match", sino que este se
sustituye por "name".Podemos aumentar las funcionalidades de este
tipo de templates pasandole parmetros. Elsiguiente ejemplo hace uso
de la definicin de templates por nombre y paso de parmetros:
Example 19.
Documento XML que usaremos como base:
Prueba de patrones XSL
-
Pgina 19Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
Cuerpo del documento
Documento XSL que aplica los templates por nombre:
Nothing
Resultado de la transformacin:
Prueba de patrones XSL Prueba de patrones XSL Cuerpo del
documento Prueba de patrones XSL
-
Pgina 20Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
4. Procesamiento procedural, otro enfoque para aplicar
templates.
Example 20.
5. Procesamiento condicional.
Example 21.
Este tipo de condicional no tiene ELSE
6. Procesamiento condicional para varias
opciones/comprobaciones.
Example 22.
Valor uno Valor dos Variable con valor erroneo
7. Reportar errores desde la hoja de estilos.
Example 23.
Este es el mensaje de error !!
8. Creacin de nuevos elementos dinmicamente.
Example 24.
a http://www.si.uji.es Servei d'informtica
9. Ordenacin de elementos en XSLT
Example 25.
-
Pgina 21Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
10. Expresiones matemticas
Example 26.
Consideramos la existencia de dos nodos con valores numricos a
partir de nuestro contexto,cuyos nombres son "x" e "y":
a.
b.
c.
d.
e.
f.
g.
h.
i.
j.
k.
11. Uso de variables
Example 27.
-
Pgina 22Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
7. Transformacin de ficheros XML con Apache AntAnt es un sistema
de compilacin basada en Java. Su funcionalidad es similar a los
clsicos Makefilesdel mundo UNIX, aunque en lugar de poder
extenderse mediante el uso de comandos del Shell, Antpuede
extenderse en base a clases Java.
Ant ejecuta un conjunto de objetivos o targets descritos en un
fichero XML que se llama por defecto"build.xml".
Todos los targets en Ant se ejecutan despues del target raiz
(init).
En un fichero de compilacion de Ant podemos hacer que un target
dependa de otros con el fin de que nose pueda realizar si todos los
anteriores no se han completado.
Example 28.
Ejemplo de fichero Ant en el que tenemos el target raiz y un
segundo target que depende del raiz.
Ant define una lista muy amplia de tareas que se pueden ejecutar
dentro de un target, como por ejemplo:
-
Pgina 23Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
javac. Compila un fichero Java.
java. Ejecuta un fichero Java.
jar. Empaqueta un conjunto de recursos.
mail. Envio de mails.
ftp. Transmisin de ficheros por FTP.
war. Empaqueta una aplicacin J2EE.
Podemos encontrar un listado completo de todas las tareas
soportadas por Ant en la direccin
http://ant.apache.org/manual/index.html. As, existen adems una
serie de tareas relacionadas con elprocesamiento de ficheros
XML:
xmlproperty. Permite cargar un fichero XML como propiedades de
Apache Ant.
xslt. Transformacin de documento XML mediante hojas de estilo
XSL. Slo podemos utilizaresta tarea si contamos con el .JAR del
Xalan (procesador XSLT de Apache).
xmlvalidate. Validacin de documentos XML utilizando un interfaz
SAX.
Example 29.
Ejemplo de fichero Ant en el que se transforma un documento XML
aplicando una hoja de estilos XSL:
8. Formatting Objects
Introduccin
El estandar XSL, tal y como est definido actualmente, se divide
en dos grandes partes:
XSLT. Transformacin de un documento de entrada XML en algn tipo
de documento de salida,ya sea XML, HTML, PDF, etc.
Formatting Objects. Se encargan de definir la visualizacin final
del resultado de latransformacin.
-
Pgina 24Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
El nico uso que se ha hecho en la actualidad de Formatting
Objects, siempre ha estado enfocado a lageneracin de documentos de
calidad destinados a la impresin. Este es el caso de los documentos
PDF.
Implementaciones disponibles
Si queremos generar un PDF a partir de un documento en formato
FO, podemos utilizar los siguientesconjuntos de utilidades, siendo
las dos primeras de libre distribucin:
Apache FOP. API desarrollada por el proyecto Apache que permite
la generacin de los PDFs enlnea de comandos o mediante llamadas al
API.
PassiveTex. Conjunto de macros LaTeX que nos permiten la
transformacin del documento XMLa un documento en TeX sobre el que
podremos generar un PS y posteriormente un PDF.
XEP. Producto comercial de "RenderX" (http://www.renderx.com)
escrito en Java.
XSL Formatter. Producto comercial de "Antenna House"
(http://www.antennahouse.com)
Unicorn Formatting Objects. Producto comercial de "Unicorn
Enterprises" (http://www.unicorn-enterprises.com) que adems es slo
para Windows.
Ventajas del uso de FO para la generacin de documentos
Sencillo manejo de ciertas caractersticas de la generacin de
documentos como:
Pginacin automtica.
Definicin de mrgenes para el documento.
Definicin de patrones distintos de presentacin para cada una de
las hojas.
Control "al milmetro" de la presentacin de los elementos dentro
del PDF.
Definicin simplificada de cabeceras y pies de pgina.
Permite la insercin de diversos elementos grficos como: imgenes,
tablas, etc.
Permite definir la presentacin de cada elemento del documento en
base a atributos muysimilares, en la mayora de los casos, a los
atributos de una hoja de estilos CSS.
El API de Apache FOP permite una gran integracin con otras APIs
del proyecto Apache:
FOP es una parte constituyente de Cocoon (Framework para la
publicacin de documentos XML atravs de la web).
FOP permite embeber grficos SVG, renderizndolos a PNGs e
insertndo el resultado dentro delpropio PDF.
Con XSL-FO podemos acometer varios aspectos en la generacin de
documentos con una alta calidad deimpresin:
Definicin del tamao fsico de la pgina que se crear (A4, Letter,
etc).
Control sobre propiedades de la pgina como los mrgenes,
cabeceras, pies, etc.
-
Pgina 25Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
Uso de elementos clsicos dentro del documento como son los
prrafos, tablas, etc.
Posibilidad de dar formato de presentacin al texto generado,
cambiando el tipo de fuente, sutamao, su color y dems recursos
grficos.
Descripcin del proceso de generacin de PDFs
El proceso que cubriremos en esta gua (descrito en el siguiente
grfico) con el fin de obtener un PDFser el siguiente:
Creacin de un fichero XML que contendr la informacin a mostrar
en el PDF.
Creacin de una hoja de estilos XSL que transformar el documento
XML en un fichero XSL-FO.El fichero contendr las definiciones
necesarias en lenguaje FO que detallaremos en prximosapartados, con
el fin de generar el documento final.
Ejecutar la transformacin con un parser XSL, obteniendo como
resultado, el fichero XSL-FOdescrito anteriormente.
Procesamiento de dicho fichero XSL-FO, con el procesador Apache
FOP, generndose finalmenteel fichero PDF.
Documento XML que contendr la informacin a mostrar
Listado de ventas Toalla de bao Cortina de plstico Servilleta de
punto Papel de cocina
Estructura del documento XSL-FO resultado
Antes de disear la hoja de estilos XSL, debemos saber que
estructura tenemos que generar.
Un documento XSL-FO tiene una estructura que, a priori, parece
muy complicada, pero no es as. Lamayoria de los elementos que
definimos en en documento XSL-FO son comunes a todos ellos, con
loque siempre podremos copiarlos de otro ya definido. Estos
aspectos fijos son, por ejemplo, losmargenes, estructura de las
pginas y otros aspectos de configuracin de la estructura.
Ejemplo de esqueleto de un documento XSL-FO, cuya estructura se
repetir en la mayora de los casos:
-
Pgina 26Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
Como podemos ver, no es tan complicado una vez sabemos que no
hay necesidad de redefinirlo cadavez.
Entremos a ver con detalle cada elemento de la estructura con el
fin de entenderlos mejor.
Elemento
Elemento que marca el inicio y el fin del documento XSL-FO. Nos
apoyamos en este elemento paradefinir el espacio de nombres para
FO.
...
Elemento
Engloba un conjunto de definiciones sobre la estructura o layout
de las pginas, es decir, contiene uno oms . Con esto conseguimos,
por ejemplo, que en nuestro documento existanunas pginas con
orientacin vertical y otras apaisadas. Tambin podemos as, definir
distintosmrgenes para las pginas del documento segn si la pgina es
par o impar.
En la mayora de los casos, con una sla definicin de pgina sera
suficiente.
...
-
Pgina 27Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
Elemento
Se encarga de especificar los mrgenes, altura y anchura de un
pgina en concreto (para conseguir unaorientacin vertical o
apaisada).
...
Descripcin de cada uno de los elementos constituyentes de este
elemento:
master-name
Como podemos crear mltitud de definiciones de pginas,
posteriormente debemos ser capaces deasociar cada pgina real con su
definicin de estructura. Lo haremos siempre a travs del
"master-name".
margin-top, margin-bottom, margin-left y margin-right
Definen el tamao de los mrgenes superior, inferior, izquierdo y
derecho segn la siguiente tablade unidades:
Table 1. Tabla de unidades de definicin
Unidad Descripcincm Centmetrosmm Milmetrosin Pulgadaspt Puntos,
siendo 72 puntos una pulgadapc Picas, siendo 12 puntos una pica y 6
picas una pulgadapx Pixels (dependiente del dispositivo de
visualizacin)em La longitud de la letra M mayscula
page-width y page-height
Tamao fsico de la pgina. En el ejemplo se utiliza 21x29.7, es
decir, DIN-A4.
Elemento , y
region-body. Dimensin del rea principal en el centro de la
pgina.
region-before. Parte superior de la pgina, utilizada normalmente
para la cabecera del documento.
region-after. Parte inferior de la pgina, utilizada normalmente
para el pie del documento.
region-start. Parte izquierda del documento.
region-end. Parte derecha del documento.
-
Pgina 28Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
Elemento
Describe el conjunto de paginas con un formato o estructura
determinado. Esta estructura de paginasviene referenciadas a traves
del atributo "master-reference". Este atributo es una referencia a
un tag detipo fo:simple-page-master cuyo "master-name" corresponde
con el indicado.
...
Elemento
Define la region de la pagina en la que se insertara el
contenido, como por ejemplo el "xsl-region-body".
Elementos de definicion de contenido
Para terminar la definicion de nuestro ejemplo, vamos a ver dos
de los elementos mas utilizados a lahora de definir contenido
dentro de un documento FO:
Definicion de bloques con . Define una seccion o parrafo de
contenido al estilo de laetiqueta de HTML. Este elemento siempre
causa una salto de linea despues de surenderizado. En la propia
etiqueta "block" pueden definirse ciertos estilos del texto, como
son porejemplo el tamao o tipo de fuente.
...
Definicion de estilos para el texto contenido en un bloque .
Permite modificar el estilodel texto ya contenido dentro de un
bloque, sobrescribiendo asi las definiciones que se
habianhecho.
Texto de ejemplo.
Creacin de una hoja de estilos XSL que transformar el documento
XML en unfichero XSL-FO
-
Pgina 29Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
Con el fin de que la informacion que se genere en el documento
XSL-FO de salida pueda ser dinamica,haremos que los datos se
almacenen en un documento XML, transformandose en el documento de
salidamediante el uso de una hoja de estilos XSL.
Ejecutar la transformacin con un parser XSL
Si vamos a utilizar un procesador en linea de comandos como
puede ser el XSLTPROC, la instruccion aejecutar seria la
siguiente:
xsltproc sample.xsl sample.xml > sample.fo
-
Pgina 30Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
Si vamos a utilizar Apache ANT. El fichero "build.xml" seria el
siguiente:
La ejecucion de esta definicion nos permite tomar un fichero
"sample.xml" como entrada, aplicarle unahoja de estilos xsl
"sample.xsl" y obtener como salida un fichero "sample.fo" con el
codigo FOcorrespondiente.
Procesamiento de dicho fichero XSL-FO con Apache FOP
Para obtener finalmente el fichero PDF que queremos como
resultado, podemos ejecutar el siguientescript que viene con la
distribucion de Apache FOP:
/opt/fop-0.20.5rc2/fop.sh sample.fo -pdf sample.pdf
7. Herramientas para el trabajo con XMLXML
Apache Xerces (Java)
4Suite (Python)
Sablotron (C y PHP)
XSL
xlstproc (linea de comandos)
Apache Xalan (Java)
Jame's Clark XT (C y Java)
4Suite (Python)
Sablotron (C y PHP)
Formatting Objects
Apache FOP (Java)
Passive TeX (LaTeX - linea de comandos y conocido como PDF
LaTeX)
-
Pgina 31Primeros pasos con XML y XSL
19/02/2008 11:50:30
a.m.http://xml-utils.com/conferencia-xsl.html
8. Entornos de trabajo con XMLPublicacin de documentos XML
aplicando plantillas XSL
Apache Cocoon (Java)
AxKit (Perl)
Edicin de documentos XML/XSL/Schemas/FO
XML Spy 4.4 (windows)
eXcelon Stylus (windows)
Emacs (modo PSGML/XSL)