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 –
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                         Contenidos



                CSS
                XSLT
                XPath




Abril de 2011                                         CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                            Objetivos
■ Introducción            • XML permite estructurar la información.
□ CSS
□ XSLT
                          • Habitualmente pensaremos en algún uso ¿no?
□ XPath                         – Visualizar.
□ XSL-FO                        – Imprimir.

                                – Transferencia entre aplicaciones.

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




Abril de 2011                                                                          CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                         XML y CSS
□ Introducción            • ¿Cómo se ve un archivo XML?
■ CSS                           – No es una prioridad la visualización directa de XML.
□ XSLT
                                – No es competitivo con las posibilidades de HTML/XHTML.
□ XPath
                                – ¿Cómo haríamos una tabla?
□ XSL-FO
                          • Los navegadores web proporcionan una visualización
                            básica:
                 4/40
                                – 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"?>



Abril de 2011                                                                         CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                     Ejemplos CSS
□ Introducción          <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
■ CSS                   <?xml-stylesheet type="text/css" href="nombres.css"?>
□ XSLT                  <grupo>
□ XPath                 <nombre>Pedro</nombre><nombre>Juan</nombre>
□ XSL-FO                <nombre>Luis</nombre><nombre>Adolfo</nombre>
                        <nombre>Francisco</nombre><nombre>José</nombre>
                        <nombre>Martín</nombre><nombre>Petra</nombre>
                 5/40
                        <nombre>María</nombre>
                        </grupo>

                        nombre {display:block;}


                        nombre { display:block;
                           text-align:center;
                           padding:20px; margin: 5px;
                           border:solid thin blue;
                           }
                        grupo { display:table;
                           width:10em;
                           margin: 10px auto;}

Abril de 2011                                                            CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                  Actividad I: CSS
                                         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.


Abril de 2011                                                                              CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                                XSL
□ Introducción          eXtensible Stylesheet Language: XSL
□ CSS
■ XSLT                  Dos sublenguajes
□ XPath
□ XSL-FO                  • XSL Transformations: XSLT
                                –   Lenguaje de programación
                          • XSL - Formatting Objects: XSL-FO
                 7/40
                                –   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
Abril de 2011                                                           CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                                XSLT
□ Introducción          XSL Transformations
□ CSS
■ XSLT                    • Define transformaciones sobre documentos XML
□ XPath                         –   Documento de entrada → documento de salida
□ XSL-FO                            XML → XML, XML → HTML, XML → texto…
                          • Espacio de nombres XSLT 1.0:
                                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                 8/40

                          • 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




Abril de 2011                                                                     CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                Ejemplos XSLT (I): ¡Hola mundo!
□ Introducción           <?xml version="1.0" encoding="UTF-8"?>
□ CSS                    <?xml-stylesheet type="text/xsl" href="nombres.xsl"?>
■ XSLT                   <grupo><nombre>Pedro</nombre> …
□ XPath
□ XSL-FO                 <?xml version="1.0" encoding="utf-8"?>
                         <xsl:stylesheet version="1.0"
                         xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                  9/40   <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


Abril de 2011                                                                  CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



       Ejemplos XSLT (II): plantillas básicas
□ Introducción           <?xml version="1.0" encoding="UTF-8"?>
□ CSS                    <?xml-stylesheet type="text/xsl" href="nombres.xsl"?>
■ XSLT                   <grupo><nombre>Pedro</nombre> …
□ XPath
□ XSL-FO                 <?xml version="1.0" encoding="utf-8"?>
                         <xsl:stylesheet version="1.0"
                         xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
                 10/40   <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
Abril de 2011                                                             CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                Actividad II: procesadores XSLT
                                         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.




Abril de 2011                                                                              CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                                xsltproc
□ Introducción              Utilidad de texto para aplicar transformaciones.
□ CSS
■ XSLT                        • Soporta XSLT 1.0
□ XPath
□ XSL-FO



                    12/40




                $> xsltproc
                Usage: 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

Abril de 2011                                                             CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                      n! ≡ n × (n-1)!
□ Introducción
□ CSS
                         XSLT es un lenguaje declarativo.
■ XSLT                          – Definimos un conjunto de reglas a aplicar.
□ XPath                         – Se aplican a todo el documento: el árbol DOM

□ XSL-FO                        – No hay que especificar la secuencia para aplicarlas.


                         Modelo recursivo:
                 13/40
                           • 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
Abril de 2011                                                                        CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



       Actividad III: transformaciones varias
                                         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...:
                <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"/>


Abril de 2011                                                                               CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                              xsl: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?
Abril de 2011                                                      CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                    n! ≡ n × (n-1) × (n-2) … × 2 × 1
□ Introducción                 Modelo iterativo:
□ CSS
■ XSLT                           • XSLT también incluye elementos iterativos.
□ XPath                              – Programación bajo el paradigma procedimental.
□ XSL-FO                             – Podemos diseñar recorridos por el árbol desde una única

                                       plantilla central.
                                     – Basado en bucles que recorren un conjunto de nodos:
                       16/40
                                       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.



                Paradigma: Teoría cuyo núcleo central se acepta sin cuestionar y que suministra la base
                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.
                y modelo para resolver problemas y avanzar en el conocimiento.
Abril de 2011                                                                                       CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



  Ejemplos: for-each vs. apply-templates
□ Introducción                  <xsl:template match="/">
□ CSS
                                   <xsl:text>¡Hola a todo el mundo!</xsl:text>
■ XSLT
                                   <xsl:apply-templates select="grupo/nombre"/>
□ XPath
                                </xsl:template>
□ XSL-FO                                                        Recursivo
                                <xsl:template match="nombre">
                                   --&gt; <xsl:value-of select="."/>
                                </xsl:template>
                        17/40



                                <xsl:template match="/">
                                   <xsl:text>¡Hola a todo el mundo!</xsl:text>
                                   <xsl:for-each select="grupo/nombre">
            Iterativo                 --&gt; <xsl:value-of select="."/>
                                   </xsl:for-each>
                                </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
Abril de 2011                                                                             CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                         Condiciones y alternativas
□ Introducción             • Elementos para producir salidas condicionadas o
□ CSS                        alternativas
■ XSLT
□ XPath
                                –   Elementos con sesgo «procedimental»
□ XSL-FO


                           • Condiciones simples: if
                 18/40
                                –   Atributo test: expresión XPath, la condición
                     <xsl:if test="text()='Juan'">, amigo</xsl:if>


                           • Condiciones múltiples: choose / when / otherwise
                                –   Varias opciones y, además un valor por defecto
                     <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>

Abril de 2011                                                                        CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                            Variables
□ Introducción            • Valores etiquetados para facilitar su reutilización.
□ CSS                           –   Texto plano o también marcado XML o HTML.
■ XSLT
□ XPath                   • Finalidades
□ XSL-FO                        – Reutilización en diversas partes del código.
                                – Fácil localización para facilitar eventuales cambios.

                                – Mejor legibilidad del código.
                 19/40
                          • NO podemos modificar su valor posteriormente.
                          • Locales a una plantilla o globales compartidas.
                           <xsl:variable name="v0">¡Hola</xsl:variable>
                           <xsl:variable name="v1" select="mundo!"/>
                           …
                           <xsl:value-of select="concat($v0,' ',$v1)">

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

                          • Acceso: operador $
Abril de 2011                                                                             CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                            Paso de parámetros
□ Introducción            • Valores con nombre que transferimos a otra plantilla
□ CSS                           – apply-templates o llamadas directas call-template
■ XSLT
                                – call-template exige plantillas con nombre
□ XPath
□ XSL-FO                  • Declaración doble
                                – En la llamada: with-param
                                – En la plantilla: param
                 20/40
                          • Definición
                                – En la llamada, con with-param
                                – En atributo select o en contenido, igual que las variables

                          • Acceso también con el operador $

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

                           <xsl:template name="plantillaN">
                           <xsl:param name="p0"/> …
Abril de 2011                                                                          CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                   Más XSLT: generando XML
□ Introducción            • <xsl:output type="xml"…
□ CSS
                                – Introduce prologo, instrucciones de procesado, espacios de
■ XSLT
                                   nombres…
□ XPath
                                – Podemos incrustar los elementos a generar entre los
□ XSL-FO
                                   elementos XSLT o generarlos desde el propio XSLT.
                                – Se conserva el emparejamiento de etiquetas para que la

                 21/40
                                   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> …
Abril de 2011                                                                          CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                                XPath (I)
□ Introducción            • Estamos empleando ya expresiones XPath sencillas
□ CSS                       en distintas instrucciones XSLT.
□ XSLT
■ XPath                           <xsl:template match= … >
□ XSL-FO                        – Raíz DOM: “/”

                                – Nodo actual y nodo padre: “.” y “..”

                                – Nodos hijo, todos: “*”

                 22/40          – 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 {…}


Abril de 2011                                                                        CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                            XPath (II)
□ Introducción            • Las expresiones XPath producen respuestas varias
□ CSS                           – Listas de nodos
□ XSLT
                                – Valores lógicos: true/false
■ XPath
                                – Números
□ XSL-FO
                                – Cadenas de texto

                          • Operadores
                 23/40
                                    Aritméticos: + - * div mod
                                    Comparación: = != > >= < <=
                                    Lógicos: and or
                          • Comodín
                                    *
                          • Predicados, filtros
                                    nombre[1] nombre[last()] nombre[position() > 1]
                          • Atributos:
                                    @atributo1
                          • Variables
                                    $variable1
Abril de 2011                                                                         CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                           XPath (III)
□ Introducción            • Las expresiones de ruta XPath tienen la sintaxis:
□ CSS                               nombreeje::localizaciónnodo[predicado]
□ XSLT
■ XPath                   • Ejes: relación con el nodo actual
□ XSL-FO                        – Por árbol: child, parent, self, descendant, ancestor
                                – Por orden: preceding, following

                                – Por orden de hermanos: preceding-sibling, following-sibling
                 24/40
                                – 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í']
Abril de 2011                                                                         CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                 Actividad IV: XPath y xmllint
                                         La utilidad xmllint nos permite probar expresiones
                                          XPath en modo interactivo

                                                 xmllint --shell archivo.xml




Abril de 2011                                                                       CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                  Funciones XPath / XSLT 1.0
□ Introducción           – boolean              – local-name             – text

□ CSS                    – ceiling              – name                   – translate
□ XSLT                   – comment              – namespace-uri          – true
■ XPath                  – concat               – node                   – unparsed-entity-uri
□ XSL-FO
                         – contains             – normalize-space

                         – count                – not

                         – current              – number
                 26/40
                         – document             – position

                         – element-available    – processing-instruction

                         – false                – round

                         – floor                – starts-with

                         – format-number        – string

                         – function-available   – string-length

                         – generate-id          – substring

                         – id                   – substring-after

                         – key                  – substring-before

                         – lang                 – sum

                         – last                 – system-property


Abril de 2011                                                                         CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                 Ejemplos: lectura de atributos
□ Introducción           <xsl:strip-space elements="*"/><!-- Evitar espacios -->
□ CSS                    <xsl:template match="text()"/><!-- Anular textos -->
□ XSLT
■ XPath                  <xsl:template match="*"><!-- Elementos -->
□ XSL-FO                    Elemento <xsl:value-of select="position()"/>:
                            <xsl:value-of select="name()"/>
                            <xsl:if test="text()">
                 27/40
                                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>
Abril de 2011                                                               CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                Actividad V: rastreo de atributos
                                         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




Abril de 2011                                                                            CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                     Ejemplos: generando XML
□ Introducción
□ CSS                    <xsl:template match="/"> <!-- Raíz -->
□ XSLT                      <xsl:message>--&gt; Procesando comentarios
■ XPath                         y contenido...</xsl:message>
□ XSL-FO                    <censo>
                                <xsl:apply-templates
                                   select="grupo/nombre|//comment()"/>
                            </censo>
                 29/40
                         </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>

Abril de 2011                                                             CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



   Actividad VI: transformación avanzada
                                         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.




Abril de 2011                                                                           CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                      XSL / XSL-FO
□ Introducción           XSL Formatting Objects
□ CSS
□ XSLT                     • Escisión del XSL original, para dar formato.
□ XPath                         – Recomendación W3C, basado en XML
■ XSL-FO                        – Funcionalidad comparable a CSS

                                – Designado como XSL a secas


                 31/40
                           • 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
Abril de 2011                                                                       CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                         XSL / XSL-FO: Estructura
□ Introducción           root                                 Raíz
□ CSS
□ XSLT                      • layout-master-set                   • Disposición
□ XPath                          –   simple-page-master              –   Páginas
■ XSL-FO                             region…                             regiones…
                            • page-sequence                       • Contenido
                 32/40
                                 –   flow                            –   Flujos
                                     block…                              bloques…


                                                      BEFORE




                         START                        BODY                           END




                                                          AFTER
Abril de 2011                                                                        CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                Ejemplos: XSL-FO
□ Introducción              <?xml version="1.0" encoding="utf-8"?>
□ CSS                       <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
□ XSLT
□ XPath                     <fo:layout-master-set>
■ XSL-FO                    <fo:simple-page-master master-name="A4"
                               page-width="297mm" page-height="210mm"
                               margin-top="1cm" margin-bottom="1cm"
                    33/40
                               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"/>
          Página
                            </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>
        Contenido              </fo:flow>
                            </fo:page-sequence>
                            </fo:root>
Abril de 2011                                                                CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                               Actividad VII: FOP
                                         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.




Abril de 2011                                                                          CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                                XLink
□ Introducción           XML Linking Language
□ CSS
□ XSLT                     • Vocabulario para          asociar     enlaces      a    cualquier
□ XPath                      elemento XML.
■ XSL-FO                        – Incorpora el atributo href y otros
                                – Enlaces simples como en HTML y complejos o extendidos


                 35/40
                           • 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>
Abril de 2011                                                                          CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                                ...y más
□ Introducción           Quedan bastantes lenguajes        que   aportan
□ CSS
□ XSLT                   funcionalidades a XML:
□ XPath                   • XLL, XLink, XBase, XPointer
■ XSL-FO
                          • XInclude
                          • XQuery
                 36/40




Abril de 2011                                                     CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                    Documentación
□ Introducción           Todo código fuente debe documentarse
□ CSS
□ XSLT                       + comprensión → - errores, - tiempo, - coste
□ XPath                         – En cualquier lenguaje de programación/datos: XML
□ XSL-FO                        – Siguiendo modelos de la organización, lenguaje o propios


                         Documentación del código en varios aspectos
                 37/40
                           • 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.

Abril de 2011                                                                             CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                        Referencias
                Clark, J. (1999, W3C Recommendation) XSL Transformations
                http://www.w3.org/TR/xslt
                W3Schools (WWW) XSLT Tutorial
                http://www.w3schools.com/xsl/
                Rossi, F. (2003, APIACOA.org). Transformations XSLT
                http://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
Abril de 2011                                                                           CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                                                Licencia




                Este material está disponible bajo una Licencia Creative Commons,
                           http://creativecommons.org/licenses/by-nc-sa/3.0/es/




Abril de 2011                                                                     CIFP Juan de Colonia
XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO.



                         ¿Dudas o cuestiones?




Abril de 2011                                   CIFP Juan de Colonia

Más contenido relacionado

PDF
Tutor javawebparte2
PPT
Introducción a XML: Sintaxis y documentos bien formados
PPT
open office calc
PPT
Espacios de nombres en XML
PPT
Introducción a XML Schema
PPTX
Usuario, Grupos, UO De Active Directory
PPTX
Usuarios , grupos y unidades organizativas de active
PDF
LM-UT7: Almacenamiento XML
Tutor javawebparte2
Introducción a XML: Sintaxis y documentos bien formados
open office calc
Espacios de nombres en XML
Introducción a XML Schema
Usuario, Grupos, UO De Active Directory
Usuarios , grupos y unidades organizativas de active
LM-UT7: Almacenamiento XML

Similar a LM-UT6: Transformaciones XML (20)

PDF
LM-UT5: DTD, XML Schema
PDF
LM-UT1: Lenguajes de marcas
PDF
Dhtml manual 2 desconocido
PDF
PPT
XML y RDF en Web Semántica
PPT
XML Y RDF En Web SemáNtica
PDF
U7 1 xslt-curso2018-19
PDF
U7 1 xslt-curso2017-18
PDF
Visualizacion
PPTX
Universidad de La Habana - SharePoint, Listas y XSLT
PDF
Datos En La Web - Clase 2
PPTX
Xml presentacin
PPTX
FORMATO XML
PDF
PDF
PDF
Bases de datos NoSQL - Huancayo - 2010
PPT
PDF
LM-UT3: CSS
LM-UT5: DTD, XML Schema
LM-UT1: Lenguajes de marcas
Dhtml manual 2 desconocido
XML y RDF en Web Semántica
XML Y RDF En Web SemáNtica
U7 1 xslt-curso2018-19
U7 1 xslt-curso2017-18
Visualizacion
Universidad de La Habana - SharePoint, Listas y XSLT
Datos En La Web - Clase 2
Xml presentacin
FORMATO XML
Bases de datos NoSQL - Huancayo - 2010
LM-UT3: CSS
Publicidad

Más de David Martin (15)

PDF
PLE UT10
PDF
Taller: «Gráficos en el Aula»
PDF
IW-UTXX: Programación web en PHP con bases de datos
PDF
LM-UT8: Sistemas de Gestión empresarial
PDF
LM-UT2: HTML
PDF
LM-UT4: Sindicación de contenidos
ODP
Inkscape
PDF
La Aldea Global
PDF
Plataformas web
PDF
Ple Ut8
PDF
Burgo Red
PDF
Ethnet
PDF
Ociburgo
PDF
Fundicar
PDF
Eth100
PLE UT10
Taller: «Gráficos en el Aula»
IW-UTXX: Programación web en PHP con bases de datos
LM-UT8: Sistemas de Gestión empresarial
LM-UT2: HTML
LM-UT4: Sindicación de contenidos
Inkscape
La Aldea Global
Plataformas web
Ple Ut8
Burgo Red
Ethnet
Ociburgo
Fundicar
Eth100
Publicidad

Último (20)

PPTX
preeclampsia + eclampsia, sindrome de HeLLP
PPTX
MÓDULO DE SEGURIDAD CIUDADANA en el ecuador
PDF
El Genero y Nuestros Cerebros - Gina Ripon Ccesa007.pdf
PDF
Teología de la misión Ramiro Pellitero.pdf
PDF
Manual-de-Cargos-y-Funciones-V-02-11-2025
DOCX
Programa Analítico- Lenguajes-Ingles 3º (1).docx
PDF
Estadística Aplicada a la Psicología y Ciencias de la Salud Ccesa.pdf
PDF
Aprendizaje Emocionante - Begoña Ibarrola SM2 Ccesa007.pdf
PDF
KOF-2022-espanol-mar-27-11-36 coke.pdf tv
PDF
Retirate Joven y Rico - Robert Kiyosaki Ccesa007.pdf
PPTX
Programa analitico 2024-2025 Jardín de niños Ramón Gonzáles Villarreal. T.M. ...
PDF
1er Grado - Dosificación Anual con Contenidos y PDA (2025-2026) (1).pdf
PDF
ESTRATEGIAS_PARA_CONSTRUIR_LA_CONVIVENCI.pdf
PDF
Lo que hacen los Mejores Profesores de la Universidad - Ken Bain Ccesa007.pdf
PDF
KOF-2022-espanol-mar-27-11-36 coke.pdf jsja
PDF
EXODO …La Vida Cristiana. Por Jonathan Bravo
PDF
COLECCIÓN DE PENSADORES FILOSÓFICOS MÁS REPRESENTATIVOS.
PDF
50000 mil words en inglés más usados.pdf
PDF
Acompanamiento-de-familias-en-la-construccion-de-proyectos-de-vida.pdf
PDF
Jodorowsky, Alejandro - Manual de Psicomagia.pdf
preeclampsia + eclampsia, sindrome de HeLLP
MÓDULO DE SEGURIDAD CIUDADANA en el ecuador
El Genero y Nuestros Cerebros - Gina Ripon Ccesa007.pdf
Teología de la misión Ramiro Pellitero.pdf
Manual-de-Cargos-y-Funciones-V-02-11-2025
Programa Analítico- Lenguajes-Ingles 3º (1).docx
Estadística Aplicada a la Psicología y Ciencias de la Salud Ccesa.pdf
Aprendizaje Emocionante - Begoña Ibarrola SM2 Ccesa007.pdf
KOF-2022-espanol-mar-27-11-36 coke.pdf tv
Retirate Joven y Rico - Robert Kiyosaki Ccesa007.pdf
Programa analitico 2024-2025 Jardín de niños Ramón Gonzáles Villarreal. T.M. ...
1er Grado - Dosificación Anual con Contenidos y PDA (2025-2026) (1).pdf
ESTRATEGIAS_PARA_CONSTRUIR_LA_CONVIVENCI.pdf
Lo que hacen los Mejores Profesores de la Universidad - Ken Bain Ccesa007.pdf
KOF-2022-espanol-mar-27-11-36 coke.pdf jsja
EXODO …La Vida Cristiana. Por Jonathan Bravo
COLECCIÓN DE PENSADORES FILOSÓFICOS MÁS REPRESENTATIVOS.
50000 mil words en inglés más usados.pdf
Acompanamiento-de-familias-en-la-construccion-de-proyectos-de-vida.pdf
Jodorowsky, Alejandro - Manual de Psicomagia.pdf

LM-UT6: Transformaciones XML

  • 1. 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 –
  • 2. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Contenidos CSS XSLT XPath Abril de 2011 CIFP Juan de Colonia
  • 3. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Objetivos ■ Introducción • XML permite estructurar la información. □ CSS □ XSLT • Habitualmente pensaremos en algún uso ¿no? □ XPath – Visualizar. □ XSL-FO – Imprimir. – Transferencia entre aplicaciones. • ¿Cómo? Opciones: 3/40 – Programar aplicaciones particulares para cada uso. – Formatos/lenguajes complementarios para XML. Abril de 2011 CIFP Juan de Colonia
  • 4. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. XML y CSS □ Introducción • ¿Cómo se ve un archivo XML? ■ CSS – No es una prioridad la visualización directa de XML. □ XSLT – No es competitivo con las posibilidades de HTML/XHTML. □ XPath – ¿Cómo haríamos una tabla? □ XSL-FO • Los navegadores web proporcionan una visualización básica: 4/40 – 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"?> Abril de 2011 CIFP Juan de Colonia
  • 5. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Ejemplos CSS □ Introducción <?xml version="1.0" encoding="UTF-8" standalone="yes"?> ■ CSS <?xml-stylesheet type="text/css" href="nombres.css"?> □ XSLT <grupo> □ XPath <nombre>Pedro</nombre><nombre>Juan</nombre> □ XSL-FO <nombre>Luis</nombre><nombre>Adolfo</nombre> <nombre>Francisco</nombre><nombre>José</nombre> <nombre>Martín</nombre><nombre>Petra</nombre> 5/40 <nombre>María</nombre> </grupo> nombre {display:block;} nombre { display:block; text-align:center; padding:20px; margin: 5px; border:solid thin blue; } grupo { display:table; width:10em; margin: 10px auto;} Abril de 2011 CIFP Juan de Colonia
  • 6. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Actividad I: CSS 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. Abril de 2011 CIFP Juan de Colonia
  • 7. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. XSL □ Introducción eXtensible Stylesheet Language: XSL □ CSS ■ XSLT Dos sublenguajes □ XPath □ XSL-FO • XSL Transformations: XSLT – Lenguaje de programación • XSL - Formatting Objects: XSL-FO 7/40 – 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 Abril de 2011 CIFP Juan de Colonia
  • 8. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. XSLT □ Introducción XSL Transformations □ CSS ■ XSLT • Define transformaciones sobre documentos XML □ XPath – Documento de entrada → documento de salida □ XSL-FO XML → XML, XML → HTML, XML → texto… • Espacio de nombres XSLT 1.0: xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 8/40 • 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 Abril de 2011 CIFP Juan de Colonia
  • 9. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Ejemplos XSLT (I): ¡Hola mundo! □ Introducción <?xml version="1.0" encoding="UTF-8"?> □ CSS <?xml-stylesheet type="text/xsl" href="nombres.xsl"?> ■ XSLT <grupo><nombre>Pedro</nombre> … □ XPath □ XSL-FO <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 9/40 <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 Abril de 2011 CIFP Juan de Colonia
  • 10. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Ejemplos XSLT (II): plantillas básicas □ Introducción <?xml version="1.0" encoding="UTF-8"?> □ CSS <?xml-stylesheet type="text/xsl" href="nombres.xsl"?> ■ XSLT <grupo><nombre>Pedro</nombre> … □ XPath □ XSL-FO <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 10/40 <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 Abril de 2011 CIFP Juan de Colonia
  • 11. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Actividad II: procesadores XSLT 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. Abril de 2011 CIFP Juan de Colonia
  • 12. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. xsltproc □ Introducción Utilidad de texto para aplicar transformaciones. □ CSS ■ XSLT • Soporta XSLT 1.0 □ XPath □ XSL-FO 12/40 $> xsltproc Usage: 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 Abril de 2011 CIFP Juan de Colonia
  • 13. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. n! ≡ n × (n-1)! □ Introducción □ CSS XSLT es un lenguaje declarativo. ■ XSLT – Definimos un conjunto de reglas a aplicar. □ XPath – Se aplican a todo el documento: el árbol DOM □ XSL-FO – No hay que especificar la secuencia para aplicarlas. Modelo recursivo: 13/40 • 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 Abril de 2011 CIFP Juan de Colonia
  • 14. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Actividad III: transformaciones varias 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...: <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"/> Abril de 2011 CIFP Juan de Colonia
  • 15. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. xsl: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? Abril de 2011 CIFP Juan de Colonia
  • 16. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. n! ≡ n × (n-1) × (n-2) … × 2 × 1 □ Introducción Modelo iterativo: □ CSS ■ XSLT • XSLT también incluye elementos iterativos. □ XPath – Programación bajo el paradigma procedimental. □ XSL-FO – Podemos diseñar recorridos por el árbol desde una única plantilla central. – Basado en bucles que recorren un conjunto de nodos: 16/40 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. Paradigma: Teoría cuyo núcleo central se acepta sin cuestionar y que suministra la base 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. y modelo para resolver problemas y avanzar en el conocimiento. Abril de 2011 CIFP Juan de Colonia
  • 17. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Ejemplos: for-each vs. apply-templates □ Introducción <xsl:template match="/"> □ CSS <xsl:text>¡Hola a todo el mundo!</xsl:text> ■ XSLT <xsl:apply-templates select="grupo/nombre"/> □ XPath </xsl:template> □ XSL-FO Recursivo <xsl:template match="nombre"> --&gt; <xsl:value-of select="."/> </xsl:template> 17/40 <xsl:template match="/"> <xsl:text>¡Hola a todo el mundo!</xsl:text> <xsl:for-each select="grupo/nombre"> Iterativo --&gt; <xsl:value-of select="."/> </xsl:for-each> </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 Abril de 2011 CIFP Juan de Colonia
  • 18. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Condiciones y alternativas □ Introducción • Elementos para producir salidas condicionadas o □ CSS alternativas ■ XSLT □ XPath – Elementos con sesgo «procedimental» □ XSL-FO • Condiciones simples: if 18/40 – Atributo test: expresión XPath, la condición <xsl:if test="text()='Juan'">, amigo</xsl:if> • Condiciones múltiples: choose / when / otherwise – Varias opciones y, además un valor por defecto <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> Abril de 2011 CIFP Juan de Colonia
  • 19. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Variables □ Introducción • Valores etiquetados para facilitar su reutilización. □ CSS – Texto plano o también marcado XML o HTML. ■ XSLT □ XPath • Finalidades □ XSL-FO – Reutilización en diversas partes del código. – Fácil localización para facilitar eventuales cambios. – Mejor legibilidad del código. 19/40 • NO podemos modificar su valor posteriormente. • Locales a una plantilla o globales compartidas. <xsl:variable name="v0">¡Hola</xsl:variable> <xsl:variable name="v1" select="mundo!"/> … <xsl:value-of select="concat($v0,' ',$v1)"> • Definición: 2 alternativas – Atributo select: recomendable para XPATH o texto corto. – Contenido del elemento: texto largo o con marcado. • Acceso: operador $ Abril de 2011 CIFP Juan de Colonia
  • 20. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Paso de parámetros □ Introducción • Valores con nombre que transferimos a otra plantilla □ CSS – apply-templates o llamadas directas call-template ■ XSLT – call-template exige plantillas con nombre □ XPath □ XSL-FO • Declaración doble – En la llamada: with-param – En la plantilla: param 20/40 • Definición – En la llamada, con with-param – En atributo select o en contenido, igual que las variables • Acceso también con el operador $ <xsl:call-template name="plantillaN"> <xsl:with-param name="p0" select="¡Hola!"/> </xsl:call-template> … <xsl:template name="plantillaN"> <xsl:param name="p0"/> … Abril de 2011 CIFP Juan de Colonia
  • 21. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Más XSLT: generando XML □ Introducción • <xsl:output type="xml"… □ CSS – Introduce prologo, instrucciones de procesado, espacios de ■ XSLT nombres… □ XPath – Podemos incrustar los elementos a generar entre los □ XSL-FO elementos XSLT o generarlos desde el propio XSLT. – Se conserva el emparejamiento de etiquetas para que la 21/40 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> … Abril de 2011 CIFP Juan de Colonia
  • 22. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. XPath (I) □ Introducción • Estamos empleando ya expresiones XPath sencillas □ CSS en distintas instrucciones XSLT. □ XSLT ■ XPath <xsl:template match= … > □ XSL-FO – Raíz DOM: “/” – Nodo actual y nodo padre: “.” y “..” – Nodos hijo, todos: “*” 22/40 – 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 {…} Abril de 2011 CIFP Juan de Colonia
  • 23. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. XPath (II) □ Introducción • Las expresiones XPath producen respuestas varias □ CSS – Listas de nodos □ XSLT – Valores lógicos: true/false ■ XPath – Números □ XSL-FO – Cadenas de texto • Operadores 23/40 Aritméticos: + - * div mod Comparación: = != > >= < <= Lógicos: and or • Comodín * • Predicados, filtros nombre[1] nombre[last()] nombre[position() > 1] • Atributos: @atributo1 • Variables $variable1 Abril de 2011 CIFP Juan de Colonia
  • 24. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. XPath (III) □ Introducción • Las expresiones de ruta XPath tienen la sintaxis: □ CSS nombreeje::localizaciónnodo[predicado] □ XSLT ■ XPath • Ejes: relación con el nodo actual □ XSL-FO – Por árbol: child, parent, self, descendant, ancestor – Por orden: preceding, following – Por orden de hermanos: preceding-sibling, following-sibling 24/40 – 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í'] Abril de 2011 CIFP Juan de Colonia
  • 25. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Actividad IV: XPath y xmllint La utilidad xmllint nos permite probar expresiones XPath en modo interactivo xmllint --shell archivo.xml Abril de 2011 CIFP Juan de Colonia
  • 26. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Funciones XPath / XSLT 1.0 □ Introducción – boolean – local-name – text □ CSS – ceiling – name – translate □ XSLT – comment – namespace-uri – true ■ XPath – concat – node – unparsed-entity-uri □ XSL-FO – contains – normalize-space – count – not – current – number 26/40 – document – position – element-available – processing-instruction – false – round – floor – starts-with – format-number – string – function-available – string-length – generate-id – substring – id – substring-after – key – substring-before – lang – sum – last – system-property Abril de 2011 CIFP Juan de Colonia
  • 27. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Ejemplos: lectura de atributos □ Introducción <xsl:strip-space elements="*"/><!-- Evitar espacios --> □ CSS <xsl:template match="text()"/><!-- Anular textos --> □ XSLT ■ XPath <xsl:template match="*"><!-- Elementos --> □ XSL-FO Elemento <xsl:value-of select="position()"/>: <xsl:value-of select="name()"/> <xsl:if test="text()"> 27/40 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> Abril de 2011 CIFP Juan de Colonia
  • 28. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Actividad V: rastreo de atributos 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 Abril de 2011 CIFP Juan de Colonia
  • 29. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Ejemplos: generando XML □ Introducción □ CSS <xsl:template match="/"> <!-- Raíz --> □ XSLT <xsl:message>--&gt; Procesando comentarios ■ XPath y contenido...</xsl:message> □ XSL-FO <censo> <xsl:apply-templates select="grupo/nombre|//comment()"/> </censo> 29/40 </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> Abril de 2011 CIFP Juan de Colonia
  • 30. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Actividad VI: transformación avanzada 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. Abril de 2011 CIFP Juan de Colonia
  • 31. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. XSL / XSL-FO □ Introducción XSL Formatting Objects □ CSS □ XSLT • Escisión del XSL original, para dar formato. □ XPath – Recomendación W3C, basado en XML ■ XSL-FO – Funcionalidad comparable a CSS – Designado como XSL a secas 31/40 • 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 Abril de 2011 CIFP Juan de Colonia
  • 32. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. XSL / XSL-FO: Estructura □ Introducción root Raíz □ CSS □ XSLT • layout-master-set • Disposición □ XPath – simple-page-master – Páginas ■ XSL-FO region… regiones… • page-sequence • Contenido 32/40 – flow – Flujos block… bloques… BEFORE START BODY END AFTER Abril de 2011 CIFP Juan de Colonia
  • 33. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Ejemplos: XSL-FO □ Introducción <?xml version="1.0" encoding="utf-8"?> □ CSS <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> □ XSLT □ XPath <fo:layout-master-set> ■ XSL-FO <fo:simple-page-master master-name="A4" page-width="297mm" page-height="210mm" margin-top="1cm" margin-bottom="1cm" 33/40 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"/> Página </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> Contenido </fo:flow> </fo:page-sequence> </fo:root> Abril de 2011 CIFP Juan de Colonia
  • 34. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Actividad VII: FOP 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. Abril de 2011 CIFP Juan de Colonia
  • 35. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. XLink □ Introducción XML Linking Language □ CSS □ XSLT • Vocabulario para asociar enlaces a cualquier □ XPath elemento XML. ■ XSL-FO – Incorpora el atributo href y otros – Enlaces simples como en HTML y complejos o extendidos 35/40 • 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> Abril de 2011 CIFP Juan de Colonia
  • 36. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. ...y más □ Introducción Quedan bastantes lenguajes que aportan □ CSS □ XSLT funcionalidades a XML: □ XPath • XLL, XLink, XBase, XPointer ■ XSL-FO • XInclude • XQuery 36/40 Abril de 2011 CIFP Juan de Colonia
  • 37. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Documentación □ Introducción Todo código fuente debe documentarse □ CSS □ XSLT + comprensión → - errores, - tiempo, - coste □ XPath – En cualquier lenguaje de programación/datos: XML □ XSL-FO – Siguiendo modelos de la organización, lenguaje o propios Documentación del código en varios aspectos 37/40 • 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. Abril de 2011 CIFP Juan de Colonia
  • 38. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Referencias Clark, J. (1999, W3C Recommendation) XSL Transformations http://www.w3.org/TR/xslt W3Schools (WWW) XSLT Tutorial http://www.w3schools.com/xsl/ Rossi, F. (2003, APIACOA.org). Transformations XSLT http://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 Abril de 2011 CIFP Juan de Colonia
  • 39. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. Licencia Este material está disponible bajo una Licencia Creative Commons, http://creativecommons.org/licenses/by-nc-sa/3.0/es/ Abril de 2011 CIFP Juan de Colonia
  • 40. XML (II): TRANSFORMACIONES Y HOJAS DE ESTILO. ¿Dudas o cuestiones? Abril de 2011 CIFP Juan de Colonia