X path

350 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
350
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

X path

  1. 1. XPathƒ O significado de um elemento pode depender de seu contexto.ƒ Navegação dentro do documento XML para encontrar este contextoƒ Encontrar os elemento através de caminhosƒ Para chegar a um elemento: 9 Como em URL: • Uso de caminho absoluto - Especificar toda a hierarquia de elementos de uma árvore XML • Uso de caminho relativo - Especificar, em qualquer ponto do caminho, elementos relativos ao elemento contextoƒ Explorar a estrutura hierárquica do documento
  2. 2. XPathƒ Localizar com precisão um elemento de interesseƒ Exemplo: Obter o último nome do autor de um livro<livro> <autor> <nome> <primeiro>John</primeiro> <ultimo>Smith</ultimo> --->> RESULTADO CORRETO </nome> </author> ... <chapter> <autor> <nome> <primeiro>John</primeiro> <ultimo>Smith</ultimo> --->> RESULTADO INCORRETO </nome> </author> </chapter></livro>
  3. 3. XPathƒ XPath usa expressões 9 Strings com símbolos significativos; 9 Identificar o elemento titulo que é filho direto de um elemento livro: livro/titulo String com símbolo significativo "/"
  4. 4. É como uma árvore de diretórios... C:Arquivo>cd Artigos C:ArquivoArtigos>cd aceitos C:ArquivoArtigosaceitos>cd .. C:ArquivoArtigos>cd C:>
  5. 5. XPath - Expressõesƒ Expressão é uma string de texto que consiste de instruções para selecionar alguma estrutura de marcaçãoƒ Símbolos especiais: "/", "*", ".", ".."ƒ Expressão mais simples: //livroƒ Expressões podem ser usadas para selecionar 9 atributos, comentários, instruções de processamento, ou seqüência de texto entre elementosƒ São usadas em diferentes maneiras, para diferentes propósitos.
  6. 6. Caminhosƒ Usado quando quer selecionar algo, independente do contexto corrente 9 Para indicar a raiz do documento, usa-se "/" /book/title 9 Selecionar ocorrências de um elemento cujos antecessores não importam, usa-se "//" //para
  7. 7. Caminhosƒ Quando os nomes de elementos entre o elemento contexto e o descendente requerido não é conhecido 9Ex: selecionar títulos de capítulos e da introdução /livro/introducao/titulo e /livro/capitulo/titulo /livro/*/tituloƒ Múltiplos "*" podem ser usados para selecionar um maior nível de profundidade 9 Um “*” para cada nível
  8. 8. Caminhosƒ Uma forma abreviada para os múltiplos "*" é // 9 seleciona todos os elementos paragrafo que ocorrem em qualquer lugar de capitulo /capitulo//paragrafoƒ Para selecionar todos os paragrafo diretamente dentro do elemento corrente: //paragrafoƒ Seleção do elemento corrente: .
  9. 9. Exercício 1Usando o documento XML fornecido, crie expressões XPath para as seguintes consultas: 1. Selecionar as instituições dos autores do artigo 2. Selecionar todos os parágrafos das seções do artigo 3. Selecionar nomes dos autores do artigo propriamente dito e das referencias bibliográficas 4. Selecionar pai do elemento endereco 5. Selecionar avô do elemento paragrafo 6. Selecionar todas as ocorrências de endereço
  10. 10. Filtrosƒ Usados para remover itens indesejados de uma lista para criar uma nova lista. Ex: 9Seleciona os parágrafos de todos os capítulos, no entanto somente o primeiro parágrafo em cada capítulo. /book/chapter/para[1]ƒ Usa "[", e "]", para manipular o predicado. Os resultados do teste são um valor booleano, e a seleção só ocorre quando o valor é true.
  11. 11. Testes de elementos e atributosƒ Elementos 9O nome de um elemento pode aparecer representando um elemento que deve estar presente como um filho • Selecionar um elemento nota se ele contém diretamente um elemento tituto : /nota[titulo] 9O valor de um elemento pode ser testado: • Selecionar a nota cujo titulo seja "Inicial": /nota[titulo="Inicial"]
  12. 12. Testes de elementos e atributosƒ Atributos 9podem ser selecionados dependendo do valor ou da existência ou não de um atributo 9O símbolo @ é usado para representar um atributo e precede o nome do atributo • Selecionar o atributo autor do elemento livro: /livro/@autor • Seleciona todo parágrafo com o valor do atributo tipo igual a ‘secreto’: /para[@tipo=secreto]
  13. 13. AND e ORƒ Como os filtros são expressões booleanas, pode-se usar AND e ORƒ Exemplo: //note[titulo=“A” and ano=2000] Atenção: o XML Exchanger Lite só aceita and e or minúsculos
  14. 14. Exercício 21. Selecionar o autor cujo nome é Maria Ana2. Selecionar a obra da bibliografia cujo ano é 1999 e o local é University of Pennsylvania3. Selecionar a seção cujo número é s2 e que contém um parágrafo cujo conteúdo é ...4. Selecionar o atributo título das seções
  15. 15. Testes de posiçãoƒ Função position() retorna a localização sequencial do elemento testado 9Selecionar somente o primeiro parágrafo dentre os já selecionados pelo padrão /paragrafo[position()=1] ou /paragrafo[1]
  16. 16. Testes de posiçãoƒ Função last() localiza o último elemento (retorna o número da posição do último elemento) 9 Selecionar o último parágrafo //paragrafo[last()]ƒ Função count() retorna o número de ocorrências de um elemento 9 Selecionar seções que contenham apenas dois parágrafos //secao[count(paragrafo)=2]
  17. 17. Função NOTƒ Função not() para reverter o resultado do teste 9Selecionar todas as notas, exceto a terceira //nota[not(position()=3)] 9Selecionar uma nota que não contém um elemento título //nota[not(titulo)] 9Selecionar todos os capítulos, exceto aquele que tenha o atributo número com valor 10 //capitulo[not(@numero=10’)]
  18. 18. Comparaçõesƒ Selecionar todos paragrafos, mas não o último /paragrafo[position()!=last()]ƒ Outras comparações: /paragrafo[position()>2] /paragrafo[position()>=3] /paragrafo[position()>2 and position()<last()] /paragrafo[position()=2 or position() = 4]
  19. 19. Tratamento de Stringsƒ Função contains(par1, par2) retorna true se par1 contém o texto em par2 par1 pode ser text() ou .
  20. 20. Função contains()ƒ Usando "text()", testa somente o texto do elemento 9Selecionar titulo que contenha a palavra "relacional" //titulo[contains(text(), "relacional")] <titulo>Modelo relacional</titulo>
  21. 21. Tratamento de Stringsƒ Usando ".", testa o elemento secao e seus subelementos 9 Selecionar secao que contenha a palavra "relacional" //secao[contains(., "relacional")] <secao>Esta secao apresenta... <paragrafo>O modelo relacional ...</paragrafo> <paragrafo>Como já mencionado, ...</paragrafo></secao>
  22. 22. Tratamento de Stringsƒ Função starts-with() testa o texto no começo da string. Não pode haver espaço em branco. 9 Selecionar titulo que inicie com a palavra "Introdução" //titulo[starts-with(., "Introdução")] <titulo>Introdução a JSP</titulo> <titulo>_Introdução a JSP</titulo> Não funciona!
  23. 23. Tratamento de Stringsƒ Função string() converte o valor do argumento para string 9 Exemplo: string(//capitulo[1]/@numero), retorna o valor do atributo numero do primeiro capitulo, em formato stringƒ Função normalize-space() 9 No meio da string, reduz vários espaços em branco para um único caractere espaço 9 Remove completamente os espaços do início e fim da string//titulo[contains(normalize-space(.), "Introdução a JSP")]<titulo> Introdução a JSP </titulo>
  24. 24. Tratamento de Stringsƒ Função concat() concatena strings. Pode ter um ou mais parâmetros: concat(text1, texto2,..., texton) 9 Retornar a seção que fale da autora do livro //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>
  25. 25. Tratamento de Stringsƒ Função translate() converte caracteres de acordo com um esquema de mapeamento. 9 Uso: comparações case-insensitive 9 Parâmetros: string para converter, caracteres para modificar no texto fonte, e valores a serem colocados //paragrafo[contains(translate(normalize-space(.), "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"), "ELEMENTO")] O que está em minúsculo é trocado pelo maiúsculo. O que está em maiúsculo é comparado normalmente<paragrafo>EM XML, UM ELEMENTO É ...</paragrafo><paragrafo>Um documento XML deve possuir um elemento raiz ...</paragrafo> 9 os dois elementos paragrafo são recuperados
  26. 26. Tratamento de Stringsƒ Função string-length() determina o número de caracteres em uma string //paragrafo[string-length(.)=15] <paragrafo> quinze letras </paragrafo> <paragrafo>123456789012345</paragrafo>ƒ Função substring-before() extrai texto do início da string 9 Parâmetros: a string de onde será extraído o texto, os caracteres que terminam o prefixo a serem extraídos //titulo[contains(.,substring-before(.,"*"))] <titulo>Contrução dos arquivos *.gif</titulo>
  27. 27. Tratamento de Stringsƒ Função substring-after() extrai texto do final da string 9 Parâmetros: a string de onde será extraído o texto, os caracteres que terminam o prefixo a serem extraídos //titulo[contains(.,substring-after(.,"*"))] <titulo>Contrução dos arquivos *.gif</titulo>ƒ Função substring() extrai qualquer fragmento de uma string 9 Parâmetros: a string fonte, posição de deslocamento, número de caracteres a extrair //paragrafo[substring(.,13,5)="XPath"] 5 caracteres <paragrafo>A linguagem XPath</paragrafo> ---------13 <paragrafo>Este parágrafo com XPath não é recuperado</paragrafo>
  28. 28. Tratamento de Númerosƒ Função number() converte o valor do argumento para números. 9 Expressões booleanas são interpretadas como: • 1 para true • 0 para false
  29. 29. Tratamento de Númerosƒ Operadores + e - podem ser usados: 9 //nota[3] é equivalente a /nota[1 + 2]ƒ Função mod() 9 Fornece o resto de uma divisão truncada 9 Selecionar parágrafos pares: //paragrafo[position() mod 2 = 0]
  30. 30. Filtros Múltiplosƒ Usados para combinar um teste de posição e um outro tipo de teste 9 Selecionar nomes de companhias, e então extrair o terceiro nome da lista //nome[companhia][3] <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>
  31. 31. Filtros Múltiplosƒ Usados para combinar um teste de posição e um outro tipo de teste 9 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><pessoa>... </pessoa></nome> </nomes>
  32. 32. Testes de boleanosƒ Função boolean() avalia uma expressão e retorna um valor boleano. Se o argumento for: 9 Número: Retorna TRUE se for diferente de zero boolean(3) --> TRUE boolean(0) --> FALSE 9 Conjunto de nodos: Retorna TRUE se houver ao menos um nodo boolean(title) --> TRUE boolean() --> FALSE 9 String: Retorna TRUE se o tamanho da string for maior que zero boolean("algum texto") --> TRUE boolean("") --> FALSE
  33. 33. Outras funçõesƒ Comentários: 9 Selecione comentários que estejam dentro de livro //livro/comment()ƒ Instruções de processamento 9 Encontre instruções de processamento que estejam dentro do elemento livro //livro/processing-instruction()
  34. 34. Exercício 3ƒ Usando o mesmo documento XML, crie expressões XPath 1. Retorne todas as seções do artigo que possuem pelo menos um subelemento figura (use a função boolean) 2. Selecione as seções ímpares 3. Selecione as seções ímpares que possuem pelo menos um subelemento figura 4. Selecione os parágrafos que contêm uma instrução de processamento 5. Encontre autores que possuam "Ana" no nome. Não devem estar nas referencias bibliográficas. 6. A versão do artigo 7. Selecione o parágrafo que tenha ambos os atributos "numero" e "tipo" 8. Nome do(s) autor(res) da bibliografia cujo titulo da obra é "Union Types for Semistructured Data ". 9. Selecione o ano da publicação de bibliografias, cujo nome do autor contenha a palavra "Abiteboul"
  35. 35. Exercício 3 10. Um parágrafo cujo tamanho da string que ele contém é 27 11. Selecione o terceiro parágrafo de uma seção 12. Selecione um parágrafo que contenha o nome do segundo autor do artigo e sua instituição. Entre estes dois dados existe a string "from“ 13. Selecione todo e qualquer parágrafo que tenha a string "two years". Trate o uso de maiúsculas e minúsculas!! 14. Selecionar seções que contenham somente dois parágrafos 15. Selecione os elementos "ano" descendentes de bibliografia 16. Encontre a instrução de processamento de algum elemento paragrafo.
  36. 36. Resumo das funções, XPath 1.0 Tabela baseada nas funções apresentadas na página da W3C9 Funções para nodos (elementos) Nome Sintaxe Descrição count() count(node-set) = number Retorna o número de nodos de um node-set id() id(value) = node-set Seleciona elementos pelo seu ID único last() last() = number Retorna o número da posição do ultimo nodo em uma lista de nodos processados local-name() local-name(node)= string Retorna a parte local de um nodo. Um nodo geralmente consiste de um prefixo, uma vírgula e seguida de um nome local name() name(node) = string Retorna o nome de um nodo namespace-uri() namespace-uri(node) = uri Retorna a URI da namespace de um nodo específico position() position() = number Retorna a posição em uma lista de nodos do nodo que está sendo processado
  37. 37. Resumo das funções, XPath 1.0 Tabela baseada nas funções apresentadas na página da W3C9 Funções para string Nome Sintaxe e Exemplo Descrição concat() string=concat(val1, val2, ..) Retorna a concatenação de todos Exemplo: os seus argumentos concat(The, ,XML) Resultado: The XML contains() bool=contains(val,substr) Retorna true se a segunda string Exemplo: está contida na primeira contains(XML,X) Resultado: true normalize- string=normalize- Normaliza os espaços em space() space(string) broncos para um só Exemplo: normalize-space( The XML ) Resultado: The XML starts-with() bool=starts- Retorna true se a primeira string with(string,substr) inicia com a segunda Exemplo: starts-with(XML,X) Resultado: true string() string(value) Converte o valor do argumento Exemplo: para string string(314) Resultado: 314
  38. 38. Resumo das funções, XPath 1.0 Tabela baseada nas funções apresentadas na página da W3C9 Funções para string Nome Sintaxe e Exemplo Descrição string- number=string-length(string) Retorna o número de length() Exemplo: caracteres em uma string string-length(Beatles) Resultado: 7 substring() string=substring(string,start,length) Retorna a parted a string Exemplo: indicada nos argumentos substring(Beatles,1,4) Resultado: Beat substring- string=substring-after(string,substr) Retorna a parte da string after() Exemplo: que está depois do substring-after(12/10,/) argumento substr Resultado: 10 substring- string=substring-before(string,substr) Retorna a parted a string before() Exemplo: que está antes do substring-before(12/10,/) argumento substr Resultado: 12 translate() string=translate(value,string1,string2) Executa reposição Exemplo: character a character. translate(12:30,30,45) Resultado: 12:45 translate(12:30,03,54) Resultado: 12:45 translate(12:30,0123,abcd) Resultado: bc:da
  39. 39. Resumo das funções, XPath 1.0 Tabela baseada nas funções apresentadas na página da W3C9 Funções para numéricosNome Sintaxe e Exemplo Descriçãoceiling() ceiling(number) = number Retorna o menor inteiro que não pe Exemplo: menor do que o argumento ceiling(3.14) Resultado: 4floor() floor(number) = number Retorna o maior inteiro que não é maior Exemplo: do que o argumento floor(3.14) Resultado: 3number() number(value) = number Converte o valor do argumento para um Exemplo: numérico number(100) Resultado: 100round() round(number)= integer Arredonda o argumento ao inteiro mais Exemplo: próximo round(3.14) Resultado: 3sum() sum(nodeset)=number Retorna o valor total de um conjunto Exemplo: numérico de valores em um node-set sum(/cd/price)
  40. 40. Resumo das funções, XPath 1.0 Tabela baseada nas funções apresentadas na página da W3C9 Funções booleanas Nome Sintaxe e Exemplo Descrição boolean() bool=boolean(value) Converte o argumento e retorna true ou false false() false() Retorna false Exemplo: number(false()) Resultado: 0 lang() bool=lang(language) Retorna true se a linguagem do argumento casa com a linguagem do elemento xsl:lang not() bool=not(condition) Retorna true se a condição de argumento for falsa, e falsa se a Exemplo: condição for verdadeira not(false()) true() true() Retorna true Exemplo: number(true()) Resultado: 1
  41. 41. Xpath e Javaƒ Java tem um pacote para lidar com expressões XPath 9 javax.xml.xpath 9 Documentação: http://java.sun.com/j2se/1.5.0/docs/api/javax/xml/xpath/pa ckage-summary.html

×