SlideShare uma empresa Scribd logo
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

PPTX
XSL, XSL-FO e XSLT + XPath
PPT
Banco de Dados XML
PDF
XML e Banco de Dados XML Nativo
PDF
Aplicando Transformação em XML usando XSLT e XSL-FO - 3
PDF
Aplicando Transformação em XML usando XSLT e XSL-FO - 1
PDF
Aplicando Transformação em XML usando XSLT e XSL-FO - 4
PDF
Aula de DTD Definição do Tipo de Documento
PDF
Apostila de ext js com php e postgresql v0.5
XSL, XSL-FO e XSLT + XPath
Banco de Dados XML
XML e Banco de Dados XML Nativo
Aplicando Transformação em XML usando XSLT e XSL-FO - 3
Aplicando Transformação em XML usando XSLT e XSL-FO - 1
Aplicando Transformação em XML usando XSLT e XSL-FO - 4
Aula de DTD Definição do Tipo de Documento
Apostila de ext js com php e postgresql v0.5

Destaque (16)

PPT
XML - Parte 4
PPT
XML - Parte 2
PPTX
Programação Concorrente - Aula 02
PPTX
Programação Concorrente - Aula 01
PPTX
Programação Concorrente - Curso Completo
PPTX
3Com 3C13634A
PPTX
PDF
The asquith group case study some statistics
PDF
Nutas presentation
PPTX
3Com 900-0182-01
PDF
SMC Events and Tournaments
PPTX
TECNOLOGÍA
PPTX
Ti 13 quidam
PPT
5 levant top_planimet
PDF
Ujian mac bahasa arab kertas 2 2017 (form 5)
PDF
E an 35 n° 4 una torre se cubre de verde por carlos sanchez saravia
XML - Parte 4
XML - Parte 2
Programação Concorrente - Aula 02
Programação Concorrente - Aula 01
Programação Concorrente - Curso Completo
3Com 3C13634A
The asquith group case study some statistics
Nutas presentation
3Com 900-0182-01
SMC Events and Tournaments
TECNOLOGÍA
Ti 13 quidam
5 levant top_planimet
Ujian mac bahasa arab kertas 2 2017 (form 5)
E an 35 n° 4 una torre se cubre de verde por carlos sanchez saravia
Anúncio

Semelhante a XML - Parte 3 (11)

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

Último (12)

PDF
Bases de dados - basicos dos basicos. como identificar chaves
PDF
Medidor de PH de bancada PH140 para uso em laboratório
DOC
COMO CRIAR DASHBOARD ATRAVES DE CODIFICAÇÃO PYTHON
PDF
48585b89-ee4d-4f8d-b2c0-7db19cc44e44.pdf
PPT
AULA COACHING INICIAL *******************
PPTX
Apresentação Lagoa Mandaú Lagoa Mandaú Lagoa Mandaú
PPTX
Sermao a mensagem da Cruz.pptx gdfvdcdfdfdsfcdsfxdfdfdfvdgf
PDF
Plano de gestão - template.pptx.pdf.pdf
PDF
01 Anticoag + fibrinol Abr 24 - prof MAISA DIA 020424.pdf
PDF
Previsão de Paradas em Máquinas Industriais
PDF
712893401-Geografia-em-perspectiva-3.pdf
PPTX
Slide Gêneros textuais: resenha crítica.ppxt
Bases de dados - basicos dos basicos. como identificar chaves
Medidor de PH de bancada PH140 para uso em laboratório
COMO CRIAR DASHBOARD ATRAVES DE CODIFICAÇÃO PYTHON
48585b89-ee4d-4f8d-b2c0-7db19cc44e44.pdf
AULA COACHING INICIAL *******************
Apresentação Lagoa Mandaú Lagoa Mandaú Lagoa Mandaú
Sermao a mensagem da Cruz.pptx gdfvdcdfdfdsfcdsfxdfdfdfvdgf
Plano de gestão - template.pptx.pdf.pdf
01 Anticoag + fibrinol Abr 24 - prof MAISA DIA 020424.pdf
Previsão de Paradas em Máquinas Industriais
712893401-Geografia-em-perspectiva-3.pdf
Slide Gêneros textuais: resenha crítica.ppxt

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