1) O documento descreve transformações em XML usando XSLT, que permite a transformação de documentos XML em outros formatos textuais.
2) XSLT usa templates de transformação aplicados a objetos XML para gerar saídas como HTML, XML ou texto puro a partir de um documento XML de entrada.
3) O documento fornece exemplos de como criar folhas de estilo XSLT para transformar um documento XML de livros em uma página HTML exibindo os dados da livraria.
2. Transformações XSL (XSLT)
XSLT (EXtensible Stylesheet Language
Transformation) é um padrão para
transformação de documentos XML para
qualquer representação Textual
Templates de transformação são aplicados a objetos
XML
Entrada: documento XML
Saída: qualquer documento em formato texto (HTML,
XML, TXT, RTF, etc.)
3. Possibilidades de transformações
Geração de texto constante
Supressão de conteúdo
Movimentação de texto (ex: mudança de
ordem de nome e sobrenome)
Duplicação de texto (ex: cópia de títulos para
produção de um índice)
Ordenação
Transformação de dados de um formato XML
para outro formato baseado em texto (XML,
HTML, TeX, etc.);
4. XSLT
Um processador XSLT
recebe como entrada um documento XML
gera na saída um outro documento em formato texto
Se o documento de saída for um documento
XML ele pode estar estruturado de acordo com
uma DTD diferente da DTD do documento de
entrada
A transformação é especificada em um style
sheet
Um style sheet segue a sintaxe do padrão XML
5. XSLT – Style Sheets
Um style sheet é formado por um
conjunto de regras template
transformações são executadas de acordo
com tais regras
Cada regra "casa" com um tipo de
elemento no documento de entrada
utilizando expressões XPath
As tags originais são substituídas por
novas tags de saída
6. Onde acontece a transformação?
No cliente (Web Browser).
No servidor (transformando-o
possivelmente em um documento XML).
Antes de ser colocado no servidor, um
programa pode transformar o documento
XML (geralmente p/ um documento
HTML). Nesse caso tanto servidor com
cliente só cuidam do documento já na
versão transformada.
7. Linguagem de Transformação
XSLT é uma linguagem de transformação:
transforma um documento escrito em uma
linguagem (XML em um documento escrito em
outra linguagem (ex. HTML)
Processador XSL
XSLT
XML HTML
8. XSLT – Estrutura Geral
O documento XSL é um documento XML, portanto segue
todas as regras do XML.
O elemento raiz é denominado style-sheet.
O namespace de XSLT deve ser declarado:
xmlns:xsl=http://www.w3.org/1999/XSL/Transform
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
...
</xsl:stylesheet>
9. XSLT – Como funciona
O processo de transformação XSLT usa
XPath
Define partes do documento fonte que
corresponde a um templates definidos
Quando uma correspondência é
encontrada o XSLT transforma a parte
correspondente do documento um
documento resultado
As parte do documento fonte que não
correspondem template não são
modificadas no resultado final
10. Exemplo de documento XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE Livraria SYSTEM "Livraria.dtd">
<Livraria>
<Livro>
<Titulo>My Life and Times</Titulo>
<Autor>Paul McCartney</Autor>
<Data>July, 1998</Data>
<ISBN>94303-12021-43892</ISBN>
<Editora>McMillin Publishing</Editora>
</Livro>
<Livro>
<Titulo>Adventures of Messiah</Titulo>
<Autor>Richard Bach</Autor>
<Data>1977</Data>
<ISBN>0-440-34319-4</ISBN>
<Editora>Dell Publishing Co.</Editora>
</Livro>
<Livro>
<Titulo>The First and Last Freedom</Titulo>
<Autor>J. Krishnamurti</Autor>
<Data>1954</Data>
<ISBN>0-06-064831-7</ISBN>
<Editora>Harper & Row</Editora>
</Livro>
</Livraria>
Livraria.xml
11. Elementos XML
Observe que o documento XML é
composto de ‘elementos’.
Para a Livraria temos os seguintes
elementos: Livraria (elemento raiz), Livro,
Titulo, Autor, Data, ISBN, e Editora.
12. Estrutura de documento XSL
Templates (ou regras) são criadas através do elemento:
<xsl:template>
<xsl:template match="Titulo">
...
</xsl:template>
Recursividade de templates é criada através do
elemento <xsl:apply-templates>:
<xsl:template match="Livro">
...
<xsl:apply-templates/>
</xsl:template>
14. XSL – Regras de Transformação
(Templates)
Ao encontrar o elemento raiz o
processador executa a [ação1] (ex.
Livraria)
Ao encontrar o elemento Livro o
processador executa a [ação2]
Ao encontrar o elemento Titulo o
processador executa a [ação3]
E assim sucessivamente.
16. Exemplo
No documento Livraria.XML temos:
<Livraria>
<Livro>
<Titulo>My Life and Times</Titulo>
<Autor>Paul McCartney</Autor>
<Data>July, 1998</Data>
<ISBN>94303-12021-43892</ISBN>
<Editora>McMillin Publishing</Editora>
</Livro>
...
</Livraria>
"Livro é um elemento filho do elemento Livraria. Titulo, Autor,
Data, ISBN, e Editora são elementos filhos do elemento Livro."
17. Criando a folha de estilo
(Stylesheet) XSL – Passo 1
Desenhe um diagrama da árvore do
documento XML.
21. Criando a folha de estilo
(Stylesheet) XSL – Passo 3
Para os nós da árvore em que não é
necessário processar os nós filhos
remova <xsl:apply-templates/>
remova a template para os nós filhos que não
serão processados
22. Criando a folha de estilo
(Stylesheet) XSL – Passo 4
Inclua o código <HTML> necessário ao
conteúdo.
24. Criando a folha de estilo
(Stylesheet) XSL – Passo 5
Ao encontrar o elemento <Livro> o
processador deve apresentar a seguinte
mensagem: "Eu estou no Livro.
Processando o filho agora."
Execute esta operação para cada
elemento.
25. <?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>
<HEAD>
<TITLE>Livraria</TITLE>
</HEAD>
<BODY>
<xsl:apply-templates/>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="Livraria">
Eu estou na Livraria. Processando o filho agora.<br/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Livro">
Eu estou no Livro. Processando o filho agora.<br/>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Titulo">
Eu estou no Titulo. Aqui esta o titulo:<br/>
<xsl:apply-templates/>
<br/>
</xsl:template>
<xsl:template match="Autor">
Eu estou em Autor. Aqui esta o nome do autor:<br/>
<xsl:apply-templates/>
<br/>
</xsl:template>
Livraria1b.xsl
<xsl:template match="Data">
Eu estou na data. Aqui esta a data:<br/>
<xsl:apply-templates/>
<br/>
</xsl:template>
<xsl:template match="ISBN">
Eu estou no ISBN. Aqui esta o ISBN:<br/>
<xsl:apply-templates/>
<br/>
</xsl:template>
<xsl:template match="Editora">
Eu estou na Editora. Aqui esta o editora:<br/>
<xsl:apply-templates/>
<br/>
</xsl:template>
<xsl:template match="text()">
<b><xsl:value-of select="."/></b>
</xsl:template>
</xsl:stylesheet>
26. Templates Padrões "Defaults"
Todo documento XSL possui duas templates defaults.
Estas templates são aplicadas quando o processador não encontra
a template especifica para o elemento
Templates Default:
Retorna o resultado da aplicação
das templates nos nós filhos.
Retorna o texto do nó
<xsl:template match="/ | *">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="."/>
</xsl:template>
27. Exemplo 2
Ao encontrar o elemento livro o processador
deve apresentar a mensagem: ‘<p/>Aqui esta
o livro<br/>’ e apresentar os dados dos nós
filhos.
28. Arquivo HTML gerado pelo
processador
<HTML>
<HEAD>
<TITLE>Livraria</TITULO>
</HEAD>
<BODY>
Aqui esta o livro:
todos os dados do primeiro livro
Aqui esta o livro:
todos os dados do segundo livro
Aqui esta o livro:
todos os dados do terceiro livro
</BODY>
</HTML>
30. Template para inclusão dos dados em
tabelas <?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="Livraria">
<HTML>
<HEAD>
<TITLE>Livraria</TITLE>
</HEAD>
<BODY>
<TABLE BORDER="1" WIDTH="100%">
<xsl:apply-templates/>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="Livro">
<TR>
<xsl:apply-templates/>
</TR>
</xsl:template>
<xsl:template match="Titulo | Autor | Data | ISBN | Editora">
<TD>
<xsl:apply-templates/>
</TD>
</xsl:template>
</xsl:stylesheet>
Livraria3.xs
31. Template única aplicada a
múltiplos elementos
Observe que no último exemplo uma
única template foi aplicada a vários
elementos.
32. <xsl:apply-templates
select="padrão">
O elemento xsl:apply-templates (sem
atributo) informa ao processador para
aplicar a regra a todos os filhos.
O elemento xsl:apply-templates pode
ter um atributo que informa ao
processador para processar somente
os filhos informados.
Isto é útil para definir a ordem de
apresentação dos filhos
33. Definir ordem de processamento dos
elementos <?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="Livraria">
<HTML>
<HEAD>
<TITLE>Book Catalogue</TITULO>
</HEAD>
<BODY>
<TABLE BORDER="1" WIDTH="100%">
<xsl:apply-templates/>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="Livro">
<TR>
<xsl:apply-templates select="Autor"/>
<xsl:apply-templates select="Titulo"/>
<xsl:apply-templates select="Data"/>
<xsl:apply-templates select="Editora"/>
<xsl:apply-templates select="ISBN"/>
</TR>
</xsl:template>
<xsl:template match="Titulo | Autor | Data | ISBN | Editora">
<TD>
<xsl:apply-templates/>
</TD>
</xsl:template>
</xsl:stylesheet>
Livraria4.xsl
Processa o elemento
Autor primeiro.
35. Para cada Livro faça ...
<?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="Livraria">
<HTML>
<HEAD>
<TITLE>Book Catalogue</TITULO>
</HEAD>
<BODY>
<TABLE BORDER="1" WIDTH="100%">
<xsl:for-each select="Livro">
<TR>
<xsl:apply-templates/>
</TR>
</xsl:for-each>
</TABLE>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="Titulo | Autor | Data | ISBN | Editora">
<TD>
<xsl:apply-templates/>
</TD>
</xsl:template>
</xsl:stylesheet>
Livraria5.xsl
Para cada livro crie
uma linha e processe
o nó filho.
37. Padrões
<xsl:template match="Livro/Titulo"> Título com Livro
como Pai
<xsl:template match="Livraria//Titulo"> Título com a Livraria
como ancestral
<xsl:template match="Livro/*"> Qualquer elemento filho
de Livro
<xsl:template match="id(J.K)"> Elemento com a id
J.K.
38. Padrões (Atributo)
<xsl:template match="para"> elemento "para"
<xsl:template match="para[@type]"> elemento "para" com um atributo
de nome "type"
<xsl:template match="para[@type ='aberto']"> elemento "para" com
um atributo de nome
"type" com valor ‘aberto’
39. Padrões (posição)
<xsl:template match="Livro[first-of-type()]"> Primeiro Livro
<xsl:template match="Livro[last-of-type()]"> Último Livro
<xsl:template match="Livro[not(last-of-type())]"> Todos, menos o último Livro
Outros:
not(first-of-type())
first-of-any()
not(first-of-any())
last-of-any()
not(last-of-any())
40. Numeração
A transformação XSL tem a capacidade
de numerar os elementos
<xsl:number/>.<xsl:apply-templates select="Titulo"/>