REFERENCIA XSL en 21 puntos

EJEMPLO XML para trabajar con este documento: allelements.xml
MULTIPLES EJEMPLOS de XSL aplicables aquí: http://www.ibiblio.org/xml/books/bible/examples/14/index.html 

  1. Extensible Style Language (XSL) comprende dos aplicaciones de XML para transformar y formatear documentos XML.
     
  2. Una transformación XSL aplica reglas a una estructura de árbol leida en la entrada (un documento XML) para transformarlo en otra estructura de árbol en la salida salida (XML y, para nuestros intereses actuales también HTML entre otros formatos).
     
  3. Una regla de plantilla XSL es un elemento xsl:template con un atributo match. Los Nodos en el árbol de entrada son comparados con los patterns (patrones) de los atributos match de los diferentes elementos "template" (plantilla). Cuando se encuentra un match que coincide con el nodo, los contenidos de la plantilla se representan en la salida.
     
  4. El valor de un nodo es una cadena de texto puro (sin el marcado xml) que contiene los contenidos del nodo. Esto puede ser calculado con el elemento xsl:value-of .
     
  5. Puedes procesar múltiples elementos de dos maneras: con el elemento xsl:apply-templates y con el elemento xsl:for-each .
     
  6. El valor del atributo match del elemento xsl:template es un patrón de búsqueda qué nodos debe transformar la plantilla.
     
  7. Las expresiones XPath (o sencillamente expresiones) son un super set de patrones de búsqueda utilizados por el atributo select de los elementos xsl:apply-templates, xsl:value-of, xsl:for-each, xsl:copy-of, xsl:variable, xsl:param, xsl:with-param and xsl:sort elements.
     

     

    Otro ejemplo de XPath: (devolvería el valor del nombre del propio nodo como texto):

    <xsl:template match="ATOM">
        <P><xsl:value-of select="self::node()"/></P>
    </xsl:template>

    Sintaxis de las Expresiones XPath

    Abreviatura

    Completo

    .

    self::node()

    ..

    parent::node()

    name

    child::name

    @name

    attribute::name

    //

    /descendant-or-self::node()/

    Ejemplo de sintaxis abreviada:

      

  8. Las reglas por defecto aplican las plantillas a los elementos de los nodos y capturan los valores (como texto) de los contenidos de los nodos y sus atributos.
     
  9. Los elementos xsl:element, xsl:attribute, xsl:processing-instruction, xsl:comment, y xsl:text pueden transformar (dar un formato de salida) atributos, processing instructions, comentarios, y textos calculados desde los datos del documento de entrada.
     
  10. El elemento xsl:attribute-set define un grupo común de atributos que pueden ser aplicados a múltiples elementos y en diferentes templates (plantillas) con  xsl:use-attribute-sets.
     
  11. El elemento xsl:copy copia el nodo en el que se encuentra dentro de la representación de salida.
  12. El elemento xsl:number inserta el número específicado por su atributo value usando un formato de numaración específico dado en el atributo format .
     
  13. El elemento xsl:sort puede reordenar los nodos de entrada antes de procesarlos en la salida.

    Forma ampliada:
    <xsl:sort order="descending" data-type="number" select="ATOMIC_NUMBER"/>

    Funciones que operan en los NODOS

    Function

    Devuelve tipo

    position()

    número

    last()

    número

    count(node-set)

    número

    id(string)

    nodo

    key(string name, Object value)

    nodo

    document(string URI, string base)

    nodo

    local-name(node set)

    cadena de texto

    namespace-uri(node set)

    cadena de texto

    name(node set)

    cadena de texto

    generate-id(node set)

    cadena de texto



    Otro ejemplo de position():
    <xsl:template match="ATOMIC_NUMBER[position()=1 and position()=last()]">
        <xsl:value-of select="."/>
    </xsl:template>

    FUNCIONES QUE OPERAN CON NÚMEROS:

    EJEMPLO:

    <xsl:template match="/PERIODIC_TABLE">
        <HTML>
            <BODY>
                <H1>Average Atomic Weight</H1>
                    <xsl:value-of select="sum(descendant::ATOMIC_WEIGHT) 
                    div count(descendant::ATOMIC_WEIGHT)"/>
            </BODY>
        </HTML>
    </xsl:template>

    Ejemplo: style-sheet XSL que cuenta átomos

    <?xml version="1.0"?> 
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
        <xsl:template match="PERIODIC_TABLE">
          <html>
            <head><title>The Elements</title></head>
            <body>
              <table>
                <tr><xsl:apply-templates select="ATOM"/></tr>
              </table>
            </body>
          </html>
        </xsl:template>
        
        <xsl:template match="ATOM">
          <td><xsl:number value="position()"/></td>
          <td><xsl:value-of select="NAME"/></td>  
        </xsl:template>
            
    </xsl:stylesheet>
    

    Functions That Operate on Strings

    Function

    Return Type

    starts-with(main_string, prefix_string)

    Booleano

    contains(containing_string, contained_string)

    Booleano

    substring(string, offset, length)

    cadena de texto

    substring-before(string, marker-string)

    cadena de texto

    substring-after(string, marker-string)

    cadena de texto

    string-length(string)

    Número

    normalize-space(string)

    cadena de texto

    translate(string, replaced_text, replacement_text)

    cadena de texto

    concat(string1, string2, …)

    cadena de texto

    format-number(number, format-string, locale-string)

    cadena de texto

     

  14. Los Modos pueden aplicar diferentes plantillas al mismo elemento en diferentes partes de la hoja de estilo.
     
  15. El elemento xsl:variable define constantes mediante nombres, que pueden hacer tu código más claro y legible.

    SINTAXIS:
    <xsl:variable name="copy99">
      Copyright 1999 Elliotte Rusty Harold
    </xsl:variable>

    ----------

    <BLOCK COPYRIGHT="{$copy99}">
    </BLOCK >

    ----------

    <xsl:value-of select="$copy99"/>
    
  16. Named templates (atributo name del elemnto xsl:template) ayudan a reutilizar el código común entre plantillas y partes de las plantillas.
     
  17. Los espacios en blanco se mantienen por defecto a no ser que se utilice un elemento  xsl:strip-space o el atributo xml:space diga otra cosa.
     
  18. El elemento xsl:if produce una salida si, y sólo si, su atributo test attribute es true (verdadero).

    EJEMPLO:

    <xsl:template match="ATOM">
        <xsl:value-of select="NAME"/>
        <xsl:if test="position()!=last()">, </xsl:if>
    </xsl:template>

     
  19. El elemento xsl:choose representa la plantilla del primero de sus xsl:when children cuyo atributo test es verdadero, o la plantilla de su elemento xsl:otherwise si ninguno de sus elementos xsl:when cumple un atributo true.
     
  20. Los elementos xsl:import y xsl:include mezclan reglas de diferentes hojas de estilo.
     
  21. El elemento xsl:stylesheet permite incluir una hoja de estilo directamente en el documento sobre el que se aplica.
     

Documento de trabajo realizado por Jesús Noriega como apoyo a la formación de XML/XSL
Sobre ejemplos desarrollados por Elliot Rusty Harold