XPath • Encontrar os elementos através de caminhos que indiquem o contexto de tais elementos • Para chegar a um elemento: – Como em URL: • Uso de caminho absoluto – Especificar toda a hierarquia de elementos de uma árvore XML, desde a raiz • Uso de caminho relativo – Especificar, em qualquer ponto do caminho, elementos relativos ao elemento contexto XPath • XPath usa expressões – Strings com símbolos significativos; – Identificar o elemento titulo que é filho direto de um elemento livro: livro/titulo String com símbolo significativo “/” XPath - Expressões • Expressão é uma string de texto – 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 – atributos, comentários, instruções de processamento, ou seqüência de texto entre elementos • São usadas em diferentes maneiras, para diferentes propósitos. Caminhos Absolutos e Relativos • Exemplo: <curriculo> <curriculo> <dados> <dados> <dados> <nome> <nome> </nome> </nome> <cpf> </cpf> Expressão XPath: <fone> </fone> </dados> /curriculo /dados/nome/../.. /experiencia <experiencia> <profissional> <experiencias> <ano>1996</ano> Absoluto – desde a raiz Relativo – a “nome” <cargo>Analista</cargo> <experiencias> </profissional> <academica> ... </academica> </experiencia> </curriculo> Caminhos absolutos • Usado quando quer selecionar algo, independente do contexto corrente – Para indicar a raiz do documento, usa-se “/” /livro/titulo – Selecionar ocorrências de um elemento cujos antecessores não importa, usa-se “//” //para Filtros • Usados para remover itens indesejados de uma lista – Selecionar todos os parágrafos de todos os capítulos. /livro/capitulo/paragrafo – Um filtro pode ser usado para selecionar um elemento que está em uma posição determinada • Selecionar o primeiro parágrafo do capítulo /livro/capitulo/paragrafo[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. Testes de posição • Função position() retorna a localização sequencial do elemento testado paragrafo[position()=1] ou paragrafo[1] • Função last() localiza o último elemento paragrafo[last()] • Função count() descobre quantas ocorrências de um elemento particular há no documento nota[count(paragrafo)=1] Testes de elementos • Selecionar um elemento, indicando o filho – Selecionar um elemento nota se ele contém diretamente um elemento tituto nota[titulo] • Testar o valor de um elemento: – Selecionar a nota cujo titulo seja “Nota inicial” nota[titulo=”Nota inicial”] Testes de atributos • O 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'] Testes de boleanos • Função not() para reverter o resultado do teste – Selecionar todas as notas, exceto a terceira: nota[not(position()=3)] – Selecionat uma nota que não contém um elemento titulo: nota[not(titulo)] – Selecionar todos os capítulos, exceto aquele que tenha o atributo numero com valor 10: capitulo[not[@numero='10']] Comparações • Comparar dois números paragrafo[position()=3] • Comparar expressões booleanas e strings paragrafo[titulo=”primeiro paragrafo"] • Selecionar todos paragraf, 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] Tratamento de Strings • Função contains() retorna true se a string contém o texto dado – Usando “text()”, testa somente o texto do elemento • Selecionar titulo que contenha a palavra “relacional” titulo[contains(text(), ”relacional")] <titulo>Modelo relacional</titulo> – Usando “.”, testa o elemento secao e seus subelementos • 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> Tratamento de Strings • Função starts-with() texta o texto no começo da string. Não pode haver espaço em branco. – 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! Tratamento de Strings • Função string() converte o valor do argumento para string – Exemplo: string(nota[2]) Retorna o valor em caracter “2” • Função normalize-space() – remove espaços no início e final – reduz vários espaços em branco para um único caractere espaço titulo[contains(normalize-space(.), ”Introdução a JSP")] <titulo> Introdução a JSP </titulo> Tratamento de Strings • Função concat() concatena strings. Pode ter um ou mais parâmetros: Concat(text1, texto2,..., textn) – Retornar a seção que fale da autora do livro //secao[contains(text(),concat (,/../../nome[text()], /../../sobrenome[text()]))] <livro> <autor> <nome>Ana</nome> <sobrenome>Silva</sobrenome> </autor> <secao> A autora Ana Silva ...</secao> <secao> ... </secao> </livro> Tratamento de Strings • Função translate() converte caracteres de acordo com um esquema de mapeamento. – Uso: comparações case-insensitive – Parâmetros: string para converter, caracteres para modificar no texto fonte, e valores a serem colocados paragrafo[contains(translate(normalize-space(.), "abcdefghijklmnopqrstuvwxyz", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"), ”ELEMENTO")] <paragrafo>EM XML, UM ELEMENTO É ...</paragrafo> <paragrafo>Um documento XML deve possuir um elemento raiz ...</paragrafo> • os dois elementos paragrafo são recuperados O que está em minúsculo é trocado pelo maiúsculo. O que está em maiúsculo é comparado normalmente 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 – 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> Tratamento de Strings • Função substring-after() extrai texto do final da string – 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 – 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> Tratamento de Números • Função number() converte o valor do argumento para números. – Expressões booleanas são interpretadas como: • 1 para true • 0 para false • Função round() – Converte reais para o inteiro mais próximo equivalente • Função floor() – Converte reais para o inteiro inferior mais próximo equivalente Tratamento de Números • Função ceiling() – Converte reais para o inteiro superior mais próximo equivalente • Operadores + e - podem ser usados: – nota[3] é equivalente a nota[1 + 2] • Função mod() – Fornece o resto de uma divisão truncada – Selecionar parágrafos pares: paragrafo[position() mod 2 = 0] Outras funções • Comentários: – Selecione comentários que estejam dentro de livro //livro/comment() • Instruções de processamento – Encontre instruções de processamento que estejam dentro do elemento pessoa //livro/processing-instruction() Resumo das funções, XPath 1.0 Tabela baseada nas funç funções apresentadas na pá página da W3C Funções para nodos (elementos) Nome count() Sintaxe Descrição count(node-set) = number id() id(value) = node-set last() last() = number local-name() local-name(node)= string name() namespace-uri() name(node) = string namespace-uri(node) = uri position() position() = number Retorna o número de nodos de um node-set Seleciona elementos pelo seu ID único Retorna o número da posição do ultimo nodo em uma lista de nodos processados Retorna a parte local de um nodo. Um nodo geralmente consiste de um prefixo, uma vírgula e seguida de um nome local Retorna o nome de um nodo Retorna a URI da namespace de um nodo específico Retorna a posição em uma lista de nodos do nodo que está sendo processado Resumo das funções, XPath 1.0 Tabela baseada nas funç funções apresentadas na pá página da W3C Nome Funções Sintaxe para string e Exemplo concat() contains() normalizespace() starts-with() string() 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' Descrição Retorna a concatenação de todos os seus argumentos Retorna true se a segunda string está contida na primeira Normaliza os espaços em broncos para um só Retorna true se a primeira string inicia com a segunda Converte o valor do argumento para string Resumo das funções, XPath 1.0 Tabela baseada nas funç funções apresentadas na pá página da W3C Nome Sintaxe Funções parae Exemplo string stringlength() substring() substringafter() substringbefore() translate() 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' Descrição Retorna o número de caracteres em uma string Retorna a parted a string indicada nos argumentos Retorna a parte da string que está depois do argumento substr Retorna a parted a string que está antes do argumento substr Executa reposição character a character. Resumo das funções, XPath 1.0 Tabela baseada nas funç funções apresentadas na pá página da W3C Nome ceiling() floor() number() round() sum() Funções para numéricos Sintaxe e Exemplo ceiling(number) = number Exemplo: ceiling(3.14) Resultado: 4 floor(number) = number Exemplo: floor(3.14) Resultado: 3 number(value) = number Exemplo: number('100') Resultado: 100 round(number)= integer Exemplo: round(3.14) Resultado: 3 sum(nodeset)=number Exemplo: sum(/cd/price) Descrição Retorna o menor inteiro que não pe menor do que o argumento Retorna o maior inteiro que não é maior do que o argumento Converte o valor do argumento para um numérico Arredonda o argumento ao inteiro mais próximo Retorna o valor total de um conjunto numérico de valores em um node-set Resumo das funções, XPath 1.0 Tabela baseada nas funç funções apresentadas na pá página da W3C Funções booleanas Sintaxe e Exemplo Nome boolean() bool=boolean(value) false() false() lang() Exemplo: number(false()) Resultado: 0 bool=lang(language) not() bool=not(condition) true() Exemplo: not(false()) true() Exemplo: number(true()) Resultado: 1 Descrição Converte o argumento e retorna true ou false Retorna false Retorna true se a linguagem do argumento casa com a linguagem do elemento xsl:lang Retorna true se a condição de argumento for falsa, e falsa se a condição for verdadeira Retorna true