SlideShare uma empresa Scribd logo
1 de 42
Transformações em XML
XSLT
Prof. Aldo de Queiroz Jr
aldo.queiroz@uniderp.edu.br
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.)
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.);
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
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
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.
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
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>
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
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 &amp; Row</Editora>
</Livro>
</Livraria>
Livraria.xml
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.
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>
Estrutura de documento XSL
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet>
<xsl:template match="/">
[ação1]
</xsl:template>
<xsl:template match="Livraria">
[ação2]
</xsl:template>
<xsl:template match="Livro">
[ação3]
</xsl:template>
...
</xsl:stylesheet>
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.
Template (Exemplo)
<xsl:template match="Livro">
<xsl:apply-templates/>
</xsl:template>
Ao processar o documento e for localizado o elemento
<Livro> o processador executa esta regra.
<xsl:template match="Livro">
Aplica a regra para cada um dos "filhos" de Livro
<xsl:apply-templates/>
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."
Criando a folha de estilo
(Stylesheet) XSL – Passo 1
 Desenhe um diagrama da árvore do
documento XML.
Documento
/
<?xml version="1.0"
encoding="ISO-8859-1"?>
DocumentType
<!DOCTYPE Livraria ...>
Elemento
Livraria
Elemento
Livro
Elemento
Livro
Elemento
Livro
Elemento
Titulo
Elemento
Autor
Elemento
Data
Elemento
ISBN
Elemento
Editora
... ...
Texto
My Life ...
Texto
Paul McCartney
Texto
July, 1998
Texto
94303-12021-43892
Texto
McMillin Publishing
Criando a folha de estilo
(Stylesheet) XSL – Passo 2
 Crie uma template para cada tipo de nó
da árvore
<?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="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Livraria">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Livro">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Titulo">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Autor">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Data">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="ISBN">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Editora">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
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
Criando a folha de estilo
(Stylesheet) XSL – Passo 4
 Inclua o código <HTML> necessário ao
conteúdo.
<?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">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Livro">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Titulo">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Autor">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Data">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="ISBN">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="Editora">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="."/>
</xsl:template>
</xsl:stylesheet>
Livraria1a.xsl
Inclua HTML
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.
<?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>
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>
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.
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>
Livraria2.xsl
<?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</TITULO>
</HEAD>
<BODY>
<xsl:apply-templates/>
</BODY>
</HTML>
</xsl:template>
<xsl:template match="Livro">
<p/>Aqui esta o livro:<br/>
<xsl: apply-templates/>
</xsl:template>
</xsl:stylesheet>
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
Template única aplicada a
múltiplos elementos
 Observe que no último exemplo uma
única template foi aplicada a vários
elementos.
<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
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.
<xsl:for-each select="padrão">
<xsl:for-each select="Livro">
[ação]
</xsl:for-each>
Esta template executa a [ação] para cada elemento do Livro
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.
Padrões
<xsl:template match="/">
<xsl:template match="Livro">
<xsl:template match="Titulo | Autor">
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.
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’
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())
Numeração
 A transformação XSL tem a capacidade
de numerar os elementos
<xsl:number/>.<xsl:apply-templates select="Titulo"/>
Numerando os Livros
<?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">
<xsl:number/>.<xsl:apply-templates select="Titulo"/><br/>
</xsl:template>
<xsl:template match="Titulo">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
Livraria6.xsl
Numeração
aqui
Ordenação
<?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:apply-templates select="Livro">
<xsl:sort select="Titulo" order="ascending"/>
</xsl:apply-templates>
</xsl:template>
<xsl:template match="Livro">
<xsl:number/>.<xsl:apply-templates select="Titulo"/><br/>
</xsl:template>
<xsl:template match="Titulo">
<xsl:apply-templates/>
</xsl:template>
</xsl:stylesheet>
Livraria7.xsl

Mais conteúdo relacionado

Destaque

Programação Concorrente - Aula 02
Programação Concorrente - Aula 02Programação Concorrente - Aula 02
Programação Concorrente - Aula 02thomasdacosta
 
Programação Concorrente - Aula 01
Programação Concorrente - Aula 01Programação Concorrente - Aula 01
Programação Concorrente - Aula 01thomasdacosta
 
Programação Concorrente - Curso Completo
Programação Concorrente - Curso CompletoProgramação Concorrente - Curso Completo
Programação Concorrente - Curso Completothomasdacosta
 
3Com 3C13634A
3Com 3C13634A3Com 3C13634A
3Com 3C13634Asavomir
 
The asquith group case study some statistics
The asquith group case study some statisticsThe asquith group case study some statistics
The asquith group case study some statisticsasalarsson
 
3Com 900-0182-01
3Com 900-0182-013Com 900-0182-01
3Com 900-0182-01savomir
 
TECNOLOGÍA
TECNOLOGÍA TECNOLOGÍA
TECNOLOGÍA AnaHerr14
 
5 levant top_planimet
5 levant top_planimet5 levant top_planimet
5 levant top_planimetEd Nascimento
 
Ujian mac bahasa arab kertas 2 2017 (form 5)
Ujian mac bahasa arab  kertas 2 2017 (form 5) Ujian mac bahasa arab  kertas 2 2017 (form 5)
Ujian mac bahasa arab kertas 2 2017 (form 5) zailani a idris
 
E an 35 n° 4 una torre se cubre de verde por carlos sanchez saravia
E an 35 n° 4 una torre se cubre de verde por carlos sanchez saraviaE an 35 n° 4 una torre se cubre de verde por carlos sanchez saravia
E an 35 n° 4 una torre se cubre de verde por carlos sanchez saraviaCarlos Sanchez Saravia
 

Destaque (16)

XML - Parte 4
XML - Parte 4XML - Parte 4
XML - Parte 4
 
XML - Parte 2
XML - Parte 2XML - Parte 2
XML - Parte 2
 
Programação Concorrente - Aula 02
Programação Concorrente - Aula 02Programação Concorrente - Aula 02
Programação Concorrente - Aula 02
 
Programação Concorrente - Aula 01
Programação Concorrente - Aula 01Programação Concorrente - Aula 01
Programação Concorrente - Aula 01
 
Programação Concorrente - Curso Completo
Programação Concorrente - Curso CompletoProgramação Concorrente - Curso Completo
Programação Concorrente - Curso Completo
 
3Com 3C13634A
3Com 3C13634A3Com 3C13634A
3Com 3C13634A
 
Apache (XAMPP)
Apache (XAMPP)Apache (XAMPP)
Apache (XAMPP)
 
The asquith group case study some statistics
The asquith group case study some statisticsThe asquith group case study some statistics
The asquith group case study some statistics
 
Nutas presentation
Nutas presentationNutas presentation
Nutas presentation
 
3Com 900-0182-01
3Com 900-0182-013Com 900-0182-01
3Com 900-0182-01
 
SMC Events and Tournaments
SMC Events and TournamentsSMC Events and Tournaments
SMC Events and Tournaments
 
TECNOLOGÍA
TECNOLOGÍA TECNOLOGÍA
TECNOLOGÍA
 
Ti 13 quidam
Ti 13 quidamTi 13 quidam
Ti 13 quidam
 
5 levant top_planimet
5 levant top_planimet5 levant top_planimet
5 levant top_planimet
 
Ujian mac bahasa arab kertas 2 2017 (form 5)
Ujian mac bahasa arab  kertas 2 2017 (form 5) Ujian mac bahasa arab  kertas 2 2017 (form 5)
Ujian mac bahasa arab kertas 2 2017 (form 5)
 
E an 35 n° 4 una torre se cubre de verde por carlos sanchez saravia
E an 35 n° 4 una torre se cubre de verde por carlos sanchez saraviaE an 35 n° 4 una torre se cubre de verde por carlos sanchez saravia
E an 35 n° 4 una torre se cubre de verde por carlos sanchez saravia
 

Semelhante a XML - Parte 3

Semelhante a XML - Parte 3 (11)

02 - Apresentação de dados em XML com XSL e HTML
02 - Apresentação de dados em XML com XSL e HTML02 - Apresentação de dados em XML com XSL e HTML
02 - Apresentação de dados em XML com XSL e HTML
 
Suporte XML nativo no SQL Server 2014/2016
Suporte XML nativo no SQL Server 2014/2016Suporte XML nativo no SQL Server 2014/2016
Suporte XML nativo no SQL Server 2014/2016
 
Folhas de Estilo XSL
Folhas de Estilo XSLFolhas de Estilo XSL
Folhas de Estilo XSL
 
Aplicando Transformação em XML usando XSLT e XSL-FO - 2
Aplicando Transformação em XML usando XSLT e XSL-FO - 2Aplicando Transformação em XML usando XSLT e XSL-FO - 2
Aplicando Transformação em XML usando XSLT e XSL-FO - 2
 
eXtensible Markup Language (XML)
eXtensible Markup Language (XML)eXtensible Markup Language (XML)
eXtensible Markup Language (XML)
 
Aula Xml Schema - XSD
Aula Xml Schema - XSDAula Xml Schema - XSD
Aula Xml Schema - XSD
 
Introdução à XML - Serviço de Biblioteca da EEFE-USP
Introdução à XML - Serviço de Biblioteca da EEFE-USPIntrodução à XML - Serviço de Biblioteca da EEFE-USP
Introdução à XML - Serviço de Biblioteca da EEFE-USP
 
XML - Parte 1
XML - Parte 1XML - Parte 1
XML - Parte 1
 
Xml pucminas2013
Xml pucminas2013Xml pucminas2013
Xml pucminas2013
 
Parte5 xml
Parte5 xmlParte5 xml
Parte5 xml
 
A e xtensible markup language (xml)
A e xtensible markup language (xml)A e xtensible markup language (xml)
A e xtensible markup language (xml)
 

XML - Parte 3

  • 1. Transformações em XML XSLT Prof. Aldo de Queiroz Jr aldo.queiroz@uniderp.edu.br
  • 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 &amp; 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>
  • 13. Estrutura de documento XSL <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet> <xsl:template match="/"> [ação1] </xsl:template> <xsl:template match="Livraria"> [ação2] </xsl:template> <xsl:template match="Livro"> [ação3] </xsl:template> ... </xsl:stylesheet>
  • 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.
  • 15. Template (Exemplo) <xsl:template match="Livro"> <xsl:apply-templates/> </xsl:template> Ao processar o documento e for localizado o elemento <Livro> o processador executa esta regra. <xsl:template match="Livro"> Aplica a regra para cada um dos "filhos" de Livro <xsl:apply-templates/>
  • 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.
  • 18. Documento / <?xml version="1.0" encoding="ISO-8859-1"?> DocumentType <!DOCTYPE Livraria ...> Elemento Livraria Elemento Livro Elemento Livro Elemento Livro Elemento Titulo Elemento Autor Elemento Data Elemento ISBN Elemento Editora ... ... Texto My Life ... Texto Paul McCartney Texto July, 1998 Texto 94303-12021-43892 Texto McMillin Publishing
  • 19. Criando a folha de estilo (Stylesheet) XSL – Passo 2  Crie uma template para cada tipo de nó da árvore
  • 20. <?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="/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="Livraria"> <xsl:apply-templates/> </xsl:template> <xsl:template match="Livro"> <xsl:apply-templates/> </xsl:template> <xsl:template match="Titulo"> <xsl:apply-templates/> </xsl:template> <xsl:template match="Autor"> <xsl:apply-templates/> </xsl:template> <xsl:template match="Data"> <xsl:apply-templates/> </xsl:template> <xsl:template match="ISBN"> <xsl:apply-templates/> </xsl:template> <xsl:template match="Editora"> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet>
  • 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.
  • 23. <?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"> <xsl:apply-templates/> </xsl:template> <xsl:template match="Livro"> <xsl:apply-templates/> </xsl:template> <xsl:template match="Titulo"> <xsl:apply-templates/> </xsl:template> <xsl:template match="Autor"> <xsl:apply-templates/> </xsl:template> <xsl:template match="Data"> <xsl:apply-templates/> </xsl:template> <xsl:template match="ISBN"> <xsl:apply-templates/> </xsl:template> <xsl:template match="Editora"> <xsl:apply-templates/> </xsl:template> <xsl:template match="text()"> <xsl:value-of select="."/> </xsl:template> </xsl:stylesheet> Livraria1a.xsl Inclua HTML
  • 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>
  • 29. Livraria2.xsl <?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</TITULO> </HEAD> <BODY> <xsl:apply-templates/> </BODY> </HTML> </xsl:template> <xsl:template match="Livro"> <p/>Aqui esta o livro:<br/> <xsl: apply-templates/> </xsl:template> </xsl:stylesheet>
  • 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"/>
  • 41. Numerando os Livros <?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"> <xsl:number/>.<xsl:apply-templates select="Titulo"/><br/> </xsl:template> <xsl:template match="Titulo"> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet> Livraria6.xsl Numeração aqui
  • 42. Ordenação <?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:apply-templates select="Livro"> <xsl:sort select="Titulo" order="ascending"/> </xsl:apply-templates> </xsl:template> <xsl:template match="Livro"> <xsl:number/>.<xsl:apply-templates select="Titulo"/><br/> </xsl:template> <xsl:template match="Titulo"> <xsl:apply-templates/> </xsl:template> </xsl:stylesheet> Livraria7.xsl