lm-ut6: transformaciones xml

40
Lenguajes de Marcas y SGI Lenguajes de Marcas y SGI UT 6: XML (II). Transformación de documentos y hojas de estilo. CFGS «Administración de Sistemas Informáticos en Red» CIFP Juan de Colonia (Burgos) David H. Martín Alonso – Curso 2010/2011 –

Upload: david-martin

Post on 17-Dec-2014

1.759 views

Category:

Education


0 download

DESCRIPTION

Lenguajes de Marcas y SGI (CFGS Administrador de Sistemas Informáticos en Red)

TRANSCRIPT

Page 1: LM-UT6: Transformaciones XML

Lenguajes de Marcas y SGILenguajes de Marcas y SGI

UT 6: XML (II).Transformación de documentos

y hojas de estilo.

CFGS «Administración de SistemasInformáticos en Red»

CIFP Juan de Colonia (Burgos)

David H. Martín Alonso

– Curso 2010/2011 –

Page 2: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

ContenidosContenidos

CSS

XSLT

XPath

Page 3: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

3/40

ObjetivosObjetivos• XML permite estructurar la información.• Habitualmente pensaremos en algún uso ¿no?

– Visualizar.– Imprimir.– Transferencia entre aplicaciones.

• ¿Cómo? Opciones:– Programar aplicaciones particulares para cada uso.– Formatos/lenguajes complementarios para XML.

■ Introducción□CSS□XSLT□XPath□XSL-FO

Page 4: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

4/40

XML y CSSXML y CSS• ¿Cómo se ve un archivo XML?

– No es una prioridad la visualización directa de XML.– No es competitivo con las posibilidades de HTML/XHTML.– ¿Cómo haríamos una tabla?

• Los navegadores web proporcionan una visualización básica:

– coloreado de sintaxis– árbol de elementos desplegable

• CSS permite mejorar la visualización directa– Reutilización de CSS: HTML, XML, SVG...

• Transformaciones limitadas de la estructura.– Efecto camaleónico gracias a la propiedad display– display: none, block, inline, list-item, table…

• Enlace a la hoja CSS: instrucción de procesado (PI)<?xml-stylesheet type="text/css" href="ej0.css"?>

□Introducción■CSS□XSLT□XPath□XSL-FO

Page 5: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

5/40

Ejemplos CSSEjemplos CSS<?xml version="1.0" encoding="UTF-8" standalone="yes"?><?xml-stylesheet type="text/css" href="nombres.css"?><grupo><nombre>Pedro</nombre><nombre>Juan</nombre><nombre>Luis</nombre><nombre>Adolfo</nombre><nombre>Francisco</nombre><nombre>José</nombre><nombre>Martín</nombre><nombre>Petra</nombre><nombre>María</nombre></grupo>

nombre {display:block;}

□Introducción■CSS□XSLT□XPath□XSL-FO

nombre { display:block;text-align:center;padding:20px; margin: 5px;border:solid thin blue;}

grupo { display:table;width:10em;margin: 10px auto;}

Page 6: LM-UT6: Transformaciones XML

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

Abril de 2011 CIFP Juan de Colonia

Probar los ejemplos anteriores en distintos

navegadores:

-Sin la instrucción de procesado

-Con la hoja mínima, aplicando display:block

-Experimentar con otros ejemplos y propiedades, por

ejemplo simulando tablas.

-Explotar el uso de identificadores id para colorear

ciertas celdas. Puede ser necesario crear el DTD.

-Poner en encabezado y un pie a la lista empleando

SOLO CSS, con los pseudo-elementos :before y

:after aplicados a grupo.

Actividad I: CSSActividad I: CSS

Page 7: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

7/40

XSLXSLeXtensible Stylesheet Language: XSLDos sublenguajes

• XSL Transformations: XSLT– Lenguaje de programación

• XSL - Formatting Objects: XSL-FO– Instrucciones de formato

El modelo y otros acompañantes• Document Object Model: DOM

– Árbol de elementos• XML Path Language: XPath

– Localización dentro del árbol DOM• XML Linking Language: XLink

– Gestión de hiperenlaces

Estándares W3C todos

□Introducción□CSS■XSLT□XPath□XSL-FO

Page 8: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

8/40

XSLTXSLTXSL Transformations

• Define transformaciones sobre documentos XML– Documento de entrada → documento de salida

XML → XML, XML → HTML, XML → texto…• Espacio de nombres XSLT 1.0:

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"• Prefijo habitual: xsl• Elemento raíz: 2 sinónimos

<xsl:stylesheet … ><xsl:transform … >

• Enlace desde documentos: instrucción de procesado<?xml-stylesheet type="text/xsl" href="ej0.xsl"?>

• Ejecución:– En navegadores: Firefox, Internet Explorer...– Procesadores XSL: xsltproc

□Introducción□CSS■XSLT□XPath□XSL-FO

Page 9: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

9/40

Ejemplos XSLT (I): ¡Hola mundo!Ejemplos XSLT (I): ¡Hola mundo!<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="nombres.xsl"?><grupo><nombre>Pedro</nombre> … <?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="text" encoding="iso-8859-1"/>

<xsl:template match="nombre"><xsl:text>¡Hola </xsl:text><xsl:value-of select="."/><xsl:text>!</xsl:text>

</xsl:template></xsl:stylesheet>

• Transformaciones organizadas en «plantillas»– xsl:template– Búsqueda recursiva apoyada por condiciones

□Introducción□CSS■XSLT□XPath□XSL-FO

Page 10: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

10/40

Ejemplos XSLT (II): plantillas básicasEjemplos XSLT (II): plantillas básicas<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="nombres.xsl"?><grupo><nombre>Pedro</nombre> …

<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="text" encoding="iso-8859-1"/>

<xsl:template match="/"><xsl:text>¡Hola a todo el mundo!</xsl:text><xsl:apply-templates/>

</xsl:template><xsl:template match="nombre">

<xsl:text>¡Hola </xsl:text><xsl:value-of select="."/><xsl:text>!</xsl:text>

</xsl:template></xsl:stylesheet>

– Forzamos la búsqueda en los hijos:xsl:apply-templates

□Introducción□CSS■XSLT□XPath□XSL-FO

Page 11: LM-UT6: Transformaciones XML

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

Abril de 2011 CIFP Juan de Colonia

Probar los ejemplos anteriores en distintos

navegadores.

-Solo con la plantilla aplicada a <nombre>

-Añadir la plantilla aplicada al elemento raíz, sin la

instrucción para aplicar plantillas a los hijos. Veréis

que se anula el efecto de recursividad y por tanto el

de la plantilla anterior.

Probar a realizar la transformación con la herramienta

xsltproc en línea de órdenes.

Actividad II: procesadores XSLTActividad II: procesadores XSLT

Page 12: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

12/40

xsltprocxsltprocUtilidad de texto para aplicar transformaciones.

• Soporta XSLT 1.0

$> xsltprocUsage: xsltproc [options] stylesheet file [file ...] Options: --version or -V: show the version of libxml and libxslt --verbose or -v: show logs of what's happening --output file or -o file: save to a given file --noout: do not dump the result --encoding: the input document character encoding …Project libxslt home page: http://xmlsoft.org/XSLT/To report bugs and get help: http://xmlsoft.org/XSLT/bugs.html

□Introducción□CSS■XSLT□XPath□XSL-FO

Page 13: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

13/40

n! ≡ n × (n-1)!n! ≡ n × (n-1)!XSLT es un lenguaje declarativo.

– Definimos un conjunto de reglas a aplicar.– Se aplican a todo el documento: el árbol DOM– No hay que especificar la secuencia para aplicarlas.

Modelo recursivo:• Dos partes en cada plantilla

– Atributos, match: patrón de selección de los elementos– Contenido: resultado a producir

• A cada elemento se aplica una plantilla– Encadenando plantillas se procesa todo el documento

• Inicialmente se procesa solo el elemento raíz– Se aplica la regla apropiada– Si no hay regla apropiada se aplica la regla por defecto:apply-templates

– Cualquier regla puede también forzar apply-templates para transformar los hijos

□Introducción□CSS■XSLT□XPath□XSL-FO

Page 14: LM-UT6: Transformaciones XML

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

Abril de 2011 CIFP Juan de Colonia

Combinando adecuadamente texto podemos

transformar el contenido a formatos variados.

- Generar sentencias INSERT de SQL que permitan

incorporar los nombres a una hipotética tabla

Alumnos.

- Transformar la lista de nombres en una página web

con la tabla correspondiente. Conseguir la estructura

básica y luego tratar de pulir para que valide.

Esto puede ayudar...:

Actividad III: transformaciones variasActividad III: transformaciones varias

<xsl:output method="xml" encoding="utf-8"doctype-public="-//W3C//DTD XHTML 1.1//EN"doctype-system="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"indent="yes"/>

Page 15: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

xsl:apply-templatesxsl:apply-templates

● Al aplicar una plantilla se detiene la recursividad en toda la rama, queda «ensombrecida».

● apply-templates permite volver a «ver» toda la rama en el sitio de la plantilla que nos interese.

● Podemos restringir apply-templates solo a algunos hijos incorporándole el atributo select con la ruta XPath adecuada.

● ¿Nos sirve todavía xmllint?

Page 16: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

16/40

n! ≡ n × (n-1) × (n-2) … × 2 × 1n! ≡ n × (n-1) × (n-2) … × 2 × 1Modelo iterativo:

• XSLT también incluye elementos iterativos.– Programación bajo el paradigma procedimental. – Podemos diseñar recorridos por el árbol desde una única

plantilla central.– Basado en bucles que recorren un conjunto de nodos:for-each en vez de apply-templates

• Ventajas/inconvenientes– Se pueden construir transformaciones análogas con ambos

estilos de programación.– El anidamiento de bucles incrementa la complejidad

Complejidad ≈ tamaño - robustez + coste– Los programadores tradicionales prefieren el modelo

iterativo. Los programadores XML prefieren el declarativo.– Se pueden combinar unos y otros en una misma aplicación.

□Introducción□CSS■XSLT□XPath□XSL-FO

Paradigma: Teoría cuyo núcleo central se acepta sin cuestionar y que suministra la base y modelo para resolver problemas y avanzar en el conocimiento.Paradigma: Teoría cuyo núcleo central se acepta sin cuestionar y que suministra la base y modelo para resolver problemas y avanzar en el conocimiento.

Page 17: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

17/40

Ejemplos: for-each vs. apply-templatesEjemplos: for-each vs. apply-templates<xsl:template match="/">

<xsl:text>¡Hola a todo el mundo!</xsl:text><xsl:apply-templates select="grupo/nombre"/>

</xsl:template><xsl:template match="nombre">

--&gt; <xsl:value-of select="."/></xsl:template>

Los efectos de espaciado se evitarían con xsl:text

– 2 estilos de programación: recursivo / iterativo– Recorremos las ramas: xsl:for-each

□Introducción□CSS■XSLT□XPath□XSL-FO

<xsl:template match="/"><xsl:text>¡Hola a todo el mundo!</xsl:text><xsl:for-each select="grupo/nombre">

--&gt; <xsl:value-of select="."/></xsl:for-each>

</xsl:template>

Recursivo

Iterativo

Page 18: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

18/40

Condiciones y alternativasCondiciones y alternativas• Elementos para producir salidas condicionadas o

alternativas– Elementos con sesgo «procedimental»

• Condiciones simples: if– Atributo test: expresión XPath, la condición

• Condiciones múltiples: choose / when / otherwise– Varias opciones y, además un valor por defecto

□Introducción□CSS■XSLT□XPath□XSL-FO

<xsl:if test="text()='Juan'">, amigo</xsl:if>

<xsl:choose> <xsl:when test="text()='Juan'">, amigo!</xsl:when> <xsl:when test="text()='María'">, amiga!</xsl:when> <xsl:otherwise>!</xsl:otherwise></xsl:choose>

Page 19: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

19/40

VariablesVariables• Valores etiquetados para facilitar su reutilización.

– Texto plano o también marcado XML o HTML.• Finalidades

– Reutilización en diversas partes del código.– Fácil localización para facilitar eventuales cambios.– Mejor legibilidad del código.

• NO podemos modificar su valor posteriormente.• Locales a una plantilla o globales compartidas.

• Definición: 2 alternativas– Atributo select: recomendable para XPATH o texto corto.– Contenido del elemento: texto largo o con marcado.

• Acceso: operador $

□Introducción□CSS■XSLT□XPath□XSL-FO

<xsl:variable name="v0">¡Hola</xsl:variable><xsl:variable name="v1" select="mundo!"/>…<xsl:value-of select="concat($v0,' ',$v1)">

Page 20: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

20/40

Paso de parámetrosPaso de parámetros• Valores con nombre que transferimos a otra plantilla

– apply-templates o llamadas directas call-template– call-template exige plantillas con nombre

• Declaración doble– En la llamada: with-param – En la plantilla: param

• Definición– En la llamada, con with-param – En atributo select o en contenido, igual que las variables

• Acceso también con el operador $

□Introducción□CSS■XSLT□XPath□XSL-FO

<xsl:call-template name="plantillaN"><xsl:with-param name="p0" select="¡Hola!"/>

</xsl:call-template> …<xsl:template name="plantillaN"><xsl:param name="p0"/> …

Page 21: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

21/40

Más XSLT: generando XMLMás XSLT: generando XML• <xsl:output type="xml"…

– Introduce prologo, instrucciones de procesado, espacios de nombres…

– Podemos incrustar los elementos a generar entre los elementos XSLT o generarlos desde el propio XSLT.

– Se conserva el emparejamiento de etiquetas para que la propia hoja XSLT sea XML bien formado.

– Se debe restringir el uso de <xsl:text>: saltos y formato.• Elementos XSLT para generar componentes XML:

<xsl:processing-instruction name= …<xsl:element name= … / <xsl:attribute name= …<xsl:comment> …

• Trasladando contenido:<xsl:copy … / <xsl:copy-of …

• Mensajes informativos– Generalmente van a la salida de «error estándar»<xsl:message> …

□Introducción□CSS■XSLT□XPath□XSL-FO

Page 22: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

22/40

XPath (I)XPath (I)□Introducción□CSS□XSLT■XPath□XSL-FO

• Estamos empleando ya expresiones XPath sencillas en distintas instrucciones XSLT.

<xsl:template match= … > – Raíz DOM: “/”– Nodo actual y nodo padre: “.” y “..”– Nodos hijo, todos: “*”– Nodos hijo con determinado nombre: “nombre” o “./nombre”– Descendientes con determinado nombre: “.//nombre”

• Nodos del árbol, casi todo:– Elementos, atributos, texto– Espacios de nombres, instrucciones de procesado– Comentarios, documentos externos

• Habitualmente el resultado es plural, habrá múltiples concordancias.

• También da acceso a operadores y funciones:<xsl:value-of select= … >

– En atributos no valen “<…>” y se puede sustituir por {…}

Page 23: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

23/40

XPath (II)XPath (II)□Introducción□CSS□XSLT■XPath□XSL-FO

• Las expresiones XPath producen respuestas varias– Listas de nodos– Valores lógicos: true/false– Números– Cadenas de texto

• OperadoresAritméticos: + - * div modComparación: = != > >= < <=Lógicos: and or

• Comodín*

• Predicados, filtrosnombre[1] nombre[last()] nombre[position() > 1]

• Atributos:@atributo1

• Variables$variable1

Page 24: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

24/40

XPath (III)XPath (III)□Introducción□CSS□XSLT■XPath□XSL-FO

• Las expresiones de ruta XPath tienen la sintaxis:nombreeje::localizaciónnodo[predicado]

• Ejes: relación con el nodo actual– Por árbol: child, parent, self, descendant, ancestor– Por orden: preceding, following– Por orden de hermanos: preceding-sibling, following-sibling– attribute, namespace– Algunos son prescindibles, simplificables: // . .. @ *

• Localización - componentes de ruta: /+ Selectores por tipo de nodo: text() node() comment()+ Selector por identificador: id()

• Predicados: filtros, condiciones– Posiciones: [1] [last()] [position()>1]– Presencia o valor de un atributo: [@a0] [@a0='…']– Cualquier condición lógica: [a>b]

• Podemos combinar varias rutas separadas con |• Ej: descendant::nombre[@baja='sí']

Page 25: LM-UT6: Transformaciones XML

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

Abril de 2011 CIFP Juan de Colonia

La utilidad xmllint nos permite probar expresiones

XPath en modo interactivo

xmllint --shell archivo.xml

Actividad IV: XPath y xmllintActividad IV: XPath y xmllint

Page 26: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

26/40

Funciones XPath / XSLT 1.0Funciones XPath / XSLT 1.0□Introducción□CSS□XSLT■XPath□XSL-FO

– boolean– ceiling– comment– concat– contains– count– current– document– element-available– false– floor– format-number– function-available– generate-id– id– key– lang– last

– local-name– name– namespace-uri– node– normalize-space– not– number– position– processing-instruction– round– starts-with– string– string-length– substring– substring-after– substring-before– sum– system-property

– text– translate– true– unparsed-entity-uri

Page 27: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

27/40

Ejemplos: lectura de atributosEjemplos: lectura de atributos<xsl:strip-space elements="*"/><!-- Evitar espacios --><xsl:template match="text()"/><!-- Anular textos --><xsl:template match="*"><!-- Elementos -->

Elemento <xsl:value-of select="position()"/>:<xsl:value-of select="name()"/><xsl:if test="text()">

Texto: <xsl:value-of select="text()"/></xsl:if><xsl:if test="@*">

Atributos: <xsl:apply-templates select="@*"/></xsl:if><xsl:if test="*">

Hijos: <xsl:apply-templates select="*"/></xsl:if>

</xsl:template><xsl:template match="@*"><!-- Atributos -->

Atributo <xsl:value-of select="position()"/>:<xsl:value-of select="name()"/>Texto: <xsl:value-of select="."/>

</xsl:template>

□Introducción□CSS□XSLT■XPath□XSL-FO

Page 28: LM-UT6: Transformaciones XML

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

Abril de 2011 CIFP Juan de Colonia

Rastrear un documento XHTML y obtener un listado

de hipervínculos con el URI correspondiente.

En un archivo de configuración de máquina virtual de

VirtualBox extraer las direcciones MAC o cualquier

otro valor de configuración

Actividad V: rastreo de atributosActividad V: rastreo de atributos

Page 29: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

29/40

Ejemplos: generando XMLEjemplos: generando XML<xsl:template match="/"> <!-- Raíz -->

<xsl:message>--&gt; Procesando comentariosy contenido...</xsl:message>

<censo><xsl:apply-templates

select="grupo/nombre|//comment()"/></censo>

</xsl:template><xsl:template match="nombre"> <!-- Elementos -->

<habitante id="{@id}" nombre="{.}"><sexo><xsl:value-of select="@sexo"/></sexo>

</habitante></xsl:template><xsl:template match="comment()"> <!-- Comentarios -->

<xsl:copy-of select="."/><xsl:comment>

<xsl:value-of select="."/> (duplicado)</xsl:comment>

</xsl:template>

□Introducción□CSS□XSLT■XPath□XSL-FO

Page 30: LM-UT6: Transformaciones XML

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

Abril de 2011 CIFP Juan de Colonia

Recuperando el modelo utilizado en unidades

anteriores para horarios de grupo, completar el

horario semanal y diseñar exportaciones.

-Obtener listados de profesores y listados de

módulos en formato de texto, CSV y XHTML.

-Obtener un horario general del grupo en HTML 4.01

estricto.

Actividad VI: transformación avanzadaActividad VI: transformación avanzada

Page 31: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

31/40

XSL / XSL-FOXSL / XSL-FO□Introducción□CSS□XSLT□XPath■XSL-FO

XSL Formatting Objects• Escisión del XSL original, para dar formato.

– Recomendación W3C, basado en XML– Funcionalidad comparable a CSS– Designado como XSL a secas

• Espacio de nombres XSL 1.1:xmlns:fo="http://www.w3.org/1999/XSL/Format"

• Prefijo habitual: fo• Elemento raíz: <fo:root … >

– Archivos con extensión fo o fob– Archivos de salida generables con transformaciones XSLT.

• Estructura:– modelo de páginas, con zonas y márgenes– contenido organizado en bloques

• Herramientas– FOP de la Fundación Apache: convierte a PDF y otros

Page 32: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

32/40

XSL / XSL-FO: EstructuraXSL / XSL-FO: Estructuraroot

• layout-master-set– simple-page-master

region…• page-sequence

– flowblock…

Raíz• Disposición

– Páginasregiones…

• Contenido– Flujos

bloques…

BODYSTART END

BEFORE

AFTER

□Introducción□CSS□XSLT□XPath■XSL-FO

Page 33: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

33/40

Ejemplos: XSL-FOEjemplos: XSL-FO<?xml version="1.0" encoding="utf-8"?><fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"><fo:layout-master-set><fo:simple-page-master master-name="A4"

page-width="297mm" page-height="210mm"margin-top="1cm" margin-bottom="1cm"margin-left="1cm" margin-right="1cm">

<fo:region-body margin="3cm"/> <fo:region-before extent="2cm"/> <fo:region-after extent="2cm"/> <fo:region-start extent="2cm"/> <fo:region-end extent="2cm"/></fo:simple-page-master> </fo:layout-master-set><fo:page-sequence master-reference="A4">

<fo:flow flow-name="xsl-region-body"><fo:block>¡Hola mundo!</fo:block>

</fo:flow></fo:page-sequence></fo:root>

Página

Contenido

□Introducción□CSS□XSLT□XPath■XSL-FO

Page 34: LM-UT6: Transformaciones XML

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

Abril de 2011 CIFP Juan de Colonia

FOP es una utilidad de software libre producida por la

Fundación Apache para realizar transformaciones

XSL (XSL-FO). Es una aplicación Java, por tanto

multiplataforma, pero requiere tener instalada una

máquina virtual Java (por ejemplo el JRE de Oracle).

Descomprimirla en el equipo y tratar de obtener el

documento del ejemplo.

Adaptar también algún ejemplo previo de XSLT para

que nos produzca una salida XSL-FO y

transformarla.

Actividad VII: FOPActividad VII: FOP

Page 35: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

35/40

XLinkXLinkXML Linking Language

• Vocabulario para asociar enlaces a cualquier elemento XML.

– Incorpora el atributo href y otros– Enlaces simples como en HTML y complejos o extendidos

• Espacio de nombres XLink 1.1:xmlns:xlink="http://www.w3.org/1999/xlink"

• Atributos con el prefijo habitual: xlink– A definir en el DTD o esquema creado por el autor.– Definidos global, no localmente: siempre se exige el prefijo.– Luego en XHTML: <a href= … no se ajusta a XLink.

<grupo xmlns:xlink="http://www.w3.org/1999/xlink"><nombre xlink:type="simple"

xlink:href="http://www.mio.es/alumnos/" xlink:show="new">

Juan </nombre>

□Introducción□CSS□XSLT□XPath■XSL-FO

Page 36: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

36/40

...y más...y másQuedan bastantes lenguajes que aportan funcionalidades a XML:

• XLL, XLink, XBase, XPointer• XInclude• XQuery

□Introducción□CSS□XSLT□XPath■XSL-FO

Page 37: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

37/40

DocumentaciónDocumentaciónTodo código fuente debe documentarse

+ comprensión → - errores, - tiempo, - coste– En cualquier lenguaje de programación/datos: XML– Siguiendo modelos de la organización, lenguaje o propios

Documentación del código en varios aspectos• Autodocumentación: uso de nombres descriptivos• Autodocumentación: estructura sencillas, legibles• Comentarios internos del código:

– aspectos no evidentes– ¡NUNCA PARA MAQUILLAR CÓDIGO ILEGIBLE!

• Comentarios de módulos:– función, entradas y salidas– comportamiento ante situaciones límite o atípicas

• Documentos externos: diseño, API...– A veces es autogenerado a partir de los anteriores.

□Introducción□CSS□XSLT□XPath□XSL-FO

Page 38: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

ReferenciasReferenciasClark, J. (1999, W3C Recommendation) XSL Transformationshttp://www.w3.org/TR/xslt

W3Schools (WWW) XSLT Tutorialhttp://www.w3schools.com/xsl/

Rossi, F. (2003, APIACOA.org). Transformations XSLThttp://apiacoa.org/publications/teaching/xml/exercices/xslt.pdf

Boulanger, T. y Lecomte, S. (2009, ENI). XML práctico: bases esenciales, conceptos y casos prácticos. ISBN: 978-2-7460-4958-1.

Dankert, E. (2005, edankert...) XML Grammars http://www.edankert.com/transforms/Webucator (2009) XSLT Tutorial.http://www.learn-xslt-tutorial.com/

Nogales, J. T. (2010, Univ. Carlos III de Madrid) Introducción a XSLT http://www.bib.uc3m.es/~nogales/cursos/xslt.html

Merelo, J. J. (GeNeura, Univ. Granada) Generación de páginas Web usando XSLT y XML.http://geneura.ugr.es/~jmerelo/XSLT/

Bibliografía actualizada en delicious:http://www.delicious.com/dhmartin/LM-ASIR

Page 39: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

LicenciaLicencia

Este material está disponible bajo una Licencia Creative Commons,

http://creativecommons.org/licenses/by-nc-sa/3.0/es/

Page 40: LM-UT6: Transformaciones XML

Abril de 2011 CIFP Juan de Colonia

XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.

¿Dudas o cuestiones?¿Dudas o cuestiones?