Notes
Slide Show
Outline
1
XPath
  • Processamento Estruturado de Documentos 2003
  • By jcr
2
Motivação
  • Todos os processos de transformação/formatação de documentos XML começam por construir uma árvore: a árvore documental abstracta
  • O XPath permite-nos navegar nessa árvore e manipular os seus elementos
3
Introdução
  • O XPath foi desenvolvido para ser utilizado como valor dum atributo num documento XML.
  • A sua sintaxe é uma mistura da linguagem de expressões com a linguagem para a especificação do caminho numa estrutura de directorias como a usada nos sistemas Unix ou Windows
  •  Adicionalmente, o XPath fornece ainda um conjunto de funções para manipulação de texto, Namespaces, e outras ...
4
O Modelo de Dados do XPath
  • Do ponto de vista do XPath, um documento XML é uma ADA, uma árvore de nodos.
  • Para o XPath há sete tipos de nodos:
    • o nodo raiz (um por documento)
    • nodos elemento
    • nodos atributo
    • nodos texto
    • nodos comentário
    • nodos instrução de processamento
    • nodos Namespace
5
Exemplo: instância do poema
6
Exemplo: nodo raiz
7
Exemplo: nodos elemento
8
Exemplo: nodos atributo
9
Exemplo: nodos texto
10
Endereçamento
  • A sintaxe básica do XPath é muito semelhante à do endereçamento de ficheiros num sistema operativo. Se o endereço começar por / , então estaremos perante um endereço absoluto.


11
Endereçamento (exemplo1)
12
Endereçamento (exemplo2)
13
Endereçamento (exemplo3)
14
Descendência
15
Descendência (exemplo1)
16
Descendência (exemplo2)
17
*
18
* (exemplo1)
19
* (exemplo2)
20
* (exemplo3)
21
Exercício
  • Arquivo de Música de Ernesto Veiga de Oliveira
22
Documento XML exemplo
23
Exercício: queries
  • Todos os títulos das obras registadas no arquivo.
  • A lista de todas as províncias de onde as músicas são provenientes.
  • O valor de todos os atributos “t” de elementos “file” em qualquer ponto do documento.
24
Predicados
25
Predicados (exemplo1)
26
Predicados (exemplo2)
27
Atributos
28
Atributos (exemplo1)
29
Atributos (exemplo2)
30
Atributos (exemplo3)
31
Atributos (exemplo4)
32
Valores de Atributos
  • O valor dum atributo pode ser usado como critério de selecção.
  • A função normalize-space retira os caracteres brancos inciais e finais duma string e substitui as cadeias brancas por um espaço.
33
Valores de Atributos (exemplo1)
34
Valores de Atributos (exemplo2)
35
Valores de Atributos (exemplo3)
36
Funções: count
37
count (exemplo1)
38
count (exemplo2)
39
count (exemplo3)
40
Funções: name
  • A função name retorna o nome do elemento seleccionado.
  • A função starts-with recebe dois argumentos do tipo string e retorna verdadeiro se o primeiro argumento inicia com o segundo.
  • A função contains recebe dois argumentos do tipo string e retorna verdadeiro se o primeiro argumento contém o segundo.


41
name (exemplo1)
42
name (exemplo2)
43
name (exemplo3)
44
Funções: string-length
  • A função string-length retorna o número  de caracteres na string argumento.
  • Para os operadores relacionais é necessário usar as seguintes substituições:
    • &lt; para <
    • &gt; para >

45
string-length (exemplo1)
46
string-length (exemplo2)
47
string-length (exemplo3)
48
Combinação de endereços
  • Vários selectores poderão ser combinados com o operador ‘|’ com o significado de serem alternativos.
49
Combinação de end. (exemplo1)
50
Combinação de end. (exemplo2)
51
Combinação de end. (exemplo3)
52
Exercício: qual o significado?
  • //doc/tit[contains(.,'Vila Verde')]
  • //doc[local='Castelo Branco']/inst
  • //inst
  • //ref/@tipo
  • //@*
  • //file[@t = ‘MP3’]
53
“Axis”: travessia da árvore
  • O operador ‘::’ permite indicar o tipo de travessia que se faz à árvore documental.
  • Por omissão, é utilizado o “axis” child (child::) o que leva a uma travessia dos filhos e por aí adiante.
  • Os outros tipos de “axis” são:


54
child:: (exemplo1)
55
child:: (exemplo2)
56
child:: (exemplo3)
57
descendant:: (exemplo1)
58
descendant:: (exemplo2)
59
descendant:: (exemplo3)
60
descendant:: (exemplo4)
61
parent:: (exemplo1)
62
ancestor:: (exemplo1)
63
ancestor:: (exemplo2)
64
following-sibling:: (exemplo1)
65
following-sibling:: (exemplo2)
66
preceding-sibling:: (exemplo1)
67
preceding-sibling:: (exemplo2)
68
following:: (exemplo1)
69
following:: (exemplo2)
70
preceding:: (exemplo1)
71
preceding:: (exemplo2)
72
descendant-or-self:: (exemplo1)
73
descendant-or-self :: (exemplo2)
74
ancestor-or-self:: (exemplo1)
75
ancestor-or-self :: (exemplo2)
76
Exercício
  • Pegando na árvore do poema e centrando a referência na primeira quadra: quadra[1], calcule os seguintes conjuntos de nodos:
    • quadra[1]/ancestor*
    • quadra[1]/descendant*
    • quadra[1]/preceding*
    • quadra[1]/following*
    • quadra[1]/self*