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
Dec 18, 2014
Aplicando Transformações em XML usando XSLT e
XSL-FO
Ms Vivian Genaro MottiProfª 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
CascadingStylesheets
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
Exemplop{text-align:center;color:black;font-family:arial}
Define os atributos Para parágrafos
XSLT
Extensible Stylesheet LanguageForTransformations
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• < menor que • > 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) namespaces4) o documento de saída deve ser um XML válido5) o template raiz (esboço essencial do conteúdo)
5
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)
e
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) idem36) 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
P
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.