Académique Documents
Professionnel Documents
Culture Documents
<xml:transformao/>
Helder da Rocha
www.argonavis.com.br
Esta aula
Introduo a XSLT
fundamentos: principais elementos
passo-a-passo: como transformar
Fundamentos de XPath
linguagem para manipular rvores
XSLT
outros elementos
Fundamentos de XSL-FO
Exerccios
Gerao de HTML, XHTML, XML, XSL-FO, texto, ...
XSLT
XSL Transformations
Linguagem (XML) para criao de documentos que
contm regras de transformao para documentos XML
Documentos escritos em XSLT so chamados de
folhas de estilo e contm
Elementos XSLT: <template>, <if>, <foreach>, ...
Expresses XPath para localizar ns da rvore-fonte
Texto ou XML a ser gerado no documento-resultado
Processador XSLT
fonteToHtml.xslt
Folha de
estilos
fonte.xml
Documento
Fonte
Processador XSLT
Xalan, TrAX, Saxon
Netscape, I. Explorer
Documento
Resultado
Transformao XSL
A transformao XSL pode ocorrer em vrias etapas,
maior suporte)
Transformao XSLT
No servidor
Servidor
XML
CSS
CSS
Cliente
HTML
Pgina
XSL
No cliente
Servidor CSS
CSS
XML
XML
XSL
XSL
Cliente
Pgina
7
Fundamentos de transformao
A transformao XSLT realizada sobre a rvore de um
documento-fonte
Todos os ns do documento so acessveis. Tipos de n
disponveis:
Elemento
Atributo
Texto
Comentrio
Instruo de processamento
Namespace
Raiz
PTGWZ
<origem>
rvore-fonte
Rio de Janeiro
@partida
<destino>
08:15
Itabuna
documento-fonte
(em azul - XPath)
<xsl:template match="aeronave">
<p>A aeronave de prefixo
documento
<xsl:value-of select="@id" /> decolou
resultado
de <xsl:value-of select="origem" /> s
(em preto)
<xsl:value-of select="origem/@partida" />
tendo como destino o aeroporto de
<xsl:value-of select="destino" />.</p>
</xsl:template>
elementos XSLT
(em vermelho, com prefixo xsl)
<template>
Bloco para transformao recursiva
Atributo match: contm expresso XPath para
localizao de padro (no caminho)
N de contexto: dentro do <template>, todas as
expresses XPath so relativas ao n corrente e lista de
ns correntes
Padro para combinao
<xsl:template match="elem/filho">
[[[<xsl:value-of select="." />]]]
</xsl:template>
Caminho relativo
12
<value-of>
Imprime o valor do n indicado pelo seu atributo
"select"
<xsl:template match="contxt">
<xsl:value-of select="elemento" />
</xsl:template>
No exemplo acima, select seleciona qualquer n que
contenha o string contxt/elemento
Use "." para valor de elemento corrente
Use "/" para referir-se a caminhos absolutos
13
<text>
Imprime texto
Preserva espaos, novas-linhas e tabuaes
til para controlar forma de impresso do texto
<xsl:template match="x">
<xsl:text>Quebra linha depois
</xsl:text>
</xsl:template>
<xsl:template match="y">
<xsl:text>No quebra
linha</xsl:text>
</xsl:template>
Atributo disable-output-escaping="yes" evita
substituio de entidades
14
<output>
Para produzir resultados diferentes de XML e definir
<apply-templates>
Faz chamada recursiva a prximo template (se no
<xsl:template match="elemento">
Item 1: <xsl:apply-templates select="filho1"/>
Item 2: <xsl:apply-templates select="filho2"/>
</xsl:template>
<xsl:template match="filho1">
[<xsl:apply-templates />]
</xsl:template>
<xsl:template match="filho2">
(<xsl:apply-templates />)
</xsl:template>
16
Regras nativas
1. Processamento da raiz
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
2. Processamento de todos os elementos
<xsl:template match="*">
<xsl:apply-templates />
</xsl:template>
3. Processamento de texto
<xsl:template match="text()">
<xsl:value-of select="." />
</xsl:template>
17
Namespace
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
</xsl:stylesheet>
18
XPath
Como selecionar um ou mais ns da rvore-fonte?
Caminhos (location paths)
levam at um n ou um conjunto de ns atravs de passos de
19
Expresses XPath
Os tipos de expresso so
operaes sobre ns da rvore-fonte (caminhos)
operaes sobre texto
operaes booleanas
operaes com resultado numrico
Cada tipo de expresso devolve um resultado que
20
Caminhos
Seqncia de passos at um determinado conjunto
de ns (node set)
Exemplo:
/raiz/elemento/filho/neto
../../primo[3]
Dois tipos
absolutos: comeam no n raiz (iniciam com "/")
relativos: comeam no n do contexto (context node)
21
Padres de combinao
So traduzidos em caminhos
Usados para combinao
Exemplo: <xsl:template match="...">
Resolvidos da direita para a esquerda
No podem conter eixos ascendentes
No pode: ../elemento
Pode: //elemento ou /ancestral//elemento
Devem ser a mais simples expresso que localize
22
pessoas
Na rvore ao lado, se o n de
pessoa
pessoa
pessoa
nome
nome
nome
23
instanciar templates:
24
<if>
Bloco condicional
Executa se expresso XPath passada retornar true
<xsl:if test="/raiz/elemento/filho">
<xsl:value-of select "@atrib_do_filho" />
</xsl:if>
<xsl:if test="(5 > 3) and not(9 < 4))">
....
</xsl:if>
<xsl:if test="starts-with(@nome, 'Sra. ')">
...
</xsl:if>
25
<xsl:when test="../carro[@novo='true']">
...
</xsl:when>
<xsl:when test="../casa">
...
</xsl:when>
<xsl:when test="../salario/text() > 10000">
...
</xsl:when>
<xsl:otherwise>
...
</xsl:otherwise>
</xsl:choose>
26
<sort>
Ordenao
Aplica-se a cada n do conjunto de ns do contexto. Use
dentro de <apply-templates>
<xsl:apply-templates>
<xsl:sort select="@codigo" />
<xsl:value-of select="." />
</xsl:apply-templates>
27
<xsl:for-each select="capitulo">
<xsl:value-of select="position()" />
<xsl:text>. </xsl:text>
<xsl:value-of select="titulo" />
</xsl:for-each>
</xsl:template>
28
<for-each> e <sort>
<sort> pode ser usado dentro de <for-each> para
ordenar os elementos
<xsl:template match="indice">
<xsl:for-each select="assunto">
<xsl:sort select="@codigo_dewey" />
<xsl:value-of select="@codigo_dewey" />
<xsl:text>: </xsl:text>
<xsl:value-of select="." />
</xsl:for-each>
</xsl:template>
29
Hello World
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
Este o "<head>"
do XSL-FO
<fo:layout-master-set>
<fo:simple-page-master master-name="p1">
<fo:region-body/>
Ligao entre as
</fo:simple-page-master>
regras de layout e
</fo:layout-master-set>
o contedo afetado
<fo:page-sequence master-name="p1">
<fo:flow flow-name="xsl-region-body">
<fo:block color="blue" font-size="20pt">Hello!</fo:block>
<fo:flow>
</fo:page-sequence>
Este o "<body>"
do XSL-FO
</fo:root>
31
<root>
Raiz do documento XSL-FO
Define o namespace
http://www.w3.org/1999/XSL/Format
Uso tpico
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
...
</fo:root>
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<xsl:apply-templates />
</fo:root>
</xsl:template>
32
Estrutura do documento
O elemento <root> deve conter
Um <layout-master-set> que contm "mestres de
layout"
definem templates reutilizveis para layout de pginas
cada mestre possui um identificador que usado para
Cabealho
Cabealho mnimo
<fo:layout-master-set>
<fo:simple-page-master master-name="p1">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
Regies
H cinco regies
<region-body />
obrigatria
rea de contedo principal da pgina
define um ID implcito (fixo): xsl-region-body, para uso por
Margens e regies
<simple-page-master>
margin-top
<region-after />
margin-bottom
margin-right
<region-body />
<region-end />
<region-start />
margin-left
<region-before />
Margens do <simple-page-master>
limitam a rea de impresso
<region-body> ocupa todo o espao
restante
Outras regies opcionais podem ser
definidas sobre <region-body>
<region-before extent="2cm"/>
<region-end extent="1cm"/>
36
XSLT
Layout geralmente permanece fixo em folha XSLT+FO
<xsl:template match="/">
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="p1">
<fo:region-before extent="2cm"/>
<fo:region-end extent="1cm"/>
<fo:region-after extent="1.9cm"/>
<fo:region-start extent="2.5cm"/>
<fo:region-body margin-left="2.7cm"
margin-right="1.2cm"
margin-bottom="2.1cm"
margin-top="2.2cm" />
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-name="p1">
<xsl:apply-templates />
</fo:page-sequence>
</fo:root>
</xsl:template>
37
Contedo
O contedo do documento pode estar
Em blocos <flow>, que criam nova pgina quando o
texto preenche o espao disponvel na atual
Em blocos <static-content>, que so repetidos em todas
as pginas da seqncia.
Regies
Cada bloco de contedo deve estar associado a uma
regio existente atravs do atributo flow-name:
<fo:static-content flow-name="xsl-region-start"> ...
<fo:flow flow-name="xsl-region-body"> ...
Blocos
Dentro de <flow> ou <static-content>, contedo deve
estar em blocos: <block>, <list-block>, <table>, etc.
38
Blocos de contedo
<fo:page-sequence master-name="p1" font-size="8pt">
<fo:static-content flow-name="xsl-region-after">
<fo:block>
Este bloco de
<fo:leader leader-pattern="rule"
contedo esttico est
leader-length="16cm" />
associado com
region-after
</fo:block>
<fo:block text-align="end">pgina
<fo:page-number/>
</fo:block>
</fo:block>
</fo:block>
</fo:static-content>
Este bloco de
contedo de fluxo est
associado com
region-body
<fo:flow flow-name="xsl-region-body">
<fo:block font-family="serif" font-size="11pt">
Texto que pode atravessar pginas.
</fo:block>
</fo:flow>
</fo:page-sequence>
39
Blocos
Os elementos <flow> e <static-content> devem conter
elementos de bloco
elementos
40
Propriedades
Propriedades de estilo podem ser aplicadas em <flow>,
<table>
<fo:table>
<fo:table-header>
<fo:table-cell>
<fo:block font-family="tahoma, sans"
font-weight="bold">Coluna 1</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block font-family="tahoma, sans"
font-weight="bold">Coluna 2</fo:block>
</fo:table-cell>
</fo:table-header>
<fo:table-body>
<fo:table-row>
<fo:table-cell>
<fo:block font-family="monospace">clula 1.1</fo:block>
</fo:table-cell>
<fo:table-cell>
<fo:block font-family="monospace">clula 1.2</fo:block>
</fo:table-cell>
</fo:table-row>
...
<fo:table-row> ... </fo:table-row>
</fo:table-body>
</fo:table>
42
<list-block>
<fo:list-block>
<fo:list-item>
<fo:list-item-label>
<fo:block font-size="20pt" color="red">
•
</fo:block>
</fo:list-item-label>
<fo:list-item-body start-indent="70pt">
<fo:block>
Item um
</fo:block>
</fo:list-item-body>
</fo:list-item>
<fo:list-item> ... </fo:list-item>
...
</fo:list-block>
43
<external-graphic>
<fo:external-graphic src="moe.gif"/>
</fo:block>
<fo:block>
<fo:external-graphic
src="http://www.x.com/moe.gif"/>
</fo:block>
44
<basic-link>
Vnculo de hipertexto
Vincula uma referncia de ID a um ID
Geralmente, quando o documento gerado via XSLT, o
ID obtido do elemento ao qual se quer vincular ou via
alguma varivel
Exemplo:
<fo:basic-link internal-destination="{@id}"
text-decoration="underline"
color="blue">
<xsl:value-of select="@codigo"/>
</fo:basic-link>
45
<instream-foreign-object>
46
Visualizao
XSL-FO uma linguagem de descrio de pgina
Pginas podem ser geradas por um programa que construa o
47