Aplicando Transformações
em XML usando XSLT e
XSL-FO
Ms Vivian Genaro Motti
Profª Drª Maria da Graça Pimentel
Prof Dr Rudinei Goularte
Ilhéus, maio de 2009.
ERBASE
 Parte I: XML, conceitos e definições
 Parte II: XSD, XSL, X-PATH
 Parte III: CSS, XSL-T, XSL-FO
 Parte IV: XSL-FO (Formatting
Objects)
Sumário
 CSS
 XSLT
 XSL-FO
 Introdução
 Definição
CSS
Cascading
Stylesheets
CSS
 São folhas de estilo
 HTML: define a estrutura e o conteúdo
de um documento web
 CSS: define o layout e o estilo de
apresentação
 Recomendação da W3C
 Suportada por navegadores
Exemplo
p
{
text-align:center;
color:black;
font-family:arial
}
 Define os atributos
 Para parágrafos
XSLT
Extensible
Stylesheet
Language
For
Transformations
XSLT
 XSL foi desenvolvida pela W3C
 Para criação de uma linguagem para
folhas de estilo baseadas em XML
 Folhas de Estilo XSL
 Consistem em um conjunto de regras
chamado template
 XSLT
 São as transformações do XSL
XSLT
 Transforma documentos XML em
 HTML
 Ou XHTML
 XPATH
 É usado na XSLT para navegar pelos
elementos e atributos
 XSLT é uma recomendação da W3C
XHTML
 São documentos que ampliam o
HTML4
 São baseados em XML
 Podem ser lidos, editados, visualizados
e validados por ferramentas para XML
 Podem usar aplicações baseadas em
HTML ou DOM
Aplicações da XSLT
 Elementos e atributos de um
documento original podem ser
 Removidos
 Adicionados
 Rearranjados
 Ordenados
 Testados
 XSLT transforma uma árvore-fonte
XML em uma árvore resultante
Suporte por Navegadores
 XML, XPATH e XSLT são suportadas
por
 Internet Explorer 6
 Mozilla Firefox 3
 Google Chrome 1
 Opera 9
Estrutura de um documento
 Elemento raiz que declara um XSL
 Folha de estilo XSL
 <xsl:stylesheet> ou <xsl:transform>
<?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>
<body>
<h2>Meus contatos telefônicos</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Nome</th>
<th align="left">Telefone</th>
</tr>
<xsl:for-each select="agendas/agenda">
<tr>
<td><xsl:value-of select="endereco"/></td>
<td><xsl:value-of select="email"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Estrutura em detalhes
 Template
 Elemento que serve para defini-lo
 Match
 Atributo que associa o template a um
elemento
 Seu valor é uma expressão XPATH
Passo-a-passo
 1: declaração XML (com versão e
codificação)
 2: definir que é uma folha de estilos XSLT
<xsl:stylesheet> (com a versão e o
namespace)
 3: elemento template <xsl:template>
 atributo match="/" associa o template ao
elemento raiz
 4: código HTML interno ao elemento
template
Referência
 Para utilizar o template deve-se
adicionar ao documento XML a
referência à folha de estilos
 Ex:
<?xml-stylesheet type="text/xsl"
href="agendas.xsl"?>
 Templates têm as regras para aplicar
em nós específicos
Elemento value-of
 Usado para extrair o valor de um
elemento XML e adicioná-lo à
transformação de saída
<td><xsl:value-of select="agenda/nome"/></td>
 O valor do atributo select é uma
expressão XPATH
 Como em um sistema de navegação por
arquivos
Elemento xsl:for-each
 Retorna um conjunto de elementos
<xsl:for-each select="agendas/agenda">
<tr>
<td><xsl:value-of select="nome"/></td>
<td><xsl:value-of select="telefone"/></td>
</tr>
</xsl:for-each>
 Esse exemplo resulta em uma tabela com
todos os elementos
Filtrando elementos
 Expressões XPATH podem ser usadas
para seleção de elementos específicos
<xsl:for-each
select=”agendas/agenda[nome='Maria']”>
 Retorna elementos com nome Maria
 Operadores
• = igual
• != diferente
• &lt; menor que
• &gt; maior que
Ordenando elementos
 O elemento <xsl:sort>, usado após
o <xsl:for-each> ordena os
elementos
 Pode-se especificar qual elemento deve
ser usado na ordenação
 Ex: por nome
<xsl:sort select=”nome”>
Testando elementos
 Para incluir uma condição deve-se
usar após o <xsl:for-each> o <xsl:if>
<xsl:for-each select="agendas/agenda">
<xsl:if test="nome != 'Maria'">
<tr>
…
</tr>
</xsl:if>
</xsl:for-each>
Condições Múltiplas
 Choose, when e otherwise
<xsl:choose>
<xsl:when test="nome != Maria">
<td><xsl:value-of select="nome"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="nome"/></td>
</xsl:otherwise>
</xsl:choose>
XSLT
 Transformam documentos em
diferentes formatos
 JavaScript pode ser usado para adequar
as formatações aos navegadores
XSL-FO
Extensible
Stylesheet
Language –
Formatting Objects
 A especificação da Extensible
Stylesheet Language (XSL) se divide
em
 XSLT, uma linguagem para transformar
XML, e
 XSL Formatting Objects (XSL-FO), um
vocabulário XML para especificar a
semântica da formatação
 XPATH
Definição
 XSL-FO é um conjunto de ferramentas
para descrever a apresentação do XML
 Para produção de material impresso em
alta qualidade descrevendo a formatação e
layout de conteúdos gerados por
computador
Definição
XSL-FO Formatting Objects
 Linguagem de marcação
 Para descrever a formatação dos dados
XML
 Permite diferentes saídas
• Papel, tela, visores, áudio
• PDF, PS, SVG, HTML, TXT
 Editoração de documentos
 Recomendação da W3C
 XSL-FO é uma linguagem de marcação baseada em
XML para especificar detalhadamente a paginação, o
layout e o estilo a serem aplicados a um conteúdo
 A marcação XSL-FO é um pouco complexa e verbosa
 56 elementos e mais de 200 atributos
 A maneira prática de produzir arquivos XSL-FO é
usar o XSLT para produzir um documento fonte,
para ser então renderizado em um meio de saída,
poucas ferramentas fazem isto
 Portanto XSL-FO não se popularizou tão
rapidamente quanto XSLT
Definição
Motivação
 CSS também formata a apresentação de
documentos
 XSL-FO é mais completo
 Permite formatar como livro, website, etc
 Inclui todos os estilos CSS2 para áudio
 Direciona textos
 Configura margens, rodapés e cabeçalhos
 Controla a separação de sílabas
 Sua aplicação é mais ampla que a Web
Definição
 O vocabulário FO descreve como a
apresentação aparecerá para o leitor
 Arquivos com os documentos têm
extensão .fo ou .fob ou .xml
 Existem 56 elementos FO, 99% iniciados por
fo
 Os elementos FO variam conforme sua
apresentação
 fo:list-item-label (marcador)
 fo:list-item-body (contém o texto do item)
Definição
 4 áreas FO principais:
 regiões: nível mais alto da hierarquia, contém
cabeçalho, texto e rodapé, ex: fo:region-body e
fo:region-after
 blocos: representam um bloco de texto como um
parágrafo, fo:block e fo:list-block
 linhas: linha de texto dentro de um parágrafo
 entre-linhas: partes de linha como caracteres,
referência a rodapés ou equação matemática, ex:
fo:external-graphics e fo:inline
Hierarquia
 Page
 Regions
• Block areas
• Line areas
• Inline areas
Hierarquia
Processamento necessário
 O processador XSLT recebe o documento XML e
seu stylesheet apropriado, desenvolvido para
produzir outro documento XML que usa o
namespace XSL-FO e é esperado pelo formatador
XSL-FO
 O documento resultante alimenta o formatador
XSL-FO que produz então o produto final: um
documento impresso, formatado para
apresentação visual
Estrutura do Documento XSL-FO
Documento XSL-FO
 Para o layout do conteúdo, [3] layout-master-set especifica o
tamanho da página (simple-page-master [4]). O elemento
region-body corresponde à parte principal do layout da página
 [8] Para suporte à paginação complexa, o elemento page-
sequence é usado. Para um layout simples de página, é
necessária apenas uma definição particular de página (simple-
page-master)
 O elemento no page-sequence é o flow [9] que se refere à
distribuição do conteúdo pelas áreas da página.
 No xsl-region-body está identificada em qual região da página o
texto flui. Ele diferencia o corpo da página das outras áreas
(margens, cabeçalho, rodapé). O conteúdo [10], não pode ser
inserido como texto simples, pois o formatador teria que
adivinhar o que fazer com ele, então o conteúdo está em
<fo:block>Content</fo:block> que define um bloco de texto na
página
Stylesheet XSLT para XSL-FO
2) namespaces
4) o documento de saída deve ser um XML válido
5) o template raiz (esboço essencial do conteúdo)
Detalhando a estrutura
 Temos então um stylesheet XSLT
completo, usado pelo processador
XSLT para produzir um documento
XSL-FO válido
8) o tamanho da página é especificado
em fo:simple-page-master (A4, letter)
11) define a margem superior
16) no XSLT há instrução para processar o documento de
entrada
21) o processador XSLT processa o documento do arquivo de
entrada XML resultando em um elemento fo:block no qual todo
o conteúdo é inserido
26) combina o elemento do documento fonte resultando em
um elemento apropriado do vocabulário XSL-FO
31) idem
36) objeto de formatação inline: produz saída em itálico
Elementos Inline :
contêiner com propriedades
usadas para formatar o
conteúdo
41) trata todos os elementos sem estilo definido,
se a todos os elementos for aplicado um estilo,
nada será processado, bom pra debug
Conteúdo para o documento XML
Aplicando propriedades ao bloco
O processador XSL-FO cria uma nova página quando
encontra uma seção. Todo o conteúdo da página é
processado dentro do bloco. Para destacar o
cabeçalho pode-se aplicar uma fonte maior, negrito
e adicionar espaço em branco após o conteúdo.
Conclusão
 O processamento tem 2 partes: dado o
documento fonte XML mais o
stylesheet XSTL para um processador
XSLT a saída deve ser um documento
XSL-FO válido
 Isto irá para o processador XSL-FO
 RenderX e Antenna House são comerciais
e com versão trial
 PassiveTeX ou FOP são gratuitos
Referências
[XSL-FO, 2001] Using XSL Formatting Objects. Disponível em: http
://www.xml.com/pub/a/2001/01/17/xsl-fo/index.html
[RenderX, 2005] RenderX. Disponível em: http://www.renderx.com/
[FO, 2001] Disponível em:
http://www.xml.com/pub/a/2001/01/24/xsl-fo/index.html ?page=1
[FO, 2002] Printing from XML: An Introduction to XSL-FO.
Disponível em: http://www.xml.com/pub/a/2002/10/09/xslfo.html
Acesso em: 03/2009.
[FO, 2009] Tutorial da W3C sobre XSL-FO. Disponível em http
://www.w3schools.com/xslfo/ Acesso em: 03/2009.

Aplicando Transformação em XML usando XSLT e XSL-FO - 3

  • 1.
    Aplicando Transformações em XMLusando XSLT e XSL-FO Ms Vivian Genaro Motti Profª Drª Maria da Graça Pimentel Prof Dr Rudinei Goularte Ilhéus, maio de 2009. ERBASE
  • 2.
     Parte I:XML, conceitos e definições  Parte II: XSD, XSL, X-PATH  Parte III: CSS, XSL-T, XSL-FO  Parte IV: XSL-FO (Formatting Objects)
  • 3.
    Sumário  CSS  XSLT XSL-FO  Introdução  Definição
  • 4.
  • 5.
    CSS  São folhasde estilo  HTML: define a estrutura e o conteúdo de um documento web  CSS: define o layout e o estilo de apresentação  Recomendação da W3C  Suportada por navegadores
  • 6.
  • 7.
  • 8.
    XSLT  XSL foidesenvolvida pela W3C  Para criação de uma linguagem para folhas de estilo baseadas em XML  Folhas de Estilo XSL  Consistem em um conjunto de regras chamado template  XSLT  São as transformações do XSL
  • 9.
    XSLT  Transforma documentosXML em  HTML  Ou XHTML  XPATH  É usado na XSLT para navegar pelos elementos e atributos  XSLT é uma recomendação da W3C
  • 10.
    XHTML  São documentosque ampliam o HTML4  São baseados em XML  Podem ser lidos, editados, visualizados e validados por ferramentas para XML  Podem usar aplicações baseadas em HTML ou DOM
  • 11.
    Aplicações da XSLT Elementos e atributos de um documento original podem ser  Removidos  Adicionados  Rearranjados  Ordenados  Testados  XSLT transforma uma árvore-fonte XML em uma árvore resultante
  • 12.
    Suporte por Navegadores XML, XPATH e XSLT são suportadas por  Internet Explorer 6  Mozilla Firefox 3  Google Chrome 1  Opera 9
  • 13.
    Estrutura de umdocumento  Elemento raiz que declara um XSL  Folha de estilo XSL  <xsl:stylesheet> ou <xsl:transform> <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl= "http://www.w3.org/1999/XSL/Transform">
  • 14.
    <xsl:template match="/"> <html> <body> <h2>Meus contatostelefônicos</h2> <table border="1"> <tr bgcolor="#9acd32"> <th align="left">Nome</th> <th align="left">Telefone</th> </tr> <xsl:for-each select="agendas/agenda"> <tr> <td><xsl:value-of select="endereco"/></td> <td><xsl:value-of select="email"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
  • 15.
    Estrutura em detalhes Template  Elemento que serve para defini-lo  Match  Atributo que associa o template a um elemento  Seu valor é uma expressão XPATH
  • 16.
    Passo-a-passo  1: declaraçãoXML (com versão e codificação)  2: definir que é uma folha de estilos XSLT <xsl:stylesheet> (com a versão e o namespace)  3: elemento template <xsl:template>  atributo match="/" associa o template ao elemento raiz  4: código HTML interno ao elemento template
  • 17.
    Referência  Para utilizaro template deve-se adicionar ao documento XML a referência à folha de estilos  Ex: <?xml-stylesheet type="text/xsl" href="agendas.xsl"?>  Templates têm as regras para aplicar em nós específicos
  • 18.
    Elemento value-of  Usadopara extrair o valor de um elemento XML e adicioná-lo à transformação de saída <td><xsl:value-of select="agenda/nome"/></td>  O valor do atributo select é uma expressão XPATH  Como em um sistema de navegação por arquivos
  • 19.
    Elemento xsl:for-each  Retornaum conjunto de elementos <xsl:for-each select="agendas/agenda"> <tr> <td><xsl:value-of select="nome"/></td> <td><xsl:value-of select="telefone"/></td> </tr> </xsl:for-each>  Esse exemplo resulta em uma tabela com todos os elementos
  • 20.
    Filtrando elementos  ExpressõesXPATH podem ser usadas para seleção de elementos específicos <xsl:for-each select=”agendas/agenda[nome='Maria']”>  Retorna elementos com nome Maria  Operadores • = igual • != diferente • &lt; menor que • &gt; maior que
  • 21.
    Ordenando elementos  Oelemento <xsl:sort>, usado após o <xsl:for-each> ordena os elementos  Pode-se especificar qual elemento deve ser usado na ordenação  Ex: por nome <xsl:sort select=”nome”>
  • 22.
    Testando elementos  Paraincluir uma condição deve-se usar após o <xsl:for-each> o <xsl:if> <xsl:for-each select="agendas/agenda"> <xsl:if test="nome != 'Maria'"> <tr> … </tr> </xsl:if> </xsl:for-each>
  • 23.
    Condições Múltiplas  Choose,when e otherwise <xsl:choose> <xsl:when test="nome != Maria"> <td><xsl:value-of select="nome"/></td> </xsl:when> <xsl:otherwise> <td><xsl:value-of select="nome"/></td> </xsl:otherwise> </xsl:choose>
  • 24.
    XSLT  Transformam documentosem diferentes formatos  JavaScript pode ser usado para adequar as formatações aos navegadores
  • 25.
  • 26.
     A especificaçãoda Extensible Stylesheet Language (XSL) se divide em  XSLT, uma linguagem para transformar XML, e  XSL Formatting Objects (XSL-FO), um vocabulário XML para especificar a semântica da formatação  XPATH Definição
  • 27.
     XSL-FO éum conjunto de ferramentas para descrever a apresentação do XML  Para produção de material impresso em alta qualidade descrevendo a formatação e layout de conteúdos gerados por computador Definição
  • 28.
    XSL-FO Formatting Objects Linguagem de marcação  Para descrever a formatação dos dados XML  Permite diferentes saídas • Papel, tela, visores, áudio • PDF, PS, SVG, HTML, TXT  Editoração de documentos  Recomendação da W3C
  • 29.
     XSL-FO éuma linguagem de marcação baseada em XML para especificar detalhadamente a paginação, o layout e o estilo a serem aplicados a um conteúdo  A marcação XSL-FO é um pouco complexa e verbosa  56 elementos e mais de 200 atributos  A maneira prática de produzir arquivos XSL-FO é usar o XSLT para produzir um documento fonte, para ser então renderizado em um meio de saída, poucas ferramentas fazem isto  Portanto XSL-FO não se popularizou tão rapidamente quanto XSLT Definição
  • 30.
    Motivação  CSS tambémformata a apresentação de documentos  XSL-FO é mais completo  Permite formatar como livro, website, etc  Inclui todos os estilos CSS2 para áudio  Direciona textos  Configura margens, rodapés e cabeçalhos  Controla a separação de sílabas  Sua aplicação é mais ampla que a Web
  • 31.
    Definição  O vocabulárioFO descreve como a apresentação aparecerá para o leitor  Arquivos com os documentos têm extensão .fo ou .fob ou .xml  Existem 56 elementos FO, 99% iniciados por fo  Os elementos FO variam conforme sua apresentação  fo:list-item-label (marcador)  fo:list-item-body (contém o texto do item)
  • 32.
    Definição  4 áreasFO principais:  regiões: nível mais alto da hierarquia, contém cabeçalho, texto e rodapé, ex: fo:region-body e fo:region-after  blocos: representam um bloco de texto como um parágrafo, fo:block e fo:list-block  linhas: linha de texto dentro de um parágrafo  entre-linhas: partes de linha como caracteres, referência a rodapés ou equação matemática, ex: fo:external-graphics e fo:inline
  • 33.
    Hierarquia  Page  Regions •Block areas • Line areas • Inline areas
  • 34.
  • 35.
    Processamento necessário  Oprocessador XSLT recebe o documento XML e seu stylesheet apropriado, desenvolvido para produzir outro documento XML que usa o namespace XSL-FO e é esperado pelo formatador XSL-FO  O documento resultante alimenta o formatador XSL-FO que produz então o produto final: um documento impresso, formatado para apresentação visual
  • 36.
  • 37.
    Documento XSL-FO  Parao layout do conteúdo, [3] layout-master-set especifica o tamanho da página (simple-page-master [4]). O elemento region-body corresponde à parte principal do layout da página  [8] Para suporte à paginação complexa, o elemento page- sequence é usado. Para um layout simples de página, é necessária apenas uma definição particular de página (simple- page-master)  O elemento no page-sequence é o flow [9] que se refere à distribuição do conteúdo pelas áreas da página.  No xsl-region-body está identificada em qual região da página o texto flui. Ele diferencia o corpo da página das outras áreas (margens, cabeçalho, rodapé). O conteúdo [10], não pode ser inserido como texto simples, pois o formatador teria que adivinhar o que fazer com ele, então o conteúdo está em <fo:block>Content</fo:block> que define um bloco de texto na página
  • 38.
    Stylesheet XSLT paraXSL-FO 2) namespaces 4) o documento de saída deve ser um XML válido 5) o template raiz (esboço essencial do conteúdo)
  • 39.
    Detalhando a estrutura Temos então um stylesheet XSLT completo, usado pelo processador XSLT para produzir um documento XSL-FO válido
  • 40.
    8) o tamanhoda página é especificado em fo:simple-page-master (A4, letter) 11) define a margem superior
  • 41.
    16) no XSLThá instrução para processar o documento de entrada 21) o processador XSLT processa o documento do arquivo de entrada XML resultando em um elemento fo:block no qual todo o conteúdo é inserido
  • 42.
    26) combina oelemento do documento fonte resultando em um elemento apropriado do vocabulário XSL-FO 31) idem 36) objeto de formatação inline: produz saída em itálico Elementos Inline : contêiner com propriedades usadas para formatar o conteúdo
  • 43.
    41) trata todosos elementos sem estilo definido, se a todos os elementos for aplicado um estilo, nada será processado, bom pra debug
  • 44.
    Conteúdo para odocumento XML
  • 45.
    Aplicando propriedades aobloco O processador XSL-FO cria uma nova página quando encontra uma seção. Todo o conteúdo da página é processado dentro do bloco. Para destacar o cabeçalho pode-se aplicar uma fonte maior, negrito e adicionar espaço em branco após o conteúdo.
  • 46.
    Conclusão  O processamentotem 2 partes: dado o documento fonte XML mais o stylesheet XSTL para um processador XSLT a saída deve ser um documento XSL-FO válido  Isto irá para o processador XSL-FO  RenderX e Antenna House são comerciais e com versão trial  PassiveTeX ou FOP são gratuitos
  • 47.
    Referências [XSL-FO, 2001] UsingXSL Formatting Objects. Disponível em: http ://www.xml.com/pub/a/2001/01/17/xsl-fo/index.html [RenderX, 2005] RenderX. Disponível em: http://www.renderx.com/ [FO, 2001] Disponível em: http://www.xml.com/pub/a/2001/01/24/xsl-fo/index.html ?page=1 [FO, 2002] Printing from XML: An Introduction to XSL-FO. Disponível em: http://www.xml.com/pub/a/2002/10/09/xslfo.html Acesso em: 03/2009. [FO, 2009] Tutorial da W3C sobre XSL-FO. Disponível em http ://www.w3schools.com/xslfo/ Acesso em: 03/2009.