Tecnologias XML
Extensible Stylesheet
Language
Transformation - XSLT
XSLT

XSL - Extensible Stylesheet Language
 Linguagem para transformação e
formatação de um documento XML
 XSL deu origem a 3 normas:
 XPath que define um modo de navegação
e localização da informação num
documento XML.
 XSL-FO ( Formating Objects) que
especifica a formatação dos documentos.
 XSLT (Transformation) que especifica
transformações sobre um documento XML
XSLT

XSLT – Transformações sobre um
documento XML
D o cu m e n to d e
e n tra d a
X S L T P ro ce sso r
XML
D o cu m e n to d e
sa íd a
XML
PDF
XHTM L
...
XSLT
te m p la te s
X S L T style sh e e t
Referenciar uma folha de estilos XSLT num XML
<?XML VERSION="1.0" ENCODING="ISO-8859-1"?>
<?XML-STYLESHEET TYPE="TEXT/XSL" HREF="CATALOG.XSL"?>
<CATALOG>
<BOOK ID="12">
<TITLE>DISCOVER JAVA</TITLE>
Documento
<AUTHORS>
catalog.xsl
<AUTHOR>ED TITTEL</AUTHOR>
<AUTHOR>BILL BROGDEN</AUTHOR>
</AUTHORS>
<PUBLISHER>IDG BOOKS WORLDWIDE</PUBLISHER>
<ISBN>0-7645-8024-8</ISBN>
<PRICE>24.99</PRICE>
<PUBDATE>1997</PUBDATE>
</BOOK>
<BOOK ID="23">
…
</BOOK>
</CATALOG>
Um processador XSLT trabalha sobre uma representação em
árvore da estrutura hierárquica de um documento XML
Root (/)
<?xml-stylesheet
type="text/xsl" href="temp.xsl"?>
<catalog>
<book>
<book>
...
<title>
<Authors>
Discover Java <author>
<author>
Ed Tittel Bill Brogden
output
<publisher>
<ISBN>
<price>
<pubdate> id=”12"
0-7645-8024-8
IDG Books Worldwide
24.99
1997
Exemplo de uma folha de estilos
<?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="/catalog" >
<books>
<xsl:apply-templates select="book"/>
</books>
</xsl:template>
<xsl:template match="book" >
<title_publisher>
<xsl:value-of select="title" /> ,
<xsl:value-of select="publisher" />
</title_publisher>
</xsl:template>
</xsl:stylesheet>
output
catalog.xml
Root (/)
<catalog>
<book>
<book>
catalog.xsl
XSLT



Uma folha de estilo XSLT consiste numa série de
templates que, conjuntamente com expressões
baseadas em XPath, determinam como o
processador vai aplicá-las aos nós do documento
fonte.
Para cada template, o processador procura no
documento o nó que verifica o padrão definido e
aplica as acções definidas nesse template
Os templates são instanciados para todos os nós
onde é efectuado o match
Análise da folha catalog.xsl

Os documentos XSLT são documentos XML
<?xml version="1.0" encoding="ISO-8859-1"?>

A raíz do documento é o elemento xsl:stylesheet
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

xsl:template inicia um template com um atributo
match que indica os nós a que deve ser aplicado.
Expressão XPath
<xsl:template match="/catalog" >
<books>
<xsl:apply-templates select="book"/>
</books>
</xsl:template>
Análise da folha catalog.xsl

O elemento xsl:apply-templates faz chamada
aos outros templates
<xsl:apply-templates select="book"/>
<xsl:template match="book" >
<title_publisher>
<xsl:value-of select="title" /> ,
<xsl:value-of select="publisher" />
</title_publisher>
</xsl:template>

Todo o texto que não faz parte do espaço de nomes
xsl: fará parte do documento resultado.
<title_publisher> … </title_publisher>

Extracção de
dados do
documento
de entrada
xsl:value-of extrai o texto de um nó
seleccionado: <title> e <publisher>
Navegação na árvore - XPath


O XSLT usa expressões XPath para localizar nós na
árvore do documento de entrada
Expressões XPath são usadas nos atributos select
e match

Semelhante à navegação numa árvore de
directórios

Caminhos absolutos e relativos

Um caminho absoluto começa sempre pelo carácter '/',
caso contrário são caminhos relativos ao nó corrente


absoluto: /catalog/book/title
relativo: authors/author
Navegação na árvore - XPath

Selectores de nós:
/
- representa a raiz ou uma relação pai/filho
.
- representa o nó corrente
..
@
- modo de aceder a atributos @nomedoatributo
*
- representa qualquer nó
//

- representa o nó pai do nó corrente
- todos os nós descendentes de um nó ou no principio de um
caminho todos os descendentes da raiz
Exemplos de selecções de nós
../../title
selecciona o elemento title do pai do pai do nó
corrente
//author
selecciona todos os nós author
independentemente da sua posição na árvore
@*
selecciona todos os atributos no contexto actual.
/catalog/book/@id
seleciona o atributo id do nó book, filho de
catalog debaixo da raiz.
./author
selecciona todos os nós author filhos do nó corrente
Navegação na árvore - XPath

Predicados (filtros)
Os predicados são filtros para refinar a pesquisa
 Os predicados são escritos entre [ ]
 Exemplos:
/book[@id] - selecciona o nó book se tiver um atributo id

/catalog/book[2] - selecciona o segundo nó book

Funções Xpath
number position()
– devolve a posição do nó actual
book[position()=1]
number last()
– devolve o índice do ultimo nó no conjunto de nós.
book[last()]
number count(node-set)
– devolve o número de nós do conjunto de nós argumento
<xsl:value-of select="count(authors/author)" />
Exemplo de transformação XML - HTML
Anotação e
Texto para o
documento
de saida
exemplo
...
<xsl:template match="/catalog" >
<html><head>
<title>XML to HTML</title>
</head>
<body>
<xsl:apply-templates />
</body></html>
</xsl:template>
Elementos xsl
<xsl:template match="book" >
para extrair
<h3><b>Título:
informação
<xsl:value-of select="title”/>
</b></h3>
<h5>Editora:
<xsl:value-of select="publisher" />
</h5>
</xsl:template>
catalogtohtml
Elementos XSLT

xsl:for-each
define um template que vai ser aplicado a todos os nós
seleccionados pela expressão do atributo select.
<xsl:template match="/" >
<html><body><table border="1">
<xsl:for-each select="catalog/book">
<tr><td> <xsl:value-of select="title" /> </td>
<td>
<xsl:for-each select="authors/author">
<br><xsl:value-of select="." /></br>
</xsl:for-each></td>
<td> <xsl:value-of select="publisher" /></td>
<td> <xsl:value-of select="ISBN" /></td>
<td> <xsl:value-of select="price" /></td>
<td> <xsl:value-of select="pubdate" /></td>
</tr>
</xsl:for-each>
</table></body></html>
</xsl:template>
resultado
</xsl:stylesheet>
catalogfor.xsl
Elementos XSLT

xsl:sort



A ordenação é especificada com elementos xsl:sort
como filhos de elementos xsl:apply-templates ou
xsl:for-each
A chave de ordenação é especificada pelo atributo select
Pode ser especificada mais de uma chave de ordenação
usando vários xsl:sort.
<xsl:template match="/" >
<html><body><h3>Lista de autores </h3>
<xsl:for-each
select="catalog/book/authors/author">
<xsl:sort data-type="text" order="ascending" />
<br><xsl:value-of select="." /></br>
</xsl:for-each>
</body></html>
</xsl:template>
resultado
catalogsort.xsl
Elementos XSLT

xsl:if



Instrução condicional
O atributo test define a expressão a avaliar
Não tem else
<xsl:if test=" not(position()=last())" >…
<xsl:if test=“ price &lt; < 20 “ >…
exemplo

catalogif.xsl
xsl:choose (switch)
<xsl:choose>
<xsl:when test = boolean-expression>
…
</xsl:when>
<xsl:otherwise>
…
</xsl:otherwise>
</xsl:choose>
exemplo
catalogchoose.xsl
Elementos XSLT

xsl:element


insere elementos na árvore resultado da transformação
O nome do elemento é definido pelo atributo name
<xsl:template match="/catalog" >
<xsl:element name="books">
<xsl:apply-templates select="book"/>
</xsl:element>
</xsl:template>

xsl:attribute


Insere atributos. O nome do atributo é definido pelo atributo
name.
O valor do atributo é determinado pelo conteúdo do
template
exemplo
catalogelement.xsl
Elementos XSLT

xsl:copy



elemento para criar uma cópia do nó corrente
não copia atributos, nem filhos
xsl:copy-of

copia tudo o que for seleccionado pelo atributo
select
<xsl:template match="book">
<xsl:copy-of select=".">
</xsl:copy-of>
exemplo
catalogcopy.xsl
Templates por omissão

Quando não existe nenhum template são aplicados
templates por omissão.

Template por omissão para nós elemento e raíz:
<xsl:template match="*|/">
<xsl:apply-templates/>
</xsl:template>

Template por omissão para nós texto e atributo:
<xsl:template match="text()|@*">
<xsl:value-of select="."/>
</xsl:template>
exemplo
minimal.xsl
Nova estrutura XML

Criar um novo documento xml com outra estrutura
autores
autor
nome
obra
“isbn”
autor
...
exemplo
novaestrutura.xsl
<xsl:template match="/" >
<autores>
<xsl:apply-templates select="//author" >
<xsl:sort select="." />
</xsl:apply-templates>
</autores>
</xsl:template>
<xsl:template match="author" >
<xsl:element name="autor">
<xsl:element name="nome">
<xsl:value-of select="." />
</xsl:element>
<xsl:element name="obra">
<xsl:attribute name="ISBN" >
<xsl:value-of select="../../ISBN" />
</xsl:attribute>
<xsl:value-of select="../../title" />
</xsl:element>
</xsl:element>
</xsl:template>...
Download

xsl:template