Vanessa Braganholo
Curso baseado em mini-cursos apresentados no SBBD. Autores: Carlos Heuser, Carina Dorneles e Vanessa Braganholo
XPath
Especificao: http://www.w3.org/TR/xpath Uma expresso XPath seleciona um conjunto de nodos Operadores principais:
/ para dar um passo na rvore XML (percorrer uma relao pai-filho) // para dar vrios passos de uma vez (percorrer uma relao ascendente-descendente)
Exemplo
/empregados/empregado
<? xml version=1.0 ?> <empregados> <empregado cod=E01 dept=D01> <nome>Joo</nome> <inicial-meio>S.</inicial-meio> <sobrenome>Santos</sobrenome> </empregado> <empregado cod=E02 dept=D01> <nome>Ana</nome> <sobrenome>Ferraz</sobrenome> </empregado> </empregados>
3
Contexto
Contexto
Retorno da Expresso
Conjunto de nodos retornados sempre o especificado pelo ltimo passo do caminho /empregados/empregado/nome
<? xml version=1.0 ?> <empregados> <empregado cod=E01 dept=D01> <nome>Joo</nome> <inicial-meio>S.</inicial-meio> <sobrenome>Santos</sobrenome> </empregado> <empregado cod=E02 dept=D01> <nome>Ana</nome> <sobrenome>Ferraz</sobrenome> </empregado> </empregados>
7
Operador //
<? xml version=1.0 ?> <empregados> <empregado cod=E01 dept=D01> <nome>Joo</nome> <inicial-meio>S.</inicial-meio> <sobrenome>Santos</sobrenome> </empregado> <empregado cod=E02 dept=D01> <nome>Ana</nome> <sobrenome>Ferraz</sobrenome> </empregado> </empregados>
8
Atributos
Operador .
Equivalentes!
/empregados/. /empregados
<? xml version=1.0 ?> <empregados> <empregado cod=E01 dept=D01> <nome>Joo</nome> <inicial-meio>S.</inicial-meio> <sobrenome>Santos</sobrenome> </empregado> <empregado cod=E02 dept=D01> <nome>Ana</nome> <sobrenome>Ferraz</sobrenome> </empregado> </empregados>
10
Operador ..
11
Operador *
Substitui um passo do caminho //empregado/*
<? xml version=1.0 ?> <empregados> <empregado cod=E01 dept=D01> <nome>Joo</nome> <inicial-meio>S.</inicial-meio> <sobrenome>Santos</sobrenome> </empregado> <empregado cod=E02 dept=D01> <nome>Ana</nome> <sobrenome>Ferraz</sobrenome> </empregado> </empregados>
12
XPath na prtica...
Arquivo: artigo.xml
Abrir o arquivo XML a ser consultado, digitar a expresso XPath e apertar a seta verde.
XPath Visualizer
Disponvel em http://www.topxml.com/xpathvisualizer/
XML LITE
Exerccio 1
Usando o documento XML fornecido, crie expresses XPath para as seguintes consultas:
a)
b)
c)
d) e)
f)
Selecionar as instituies dos autores do artigo Selecionar todos os pargrafos das sees do artigo Selecionar nomes dos autores do artigo propriamente dito e das referencias bibliogrficas Selecionar pai do elemento endereco Selecionar av do elemento paragrafo Selecionar todas as ocorrncias de endereo
Filtros
Restringem o conjunto de nodos selecionados Podem ser colocados em qualquer passo do caminho
17
Filtros
18
Contexto do Filtro
Sempre o ltimo passo percorrido antes do filtro Retorno nunca o que est no filtro, mas o ltimo passo do caminho da expresso
<? xml version=1.0 ?> <empregados> <empregado cod=E01 dept=D01> <nome>Joo</nome> <inicial-meio>S.</inicial-meio> <sobrenome>Santos</sobrenome> </empregado> <empregado cod=E02 dept=D01> <nome>Ana</nome> <sobrenome>Ferraz</sobrenome> </empregado> </empregados>
//empregado[nome=Ana]
19
Filtro de Posio
//empregado[1]
<? xml version=1.0 ?> <empregados> <empregado cod=E01 dept=D01> <nome>Joo</nome> <inicial-meio>S.</inicial-meio> <sobrenome>Santos</sobrenome> </empregado> <empregado cod=E02 dept=D01> <nome>Ana</nome> <sobrenome>Ferraz</sobrenome> </empregado> </empregados>
20
Filtro de Posio
//nome[1]
ATENO: o filtro de posio leva em conta o pai do n como contexto, por isso neste exemplo ele retorna os dois elementos nome, e no apenas o primeiro que aparece no documento
<? xml version=1.0 ?> <empregados> <empregado cod=E01 dept=D01> <nome>Joo</nome> <inicial-meio>S.</inicial-meio> <sobrenome>Santos</sobrenome> </empregado> <empregado cod=E02 dept=D01> <nome>Ana</nome> <sobrenome>Ferraz</sobrenome> </empregado> </empregados>
21
22
Testes de elementos
O nome de um elemento pode aparecer representando um elemento que deve estar presente como um filho
Exerccio 2
a)
b)
c)
d)
Selecionar o autor cujo nome Maria Ana Selecionar a obra da bibliografia cujo ano 1999 e o local University of Pennsylvania Selecionar a seo cujo nmero s2 e que contm um pargrafo cujo contedo ... Selecionar o atributo ttulo das sees
Funes
XPath possui muitas funes A maioria delas utilizada dentro dos filtros Uma lista completa est disponvel aqui: http://www.w3.org/TR/xpath#corelib
25
Testes de posio
//empregado[position()=1] ou //empregado[1]
Testes de posio
Funo last() localiza o ltimo elemento (retorna o nmero da posio do ltimo elemento)
Funo NOT
Selecionar todas as notas, exceto a terceira //nota[not(position()=3)] Selecionar uma nota que no contm um elemento ttulo //nota[not(titulo)] Selecionar todos os captulos, exceto aquele que tenha o atributo nmero com valor 10 //capitulo[not(@numero='10)]
Comparaes
Outras comparaes:
//paragrafo[position()>2] //paragrafo[position()>=3] //paragrafo[position()>2 and position()<last()] //paragrafo[position()=2 or position() = 4]
Tratamento de Strings
Funo contains(par1, par2) retorna true se par1 contm o texto em par2 par1 pode ser text() ou .
Funo contains()
Tratamento de Strings
Selecionar secao que contenha a palavra "relacional" em seu texto ou no texto de algum de seus descendentes
//secao[contains(., "relacional")]
<secao>Esta secao apresenta... <paragrafo>O modelo relacional ...</paragrafo> <paragrafo>Como j mencionado, ...</paragrafo> </secao>
Tratamento de Strings
Funo starts-with() testa o texto no comeo da string. No pode haver espao em branco.
//titulo[starts-with(., "Introduo")]
No funciona!
Tratamento de Strings
Exemplo:
Funo normalize-space()
No meio da string, reduz vrios espaos em branco para um nico caractere espao Remove completamente os espaos do incio e fim da string
Tratamento de Strings
Funo concat() concatena strings. Pode ter um ou mais parmetros: concat(text1, texto2,..., texton)
//secao[contains(.,concat (../autor/nome/text(), , ../autor/sobrenome/text()))] <livro> <autor> <nome>Ana</nome> <sobrenome>Silva</sobrenome> </autor> <secao> A autora Ana Silva ...</secao> <secao> ... </secao> </livro>
Tratamento de Strings
Uso: comparaes case-insensitive Parmetros: string para converter, caracteres para modificar no texto fonte, e valores a serem colocados
<paragrafo>EM XML, UM ELEMENTO ...</paragrafo> <paragrafo>Um documento XML deve possuir um elemento raiz ...</paragrafo>
Tratamento de Nmeros
Funo mod()
Fornece o resto de uma diviso truncada Selecionar pargrafos pares: //paragrafo[position() mod 2 = 0]
Filtros Mltiplos
... <nomes> <nome><pessoa>...</pessoa></nome> <nome><companhia>...</companhia></nome> <nome><companhia>...</companhia></nome> <nome><companhia>...</companhia></nome> <nome><companhia>...</companhia></nome> <nome><pessoa>...</pessoa></nome> </nomes> <nomes> <nome><pessoa>...</pessoa></nome> <nome><companhia>...</companhia></nome> <nome><pessoa>... </pessoa></nome> </nomes> ...
Filtros Mltiplos
Selecionar o terceiro nome, fornecendo o nome da companhia (s seleciona se for uma companhia!) //nome[3][companhia]
... <nomes> <nome><pessoa>...</pessoa></nome> <nome><companhia>...</companhia></nome> <nome><companhia>...</companhia></nome> <nome><companhia>...</companhia></nome> <nome><companhia>...</companhia></nome> <nome><pessoa>...</pessoa></nome> </nomes> <nomes> <nome><pessoa>...</pessoa></nome> <nome><companhia>...</companhia></nome> <nome><companhia>...</companhia></nome> <nome><pessoa>... </pessoa></nome> </nomes> ...
Outras funes
Comentrios:
//livro/comment()
Instrues de processamento
//livro/processing-instruction()
Exerccio 3
Usando o mesmo documento XML, crie expresses XPath (pode ser necessrio usar o resumo das funes XPath que est nos prximos slides)
a) b) c) d) e) f)
g)
h)
i)
Retorne todas as sees do artigo que possuem pelo menos um subelemento figura Selecione as sees mpares Selecione as sees mpares que possuem pelo menos um subelemento figura Selecione os pargrafos que contm uma instruo de processamento Encontre autores que possuam "Ana" no nome. No devem estar nas referencias bibliogrficas. A verso do artigo Selecione o pargrafo que tenha ambos os atributos "numero" e "tipo" Nome do(s) autor(res) da bibliografia cujo titulo da obra "Union Types for Semistructured Data ". Selecione o ano da publicao de bibliografias, cujo nome do autor contenha a palavra "Abiteboul"
Exerccio 3
j) k)
l)
m) n) o) p)
Um pargrafo cujo tamanho da string que ele contm 27 Selecione o terceiro pargrafo de uma seo Selecione um pargrafo que contenha o nome do segundo autor do artigo e sua instituio. Entre estes dois dados existe a string "from Selecione todo e qualquer pargrafo que tenha a string "two years". Trate o uso de maisculas e minsculas!! Selecionar sees que contenham somente dois pargrafos Selecione os elementos "ano" descendentes de bibliografia Encontre a instruo de processamento de algum elemento paragrafo.
Descrio
Retorna o nmero de nodos de um node-set Seleciona elementos pelo seu ID nico Retorna o nmero da posio do ultimo nodo em uma lista de nodos processados Retorna a parte local de um nodo. Um nodo geralmente consiste de um prefixo, uma vrgula e seguida de um nome local Retorna o nome de um nodo Retorna a URI da namespace de um nodo especfico Retorna a posio em uma lista de nodos do nodo que est sendo processado
Sintaxe e Exemplo
string=concat(val1, val2, ..) Exemplo: concat('The',' ','XML') Resultado: 'The XML' bool=contains(val,substr) Exemplo: contains('XML','X') Resultado: true string=normalizespace(string) Exemplo: normalize-space(' The XML ') Resultado: 'The XML' bool=startswith(string,substr) Exemplo: starts-with('XML','X') Resultado: true string(value) Exemplo: string(314) Resultado: '314'
Descrio
Retorna a concatenao de todos os seus argumentos
contains()
normalizespace()
starts-with()
string()
Sintaxe e Exemplo
number=string-length(string) Exemplo: string-length('Beatles') Resultado: 7 string=substring(string,start,length) Exemplo: substring('Beatles',1,4) Resultado: 'Beat' string=substring-after(string,substr) Exemplo: substring-after('12/10','/') Resultado: '10' string=substring-before(string,substr) Exemplo: substring-before('12/10','/') Resultado: '12' string=translate(value,string1,string2) Exemplo: translate('12:30','30','45') Resultado: '12:45' translate('12:30','03','54') Resultado: '12:45' translate('12:30','0123','abcd') Resultado: 'bc:da'
Descrio
Retorna o nmero de caracteres em uma string
Retorna a parte da string que est depois do argumento substr Retorna a parted a string que est antes do argumento substr Executa reposio character a character.
Nome ceiling()
floor()
number()
round()
sum()
Funes booleanas
Nome boolean() false() Sintaxe e Exemplo bool=boolean(value) false() Exemplo: number(false()) Resultado: 0 bool=lang(language) bool=not(condition) Exemplo: not(false()) true() Exemplo: number(true()) Resultado: 1 Descrio Converte o argumento e retorna true ou false Retorna false
lang() not()
Retorna true se a linguagem do argumento casa com a linguagem do elemento xsl:lang Retorna true se a condio de argumento for falsa, e falsa se a condio for verdadeira Retorna true
true()
XPath e Java