31
Página 1 Primeros 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 principales 2. Introducción al lenguaje de marcas XML 3. Estructura de los documentos: DTDs 3.1. Asociar un DTD a un documento XML: Elemento raiz 3.2. Elementos padre/hijo en los documentos XML 3.3. Operador (*): Cero o muchas apariciones de un nodo 3.4. Operador (+): Una o muchas apariciones de un nodo 3.5. Operador (?): Cero o una aparición de un nodo (opcionalidad) 3.6. Combinación de los operadores +, * y ? 3.7. Operador (|): Aparición de uno u otro elemento 3.8. Intercalado de nodos y texto en un documento 3.9. Utilización de los atributos en los nodos 3.10. Tipos de atributos CDATA, NMTOKEN y NMTOKENS 3.11. Tipo de atributo ID 3.12. Tipo de atributo IDREF y IDREFS 3.13. Enumeraciones en los atributos de un nodo 3.14. Atributos requeridos, opcionales y valores por defecto 3.15. El elemento vacio 4. DTD Vs XML-Schema 4.1. Ejemplo de documento XML para matrícula 4.2. Ejemplo de DTD para matrícula 4.3. Ejemplo de XML-Schema para matrícula 4.4. XML-Schemas y RELAX NG 5. XSL: Hojas de estilo para la transformación de documentos XML 5.1. Patrones de transformación XSLT 5.2. Expresiones de acceso a nodos XML con Xpath 6. Diseño de hojas de estilos XSL 7. Transformación de ficheros XML con Apache Ant 8. Formatting Objects Introducción Implementaciones disponibles Ventajas del uso de FO para la generación de documentos Descripción del proceso de generación de PDFs Documento XML que contendrá la información a mostrar Estructura del documento XSL-FO resultado Creación de una hoja de estilos XSL que transformará el documento XML en un fichero XSL-FO Ejecutar la transformación con un parser XSL

Primeros Pasos Con XML y XSL

Embed Size (px)

DESCRIPTION

xml

Citation preview

  • 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)