Skip to content
17 de janeiro de 2011 / rafaelti

XSL – eXtensible Stylesheet Language

XSL

O XSL é uma linguagem voltada para estilo, isso é que o CSS faz, no entanto XSL é mais poderoso que CSS, pois permite a transformação do XML, inclusive o XHTML, para outro documento. Com um documento estruturado XML(XHTML), é utilizado uma folha de estilo para fornecer sobre o conteúdo estruturado como deverá ser apresentado, isto é, como a fonte será estilizada por um meio de apresentação, como um navegador Web ou de um dispositivo de mão, ou um conjunto de páginas físicas de um catálogo, relatório, panfleto ou livro. O XSL utiliza 3 linguagens:

  • XSLT – XSL Transformations
  • XPath XML Path Language
  • XSL-FO XSL Formatting Objects

XPath

XPath fornece uma sintaxe e semântica comum para a funcionalidade compartilhada entre XSL Transformations (XSLT) e XPointer. O principal objetivo do XPath é endereçar partes de um documento XML. Ele também oferece recursos básicos para manipulação de strings, números e valores booleanos. XPath usa uma sintaxe compacta não-XML. Um documento XML é como uma árvore de nós, existem diferentes tipos de nós, inclusive nós do elemento, os nós de atributos e nós de texto. Exemplos:

<xsl:template match="/">
<xsl:template match="/contatos/pessoa">

Expressões (XPath)

  • elemento – seleciona um elemento filho do nodo contexto
  • /elemento – seleciona um elemento começando na raiz
  • pai/elemento – seleciona um elemento filho de um nodo pai, filho do nodo contexto
  • //elemento – seleciona um elemento qualquer
  • ancestral//elemento – seleciona um elemento descendente de um nodo ancestral (não importa quantos níveis), filho do nodo contexto

Eixos (XPath)

Indicam a direção da navegação

  • self ou . – indica o nodo contexto
  • parent ou .. – indica o elemento pai do nodo contexto
  • attribute ou @ -indica um atributo de um elemento
  • child – indica o filho de um elemento
  • ancestor – indica o ancestral de um elemento

Funções (XPath)

  • count( … ) – Conta o número de nodos encontrados ex.: <xsl:value-of select=”count(aluno[nota>=60])”/>
  • sum( … ) – Converte um valor para um número ex.: <xsl:value-of select=”sum(livros/livro/qtde)”/>
  • substring( … ) – Retorna parte da string do nodo ex.: <xsl:value-of select=”substring(codigo,1,3)”/>

XSLT

XSLT transforma o vocabulário de formatação XSL, como uma folha de estilo. A transformação na linguagem XSLT é expresso em um documento XML bem-formado. XSLT transforma uma árvore de origem em uma árvore de resultado que é conseguida através de padrões de associação com modelos. Na árvore de resultado, pode ser filtrados, reordenados e estrutura pode ser adicionado, podendo fazer um resultado completamente diferente da estrutura da árvore de origem.

Elementos(XSLT)

  • Espaço de nomes(prefixo xsl)-Identifica os comandos XSL. O que não tiver esse prefixo é copiado diretamente para a saída, sem processamento.
  • <xsl:template match=” … “> – Identifica uma parte do documento XML através de uma expressão XPath.
  • <xsl:for-each select=”contatos/pessoa”> – Encontra todos os elementos pessoa dentro de contatos através de uma expressão XPath
  • <xsl:value-of select=”nome”/> – Copia para a saída o valor do elemento especificado

Múltiplos templates (XSLT)

O elemento xsl:apply-templates determina a hora da execução, o processamento começa pelo template do nodo raiz. O elemento pode ter um novo nodo especificado no atributo select e a qualquer regra que exista para filhos do nodo raiz, é em seguida, chamada.

<xsl:template match="/">...<xsl:apply-templates/></xsl:template>

Exemplos

documento XML bem formado. XSLT.XML está abaixo.

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="XSLT.xsl"?>
<filme>
<título>Titanic</título>
<país>EUA</país>
<ano>1997</ano>
<duração minutos="194" />
<diretor>James Cameron</diretor>
<elenco><ator id="a1" sexo="M">Leonardo DiCaprio</ator>
<ator id="a2" sexo="F">Kate Winslet</ator><ator id="a3" sexo="M">Billy Zane</ator>
</elenco><gêneros><gênero>Ação</gênero><gênero>Romance</gênero>
<gênero>Drama</gênero>
</gêneros>
<sinopse>
<personagem idAtor="a1">Jack Dawson</personagem> é um jovem aventureiro ganha passagem, em mesa de jogo, para a primeira viagem do transatlântico Titanic. No navio, vive um amor proibido com
<personagem idAtor="a2">Rose Bukater</personagem>, noiva do rico e arrogante
<personagem idAtor="a3">Caledon 'Cal' Hockley</personagem>. Mas a viagem ganha contornos trágicos quando o navio se choca com um iceberg.
</sinopse>
</filme>

O estilo XSLT.xsl define como será o resultado. XSLT.xsl está abaixo.

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
   <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <title>Filme-Rafael Rocha</title>
        <meta http-equiv="Content-Type"
          content="text/html; charset=ISO-8859-1" />
   </head>
   <body>
      <h1><b><xsl:value-of select="filme/título" /></b>  </h1>
      <p>País: <xsl:value-of select="filme/país" />- 
         Ano: <xsl:value-of select="filme/ano" />-              
         Duração: <xsl:value-of select="filme/duração/@minutos" /> -
         Diretor: <xsl:value-of select="filme/diretor" />             
      </p>             
      <dl>                
         <dt>Ator </dt>                
           <xsl:for-each select="filme/elenco/ator">                   
             <dd><xsl:value-of select="." />(sexo:<xsl:value-of select="./@sexo" />)</dd>                
           </xsl:for-each>                
         <dt>Gêneros </dt>                
         <xsl:for-each select="filme/gêneros/gênero">                   
           <dd><xsl:value-of select="." /></dd>
         </xsl:for-each>             
      </dl>             
      <xsl:value-of select="filme/sinopse" />      
   </body>       
   </html>     
   </xsl:template> 
</xsl:stylesheet>

O estilo abaixo é um exemplo usando template. XSLT.xsl está abaixo.

<?xml version="1.0" encoding="ISO-8859-1"?>
  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="html" indent="yes" /><xsl:template match="filme">
    <html> 
      <head> 
        <title>Filme-Rafael Rocha</title> 
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
      </head>
      <body>
        <xsl:apply-templates/>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="título">
    <h1>
      <xsl:apply-templates/>
    </h1>
  </xsl:template>
  <xsl:template match="país">
    País: <xsl:apply-templates/>
  </xsl:template>
  <xsl:template match="diretor">
    Diretor: <xsl:apply-templates/>
  </xsl:template>
  <xsl:template match="duração">
    Duração: <xsl:value-of select="@minutos" />
  </xsl:template>
  <xsl:template match="elenco">
    <dl>
      <dt>Ator </dt> <xsl:apply-templates/>
    </dl>
  </xsl:template>
  <xsl:template match="ator">
    <dd><xsl:apply-templates/></dd>
  </xsl:template>
  <xsl:template match="gêneros">
    <dl>
      <dt>Gênero </dt><xsl:apply-templates/>
    </dl>
  </xsl:template>
  <xsl:template match="gênero">
    <dd><xsl:apply-templates/></dd>
  </xsl:template>
  <xsl:template match="sinopse">
    <xsl:apply-templates />
  </xsl:template>
  <xsl:template match="personagem">
    <b><xsl:apply-templates /></b>
  </xsl:template>
</xsl:stylesheet>

Salve tudo na mesma pasta e abra o XML e veja a transformação.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: