XPath e XSLT - Marx Gomes Van der Linden

Transcrição

XPath e XSLT - Marx Gomes Van der Linden
XPath e XSLT
Ferramentas para Internet
Marx Gomes Van der Linden
( Material baseado no original de
Marcelo José Siqueira Coutinho de Almeida )
XSL


XSL → Extensible Stylesheet Language
Uma família de linguagens que especifica
métodos de transformação e manipulação de
documentos escritos em linguagens baseadas
em XML
http://marx.vanderlinden.com.br
2
XPath

Linguagem especialmente criada para acessar
partes de um documento XML
 Surgiu da necessidade de se acessarem os
documentos XML como se fossem árvores
 Não é baseada em XML
 Fácil incorporação em documentos XML
 Usada pela XSLT
http://marx.vanderlinden.com.br
3
XPath

XPath não é uma linguagem comum...
 Não se escreve documentos XPath
 XPath é usada dentro de folhas de estilo
XSL a fim de auxiliar a transformação de
documentos XML
 Linguagem de consulta baseada em
árvores
http://marx.vanderlinden.com.br
4
<videoteca>
<filme cod="CLA-1112">
<titulo> E o vento levou </titulo>
<diretor> Victor Fleming </diretor>
<elenco> <ator> Clark Gable </ator>
<atriz> Vivian Leigh </atriz>
</elenco>
</filme>
<filme cod="FIC-0001">
<titulo> Matrix </titulo>
<diretor> Andy Wachowski </diretor>
<diretor> Larry Wachowski </diretor>
<elenco> <ator> Keanu Reeves </ator>
<atriz> Laurence Fishburne </atriz>
</elenco>
</filme>
http://marx.vanderlinden.com.br
5
</videoteca>
Visão de Árvore
videoteca
filme
filme
titulo
diretor
elenco
titulo
Matrix
E o vento
levou
ator
Victor Fleming
atriz
Vivian Leigh
diretor diretor
Andy
Fleming
ator
Larry Wachowski
elenco
atriz
Laurence
Fishburne
Clark Gable
http://marx.vanderlinden.com.br
Keanu Reeves
6
Caminho de Localização

Define como cada elemento de uma árvore
XML pode ser localizado
 Definido através de uma seqüência de
passos de localização separados por barra
(“/")
 Localização é indicada de modo
semelhante a uma estrutura de diretórios
 Também chamado de Expressão de
Caminho (“path”)
http://marx.vanderlinden.com.br
7
videoteca
1
2
filme
filme
titulo
elenco
diretor
E o vento
levou
Victor Fleming
titulo diretor diretor elenco
Matrix
ator atriz
Vivian Leigh
Andy
Fleming
Larry Wachowski
Clark Gable
Caminho 1
/videoteca/filme/diretor
ator atriz
Laurence
Fishburne
Keanu Reeve
Caminho8 2
/videoteca/filme/elenco/ator
http://marx.vanderlinden.com.br
Caminho de Localização

Símbolos
– /: raiz do documento
– .: próprio elemento (elemento de contexto)
– *: substitui qualquer elemento em um
determinado nível
capítulo/seção/parágrafo
capítulo/introdução/parágrafo
capítulo/*/páragrafo
http://marx.vanderlinden.com.br
9
Caminho de Localização

Símbolos
– //: substitui múltiplos *
capítulo/parágrafo
capítulo/introdução/parágrafo
capítulo/tópicos/introdução/parágrafo
capítulo//páragrafo
http://marx.vanderlinden.com.br
10
Caminho de Localização

Cada nodo que resulta da avaliação de um
passo é utilizado como contexto para a
avaliação do próximo
filme
titulo
elenco
titulo
diretor
elenco
diretor
http://marx.vanderlinden.com.br
11
Predicados

Expressões booleanas utilizadas para
encontrar um determinado elemento
 @ indica um atributo
 Devem ser satisfeitos para que a instrução
correspondente seja processada
 Agem como filtros de itens indesejados em
uma lista
– /filme[@cod='001']
– /livro/seção[@idsec='A12']
http://marx.vanderlinden.com.br
12
<?xml version="1.0"?>
<bookstore specialty="novel">
<book style="autobiography">
<author>
<first-name>Joe</first-name>
<last-name>Bob</last-name>
<award>Trenton Literary Review
Honorable Mention</award>
</author>
<price>12</price>
</book>
<book style="textbook">
<author>
<first-name>Mary</first-name>
<last-name>Bob</last-name>
<publication>Selected Short Stories of
<first-name>Mary</first-name>
http://marx.vanderlinden.com.br
13
(...)
Exemplos(1/3)

author → Todos os autores no contexto
atual

//author → Todos os autores no documento

/bookstore → Tag bookstore na raiz

author/* → Todos os filhos de author


*[@specialty] → Todas as tags que contém
o atributo speciality
book[@style] → Todas as tags book que
contém o atributohttp://marx.vanderlinden.com.br
style
14
Exemplos (2/3)




book/@style → Todos os atributos style
pertencentes a uma tag book
book[@style=/bookstore/@specialty]
→ Todas os atributos specialty pertencentes à
tag livro, cujo valor seja igual ao valor de
specialty da tag bookstore, na raiz.
@* → Todos os atributos do contexto atual
author[1] → O primeiro autor no contexto
atual
http://marx.vanderlinden.com.br
15
Exemplos (3/3)



author[first-name][3] → O terceiro autor
que tem um first-name (filho)
bookstore//title → Todos os elementos
title descendentes de bookstore
bookstore/*/title → Todos os elementos
title que são netos de bookstore
http://marx.vanderlinden.com.br
16
XSLT

Um documento XML por si só não apresenta
muitas vantagens
 É “apenas” um contêiner de informações
 Como visualizá-lo?
 Qual aplicação irá processá-lo?
 Como utilizá-lo?
http://marx.vanderlinden.com.br
17
Motivação

Por que transformar um documento?
 Armazenar em um formato, exibir em outro
 Converter para um formato mais útil
 Tornar o documento mais compacto
 Usar o documento como front-end para
consultas a BD
http://marx.vanderlinden.com.br
18
Processo de Transformação
DECLARAÇÕES
XSLT
(XSL)
ARQUIVO
DE
ENTRADA
Processador
XSLT
ARQUIVO
DE
SAÍDA
(XML ou não)
(XML)
http://marx.vanderlinden.com.br
19
Processo de Transformação

Observações
 Documento original não é modificado
 Formato resultante pode ser serializado ou
não
 O resultado pode ser outro arquivo XML,
XHTML, HTML, texto plano, etc.
http://marx.vanderlinden.com.br
20
Transformação

Uma especificação de transformação é
composta de um conjunto de regras que
combinam elementos
 Cada regra é aplicada de acordo com uma
busca ou seleção no documento fonte
 Cada regra descreve o que deve ser gerado
com base nos dados de entrada
 Funciona como um filtro
http://marx.vanderlinden.com.br
21
Transformação

Documentos XML são representados como
árvores
 Cada parte da estrutura é representada
como um nó e acessada através de
pesquisas
 Utilização de XPath
http://marx.vanderlinden.com.br
22
Folha de Estilo


Toda Folha de Estilo XSLT deve estar
armazenada em um arquivo .xsl
O arquivo XML deve referenciar a folha de
estilo usando uma instrução de
processamento
<?xml-stylesheet href="folha.xsl"
type="text/xsl" ?>
http://marx.vanderlinden.com.br
23
Folha de Estilo: Formato
<?xml version="1.0">
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Format">
<!-- CONTEÚDO -->
</xsl:sylesheet>
http://marx.vanderlinden.com.br
24
Comandos

Templates
 São utilizados para descrever como uma
determinada parte de um documento XML
deve ser transformada.
 Uma Folha de Estilo XSL deve ser
composta por um ou mais templates.
 Semelhante à definição de uma função
em uma linguagem de programação.
 Pode ter um comportamento recursivo.
http://marx.vanderlinden.com.br
25
Comandos

Templates
 Sintaxe
<xsl:template match="nó de referência">
[diretiva de processamento] | [texto]
</xsl:template>
http://marx.vanderlinden.com.br
26
Comandos

Templates
 O atributo match é utilizado para identificar
a associação de um estilo com um
documento ou parte de um documento em
especial.
 Define o nó de referência, ou seja, onde
começa a busca pelo elementos a serem
transformados.
 Semelhante ao where em uma cláusula
select de SQL
http://marx.vanderlinden.com.br
27
Comandos

Para processar todo o documento XML a
busca deve iniciar pelo elemento raiz
<xsl:template match="/">
...
</xsl:template>
<xsl:template match="videoteca">
...
</xsl:template>
<xsl:template match="*">
...
</xsl:template> http://marx.vanderlinden.com.br
28
value-of

value-of
 Imprime o conteúdo de um elemento dentro
da árvore de resultados.
 Elemento é escolhido através do atributo
select.

Relativo ao contexto atual
<xsl:value-of select="elemento corrente" />
<xsl:template match="diretor">
<xsl:value-of select="." />
</xsl:template>
http://marx.vanderlinden.com.br
29
apply-templates


Insere na posição especificada o
processamento associado ao nó especificado
Análogo à chamada de uma função em uma
linguagem de programação
<xsl:template match="/">
<b> Filmes: </b>
<xsl:apply-templates />
</xsl:template>
http://marx.vanderlinden.com.br
30
Processamento Seletivo


Permite selecionar certos elementos filhos
mediante uma determinada condição
Utilização do comando select em applytemplates
http://marx.vanderlinden.com.br
31
Processamento Seletivo
<xsl:template match="videoteca">
<xsl:apply-templates
select="filme[@cod='001']"/>
</xsl:template>
<xsl:template match="filme">
<xsl:apply-templates select="diretor"/>
</xsl:template>
http://marx.vanderlinden.com.br
32
Exemplo - XML
<?xml version="1.0"?>
<arquivo>
<cliente cat="A">
<nome>Fulano de Tal</nome>
<end>Rua XYZ, 123</end>
</cliente>
<cliente cat="B">
<nome>Beltrano Segundo</nome>
<end>Av. ABC, 2345</end>
<tel>3222-2223</tel>
</cliente>
<produto cod="prodA">
<nome>Produto A</nome>
<preco>50.00</preco>
</produto>
http://marx.vanderlinden.com.br
(...)
33
XSLT Completo (1/4)
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transfor
m"
version="1.0" >
<xsl:output method="html" />
<xsl:template match="/">
<html><body>
<h1> Clientes - Categoria A </h1>
<xsl:apply-templates
select="arquivo/cliente[@cat='A']"/>
http://marx.vanderlinden.com.br
34
XSLT Completo (2/4)
<h1> Clientes - Categoria B </h1>
<ul>
<xsl:apply-templates
select="//cliente[@cat='B']"/>
</ul>
<h1> Produtos </h1>
<table>
<tr><th>Código</th><th>Nome</th><th>Preço</th>
</tr>
<xsl:apply-templates select="//produto"/>
</table>
</body></html> http://marx.vanderlinden.com.br
35
</xsl:template>
XSLT Completo (3/4)
<xsl:template match="cliente[@cat='A']">
<h2> <xsl:value-of select="nome"/> </h2>
<p> Endereço: <xsl:value-of select="end"/>
</p>
<p> Telefone: <xsl:value-of select="tel"/>
</p>
</xsl:template>
<xsl:template match="cliente[@cat='B']">
<li> <xsl:value-of select="nome"/>,
<xsl:value-of select="end"/>, <xsl:value-of
select="tel"/> </li>
</xsl:template>
http://marx.vanderlinden.com.br
36
XSLT Completo (4/4)
<xsl:template match="produto">
<tr>
<td><xsl:value-of select="@cod"/></td>
<td><xsl:value-of select="nome"/></td>
<td><xsl:value-of select="preco"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
http://marx.vanderlinden.com.br
37
Saída (1/2)
http://marx.vanderlinden.com.br
38
Saída (2/2)
http://marx.vanderlinden.com.br
39

Documentos relacionados

xsl:template

xsl:template tipo string de um tuplo numa base de dados relacional.  Usando uma relação para guardar todos os elementos, ou  Usando uma relação diferente para cada elemento de tipo

Leia mais

XSLT/XPath

XSLT/XPath Documento XSL: Cabeçalho XML + ou + Conjunto de regras de template Leia mais

XML: Introdução - Marx Gomes Van der Linden

XML: Introdução - Marx Gomes Van der Linden Uma estruturahttp://marx.vanderlinden.com.br armazenada em memória

Leia mais