SlideShare uma empresa Scribd logo
1 de 77
31 de Outubro de jcr – ped2005
XPath
Processamento Estruturado de
Documentos 2005
By jcr
31 de Outubro de jcr – ped2005
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
31 de Outubro de jcr – ped2005
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 ...
31 de Outubro de jcr – ped2005
Índice Remissivo de Conteúdos
1. Modelo de Dados
2. Endereçamento
3. Descendência
4. Selector universal (*)
5. Exercício
6. Predicados
7. Atributos
8. Valores de Atributos
9. Funções (count)
10. Funções (name)
11. Funções (string-length)
12. Combinação de endereços
13. Exercício
14. Eixos de Navegação
31 de Outubro de jcr – ped2005
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:
1. o nodo raiz (um por documento)
2. nodos elemento
3. nodos atributo
4. nodos texto
5. nodos comentário
6. nodos instrução de processamento
7. nodos Namespace
31 de Outubro de jcr – ped2005
Exemplo: instância do poema
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Poema anotado de acordo com poema.xsd -->
<poema tipo="soneto">
<titulo>"Soneto Já Antigo"</titulo>
<autor>(Álvaro de Campos)</autor>
<corpo>
<quadra>
<verso>Olha, <nome>Daisy</nome>: quando eu morrer
tu hás-de</verso>
...
</quadra>
<terno>
<verso>embora não o saibas, que morri...</verso>
...
</terno>
</corpo>
<data>(1922)</data>
</poema>
31 de Outubro de jcr – ped2005
Exemplo: nodo raiz
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Poema anotado de acordo com poema.xsd -->
<poema tipo="soneto">
<titulo>"Soneto Já Antigo"</titulo>
<autor>(Álvaro de Campos)</autor>
<corpo>
<quadra>
<verso>Olha, <nome>Daisy</nome>: quando eu morrer
tu hás-de</verso>
...
</quadra>
<terno>
<verso>embora não o saibas, que morri...</verso>
...
</terno>
</corpo>
<data>(1922)</data>
</poema>
/
poema<?xml version ... <!-- Poema ...
restantes nodos
31 de Outubro de jcr – ped2005
Exemplo: nodos elemento
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Poema anotado de acordo com poema.xsd -->
<poema tipo="soneto">
<titulo>"Soneto Já Antigo"</titulo>
<autor>(Álvaro de Campos)</autor>
<corpo>
<quadra>
<verso>Olha, <nome>Daisy</nome>: quando eu morrer
tu hás-de</verso>
...
</quadra>
<terno>
<verso>embora não o saibas, que morri...</verso>
...
</terno>
</corpo>
<data>(1922)</data>
</poema>
poema
titulo
autor
corpo
quadra
verso
terno
nome
lugar
data
verso = “Olha, Daisy: quando eu morrer ...”
31 de Outubro de jcr – ped2005
Exemplo: nodos atributo
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Poema anotado de acordo com poema.xsd -->
<poema tipo="soneto">
<titulo>"Soneto Já Antigo"</titulo>
<autor>(Álvaro de Campos)</autor>
<corpo>
<quadra>
<verso>Olha, <nome>Daisy</nome>: quando eu morrer
tu hás-de</verso>
...
</quadra>
<terno>
<verso>embora não o saibas, que morri...</verso>
...
</terno>
</corpo>
<data>(1922)</data>
</poema>
tipo
poema
tipo
elementos filho
31 de Outubro de jcr – ped2005
Exemplo: nodos texto
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Poema anotado de acordo com poema.xsd -->
<poema tipo="soneto">
<titulo>"Soneto Já Antigo"</titulo>
<autor>(Álvaro de Campos)</autor>
<corpo>
<quadra>
<verso>Olha, <nome>Daisy</nome>: quando eu morrer
tu hás-de</verso>
...
</quadra>
<terno>
<verso>embora não o saibas, que morri...</verso>
...
</terno>
</corpo>
<data>(1922)</data>
</poema>
nome
“Daisy”
31 de Outubro de jcr – ped2005
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.
31 de Outubro de jcr – ped2005
Endereçamento (exemplo1)
/AAA
<AAA>
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC/>
</AAA>
Selecciona o elemento raíz AAA.
31 de Outubro de jcr – ped2005
Endereçamento (exemplo2)
/AAA/CCC
<AAA>
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC/>
</AAA>
Selecciona os elementos CCC que são
filhos do elemento raíz AAA.
31 de Outubro de jcr – ped2005
Endereçamento (exemplo3)
/AAA/DDD/BBB
<AAA>
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC/>
</AAA>
Selecciona os elementos BBB que são
filhos de elementos DDD que, por sua vez
são filhos do elemento raíz AAA.
31 de Outubro de jcr – ped2005
Descendência
Se o endereço começar por //, então todos os elementos no
documento que respeitarem a selecção que vem a seguir serão
seleccionados.
31 de Outubro de jcr – ped2005
Descendência (exemplo1)
//BBB
<AAA>
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC/>
</AAA>
Selecciona todos os elementos BBB.
31 de Outubro de jcr – ped2005
Descendência (exemplo2)
//DDD/BBB
<AAA>
<BBB/>
<CCC/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC>
<DDD>
<BBB/>
<BBB/>
</DDD>
</CCC>
</AAA>
Selecciona todos os elementos BBB filhos de
elementos DDD.
31 de Outubro de jcr – ped2005
*
O operador * selecciona todos os elementos abrangidos pelo
endereço precedente.
31 de Outubro de jcr – ped2005
* (exemplo1)
/AAA/CCC/DDD/* Selecciona todos os elementos com
contexto: /AAA/CCC/DDD.<AAA>
<XXX>
<DDD>
<BBB/>
<BBB/>
<EEE/>
<FFF/>
</DDD>
</XXX>
<CCC>
<DDD>
<BBB/>
<BBB/>
<EEE/>
<FFF/>
</DDD>
</CCC>
<CCC>
<BBB>
<BBB>
<BBB/>
</BBB>
</BBB>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
* (exemplo2)
/*/*/*/BBB Selecciona todos os elementos BBB com 3
gerações ancestrais.<AAA>
<XXX>
<DDD>
<BBB/>
<BBB/>
<EEE/>
<FFF/>
</DDD>
</XXX>
<CCC>
<DDD>
<BBB/>
<BBB/>
<EEE/>
<FFF/>
</DDD>
</CCC>
<CCC>
<BBB>
<BBB>
<BBB/>
</BBB>
</BBB>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
* (exemplo3)
//* Selecciona todos os elementos.
<AAA>
<XXX>
<DDD>
<BBB/>
<BBB/>
<EEE/>
<FFF/>
</DDD>
</XXX>
<CCC>
<DDD>
<BBB/>
<BBB/>
<EEE/>
<FFF/>
</DDD>
</CCC>
<CCC>
<BBB>
<BBB>
<BBB/>
</BBB>
</BBB>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
Exercício
• Arquivo de Música de Ernesto Veiga de
Oliveira
31 de Outubro de jcr – ped2005
Documento XML exemplo
<?xml version="1.0" encoding="ISO-8859-1"?>
<arq>
<doc>
<prov>Alentejo</prov>
<local>Santa Vitória, Beja</local>
<tit>Murianos é bom povo</tit>
<musico>Jorge Montes Caranova (viola campaniça)</musico>
<obs>Partitura, versão curta
<file t="SWA">audiocurswa/0403evo0.swa</file>
<file t="MP3">audiocurmp3/0403evo0.mp3</file> (0'34'')
<intxt>Viola campaniça</intxt>
</obs>
<file t="MP3">d1/evo002.mp3</file>
<duracao>1:10</duracao>
</doc>
...
31 de Outubro de jcr – ped2005
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.
31 de Outubro de jcr – ped2005
Predicados
•Em XPath uma expressão dentro de [] designa-se por
predicado.
•Um predicado visa especificar ainda mais um dado
elemento: testanto a sua posição na árvore, o seu
conteúdo, ...
•Se a expressão fôr constituída por apenas um número
selecciona o elemento pela posição no seu nível.
•O predicado last() testa se o elemento é o último do seu
nível.
31 de Outubro de jcr – ped2005
Predicados (exemplo1)
/AAA/BBB[1]
<AAA>
<BBB/>
<BBB/>
<BBB/>
<BBB/>
</AAA>
Selecciona o primeiro elemento BBB
filho de AAA.
31 de Outubro de jcr – ped2005
Predicados (exemplo2)
/AAA/BBB[last()]
<AAA>
<BBB/>
<BBB/>
<BBB/>
<BBB/>
</AAA>
Selecciona o último elemento BBB
filho de AAA.
31 de Outubro de jcr – ped2005
Atributos
Os atributos são especificados pelo prefixo @.
31 de Outubro de jcr – ped2005
Atributos (exemplo1)
//BBB[@ident]
<AAA>
<BBB ident="b1"/>
<BBB ident="b2"/>
<BBB name="bbb"/>
<BBB/>
</AAA>
Selecciona os elementos BBB
que têm o atributo ident especificado.
31 de Outubro de jcr – ped2005
Atributos (exemplo2)
//BBB[@nome]
<AAA>
<BBB ident="b1"/>
<BBB ident="b2"/>
<BBB nome="bbb"/>
<BBB/>
</AAA>
Selecciona os elementos BBB
que têm o atributo nome especificado.
31 de Outubro de jcr – ped2005
Atributos (exemplo3)
//BBB[@*]
<AAA>
<BBB ident="b1"/>
<BBB ident="b2"/>
<BBB nome="bbb"/>
<BBB/>
</AAA>
Selecciona os elementos BBB
que têm um atributo especificado.
31 de Outubro de jcr – ped2005
Atributos (exemplo4)
//BBB[not(@*)]
<AAA>
<BBB ident="b1"/>
<BBB ident="b2"/>
<BBB nome="bbb"/>
<BBB/>
</AAA>
Selecciona os elementos BBB
que não têm nenhum atributo.
31 de Outubro de jcr – ped2005
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.
31 de Outubro de jcr – ped2005
Valores de Atributos (exemplo1)
//BBB[@ident=“b1”]
<AAA>
<BBB ident="b1"/>
<BBB ident="b2"/>
<BBB name="bbb"/>
<BBB/>
</AAA>
Selecciona os elementos BBB que têm
o atributo ident com valor igual a b1.
31 de Outubro de jcr – ped2005
Valores de Atributos (exemplo2)
//BBB[@nome=“bbb”]
<AAA>
<BBB ident="b1"/>
<BBB ident="b2"/>
<BBB nome="bbb"/>
<BBB nome=“ bbb "/>
<BBB/>
</AAA>
Selecciona os elementos BBB que
têm o atributo nome com valor igual
a bbb.
31 de Outubro de jcr – ped2005
Valores de Atributos (exemplo3)
//BBB[normalize-space(@nome)=“bbb”]
<AAA>
<BBB ident="b1"/>
<BBB ident="b2"/>
<BBB nome="bbb"/>
<BBB nome=“ bbb "/>
<BBB/>
</AAA>
Selecciona os elementos BBB que têm o atributo nome com
valor igual a bbb (filtrando espaços iniciais e finais).
31 de Outubro de jcr – ped2005
Funções: count
A função count dá como resultado o número de elementos
resultantes da aplicação do selector que lhe fôr passado como
argumento.
31 de Outubro de jcr – ped2005
count (exemplo1)
//*[count(BBB)=2]
<AAA>
<CCC>
<BBB/>
<BBB/>
<BBB/>
</CCC>
<DDD>
<BBB/>
<BBB/>
</DDD>
<EEE>
<CCC/>
<DDD/>
</EEE>
</AAA>
Selecciona todos os elementos que
tenham dois filhos BBB.
31 de Outubro de jcr – ped2005
count (exemplo2)
//*[count(*)=2]
<AAA>
<CCC>
<BBB/>
<BBB/>
<BBB/>
</CCC>
<DDD>
<BBB/>
<BBB/>
</DDD>
<EEE>
<CCC/>
<DDD/>
</EEE>
</AAA>
Selecciona todos os elementos que
tenham dois filhos.
31 de Outubro de jcr – ped2005
count (exemplo3)
//*[count(*)=3]
<AAA>
<CCC>
<BBB/>
<BBB/>
<BBB/>
</CCC>
<DDD>
<BBB/>
<BBB/>
</DDD>
<EEE>
<CCC/>
<DDD/>
</EEE>
</AAA>
Selecciona todos os elementos que
tenham três filhos.
31 de Outubro de jcr – ped2005
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.
31 de Outubro de jcr – ped2005
name (exemplo1)
//*[name()= BBB]
<AAA>
<BCC>
<BBB/>
<BBB/>
<BBB/>
</BCC>
<DDB>
<BBB/>
<BBB/>
</DDB>
<BEC>
<CCC/>
<DBD/>
</BEC>
</AAA>
Selecciona todos os elementos que
tenham nome igual a BBB.
31 de Outubro de jcr – ped2005
name (exemplo2)
//*[starts-with(name(), ‘B’)]
<AAA>
<BCC>
<BBB/>
<BBB/>
<BBB/>
</BCC>
<DDB>
<BBB/>
<BBB/>
</DDB>
<BEC>
<CCC/>
<DBD/>
</BEC>
</AAA>
Selecciona todos os
elementos que tenham nome
iniciado por B.
31 de Outubro de jcr – ped2005
name (exemplo3)
//*[contains(name(),‘C’)]
<AAA>
<BCC>
<BBB/>
<BBB/>
<BBB/>
</BCC>
<DDB>
<BBB/>
<BBB/>
</DDB>
<BEC>
<CCC/>
<DBD/>
</BEC>
</AAA>
Selecciona todos os
elementos cujo nome contém
a letra C.
31 de Outubro de jcr – ped2005
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 >
31 de Outubro de jcr – ped2005
string-length (exemplo1)
//*[string-length(name())=3]
<AAA>
<Q/>
<SSSS/>
<BB/>
<CCC/>
<DDDDDDDD/>
<EEEE/>
</AAA>
Selecciona todos os elementos
que tenham o nome
constituído por 3 caracteres.
31 de Outubro de jcr – ped2005
string-length (exemplo2)
//*[string-length(name()) &lt; 3]
<AAA>
<Q/>
<SSSS/>
<BB/>
<CCC/>
<DDDDDDDD/>
<EEEE/>
</AAA>
Selecciona todos os elementos que
tenham o nome constituído por menos
de 3 caracteres.
31 de Outubro de jcr – ped2005
string-length (exemplo3)
//*[string-length(name()) &gt; 3]
<AAA>
<Q/>
<SSSS/>
<BB/>
<CCC/>
<DDDDDDDD/>
<EEEE/>
</AAA>
Selecciona todos os elementos que
tenham o nome constituído por mais
de 3 caracteres.
31 de Outubro de jcr – ped2005
Combinação de endereços
• Vários selectores poderão ser combinados
com o operador ‘|’ com o significado de
serem alternativos.
31 de Outubro de jcr – ped2005
Combinação de end. (exemplo1)
//BBB | //CCC
<AAA>
<BBB/>
<CCC/>
<DDD>
<CCC/>
</DDD>
<EEE/>
</AAA>
Selecciona todos os elementos BBB
e CCC.
31 de Outubro de jcr – ped2005
Combinação de end. (exemplo2)
//BBB | /AAA/EEE
<AAA>
<BBB/>
<CCC/>
<DDD>
<CCC/>
</DDD>
<EEE/>
</AAA>
Selecciona todos os elementos BBB
e os elementos EEE filhos de AAA.
31 de Outubro de jcr – ped2005
Combinação de end. (exemplo3)
//BBB | /AAA/EEE | /AAA | //DDD/CCC
<AAA>
<BBB/>
<CCC/>
<DDD>
<CCC/>
</DDD>
<EEE/>
</AAA>
O número de combinações é
ilimitado.
31 de Outubro de jcr – ped2005
Exercício: qual o significado?
• //doc/tit[contains(.,'Vila Verde')]
• //doc[local='Castelo Branco']/inst
• //inst
• //ref/@tipo
• //@*
• //file[@t = ‘MP3’]
31 de Outubro de jcr – ped2005
“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:
1. descendant
2. parent
3. ancestor
4. following-sibling
5. preceding-sibling
6. following
7. preceding
8. descendant-or-self
9. ancestor-or-self
31 de Outubro de jcr – ped2005
child:: (exemplo1)
/AAA
<AAA>
<BBB/>
<CCC/>
</AAA>
Selecciona os elementos AAA
filhos da raíz.
/child::AAA
31 de Outubro de jcr – ped2005
child:: (exemplo2)
/AAA/BBB
<AAA>
<BBB/>
<CCC/>
</AAA>
Selecciona os elementos BBB
filhos de AAA.
/child::AAA/child::BBB
31 de Outubro de jcr – ped2005
child:: (exemplo3)
/AAA/BBB
<AAA>
<BBB/>
<CCC/>
</AAA>
O operador pode ser colocado
em evidência.
/child::AAA/BBB
31 de Outubro de jcr – ped2005
descendant:: (exemplo1)
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
Selecciona os descendentes da raíz, logo
todos os nodos.
/descendant::*
<CCC>
<DDD>
<EEE>
<DDD>
<FFF/>
</DDD>
</EEE>
</DDD>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
descendant:: (exemplo2)
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
Selecciona os descendentes
de AAA/BBB.
/AAA/BBB/descendant::*
<CCC>
<DDD>
<EEE>
<DDD>
<FFF/>
</DDD>
</EEE>
</DDD>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
descendant:: (exemplo3)
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
Selecciona os nodos que têm
CCC como ancestral.
//CCC/descendant::*
<CCC>
<DDD>
<EEE>
<DDD>
<FFF/>
</DDD>
</EEE>
</DDD>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
descendant:: (exemplo4)
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
Selecciona os nodos DDD que
têm CCC como ancestral.
//CCC/descendant::*/DDD
<CCC>
<DDD>
<EEE>
<DDD>
<FFF/>
</DDD>
</EEE>
</DDD>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
parent:: (exemplo1)
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
Selecciona os elementos pai de
nodos DDD.
//DDD/parent::*
<CCC>
<DDD>
<EEE>
<DDD>
<FFF/>
</DDD>
</EEE>
</DDD>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
ancestor:: (exemplo1)
Selecciona os ancestrais
de ...EEE.
/AAA/BBB/DDD/CCC/EEE/ancestor::*
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
<CCC>
<DDD>
<EEE>
<DDD>
<FFF/>
</DDD>
</EEE>
</DDD>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
ancestor:: (exemplo2)
Selecciona os ancestrais de FFF.//FFF/ancestor*
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
<CCC>
<DDD>
<EEE>
<DDD>
<FFF/>
</DDD>
</EEE>
</DDD>
</CCC>
</AAA>
Exemplificar com as taxonomias
31 de Outubro de jcr – ped2005
following-sibling:: (exemplo1)
Selecciona os irmãos à
direita do nodo BBB.
/AAA/BBB/following-sibling::*
<AAA>
<BBB>
<CCC/>
<DDD/>
</BBB>
<XXX>
<DDD>
<EEE/>
<DDD/>
<CCC/>
<FFF/>
<FFF>
<GGG/>
</FFF>
</DDD>
</XXX>
<CCC>
<DDD/>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
following-sibling:: (exemplo2)
//CCC/following-sibling::*
<AAA>
<BBB>
<CCC/>
<DDD/>
</BBB>
<XXX>
<DDD>
<EEE/>
<DDD/>
<CCC/>
<FFF/>
<FFF>
<GGG/>
</FFF>
</DDD>
</XXX>
<CCC>
<DDD/>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
preceding-sibling:: (exemplo1)
Selecciona os irmãos à
esquerda do nodo XXX./AAA/XXX/preceding-sibling::*
<AAA>
<BBB>
<CCC/>
<DDD/>
</BBB>
<XXX>
<DDD>
<EEE/>
<DDD/>
<CCC/>
<FFF/>
<FFF>
<GGG/>
</FFF>
</DDD>
</XXX>
<CCC>
<DDD/>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
preceding-sibling:: (exemplo2)
//CCC/preceding-sibling::*
<AAA>
<BBB>
<CCC/>
<DDD/>
</BBB>
<XXX>
<DDD>
<EEE/>
<DDD/>
<CCC/>
<FFF/>
<FFF>
<GGG/>
</FFF>
</DDD>
</XXX>
<CCC>
<DDD/>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
following:: (exemplo1)
/AAA/XXX/following::*
<AAA>
<BBB>
<CCC/>
<ZZZ>
<DDD/>
<DDD>
<EEE/>
</DDD>
</ZZZ>
<FFF>
<GGG/>
</FFF>
</BBB>
<XXX>
<DDD>
<EEE/>
<DDD/>
<CCC/>
<FFF/>
<FFF>
<GGG/>
</FFF>
</DDD>
</XXX>
<CCC>
<DDD/>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
following:: (exemplo2)
//ZZZ/following::*
<AAA>
<BBB>
<CCC/>
<ZZZ>
<DDD/>
<DDD>
<EEE/>
</DDD>
</ZZZ>
<FFF>
<GGG/>
</FFF>
</BBB>
<XXX>
<DDD>
<EEE/>
<DDD/>
<CCC/>
<FFF/>
<FFF>
<GGG/>
</FFF>
</DDD>
</XXX>
<CCC>
<DDD/>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
preceding:: (exemplo1)
/AAA/XXX/preceding::*
<AAA>
<BBB>
<CCC/>
<ZZZ>
<DDD/>
</ZZZ>
</BBB>
<XXX>
<DDD>
<EEE/>
<DDD/>
<CCC/>
<FFF/>
<FFF>
<GGG/>
</FFF>
</DDD>
</XXX>
<CCC>
<DDD/>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
preceding:: (exemplo2)
//GGG/preceding::*
<AAA>
<BBB>
<CCC/>
<ZZZ>
<DDD/>
</ZZZ>
</BBB>
<XXX>
<DDD>
<EEE/>
<DDD/>
<CCC/>
<FFF/>
<FFF>
<GGG/>
</FFF>
</DDD>
</XXX>
<CCC>
<DDD/>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
descendant-or-self:: (exemplo1)
/AAA/XXX/descendant-or-self::*
<AAA>
<BBB>
<CCC/>
<ZZZ>
<DDD/>
</ZZZ>
</BBB>
<XXX>
<DDD>
<EEE/>
<DDD/>
<CCC/>
<FFF/>
<FFF>
<GGG/>
</FFF>
</DDD>
</XXX>
<CCC>
<DDD/>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
descendant-or-self :: (exemplo2)
//CCC/descendant-or-self::*
<AAA>
<BBB>
<CCC/>
<ZZZ>
<DDD/>
</ZZZ>
</BBB>
<XXX>
<DDD>
<EEE/>
<DDD/>
<CCC/>
<FFF/>
<FFF>
<GGG/>
</FFF>
</DDD>
</XXX>
<CCC>
<DDD/>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
ancestor-or-self:: (exemplo1)
/AAA/XXX/DDD/EEE/ancestor-or-self::*
<AAA>
<BBB>
<CCC/>
<ZZZ>
<DDD/>
</ZZZ>
</BBB>
<XXX>
<DDD>
<EEE/>
<DDD/>
<CCC/>
<FFF/>
<FFF>
<GGG/>
</FFF>
</DDD>
</XXX>
<CCC>
<DDD/>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
ancestor-or-self :: (exemplo2)
//GGG/ancestor-or-self::*
<AAA>
<BBB>
<CCC/>
<ZZZ>
<DDD/>
</ZZZ>
</BBB>
<XXX>
<DDD>
<EEE/>
<DDD/>
<CCC/>
<FFF/>
<FFF>
<GGG/>
</FFF>
</DDD>
</XXX>
<CCC>
<DDD/>
</CCC>
</AAA>
31 de Outubro de jcr – ped2005
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*

Mais conteúdo relacionado

Destaque

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 

Destaque (20)

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 

Tutorial sobre XPath

  • 1. 31 de Outubro de jcr – ped2005 XPath Processamento Estruturado de Documentos 2005 By jcr
  • 2. 31 de Outubro de jcr – ped2005 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. 31 de Outubro de jcr – ped2005 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. 31 de Outubro de jcr – ped2005 Índice Remissivo de Conteúdos 1. Modelo de Dados 2. Endereçamento 3. Descendência 4. Selector universal (*) 5. Exercício 6. Predicados 7. Atributos 8. Valores de Atributos 9. Funções (count) 10. Funções (name) 11. Funções (string-length) 12. Combinação de endereços 13. Exercício 14. Eixos de Navegação
  • 5. 31 de Outubro de jcr – ped2005 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: 1. o nodo raiz (um por documento) 2. nodos elemento 3. nodos atributo 4. nodos texto 5. nodos comentário 6. nodos instrução de processamento 7. nodos Namespace
  • 6. 31 de Outubro de jcr – ped2005 Exemplo: instância do poema <?xml version="1.0" encoding="iso-8859-1"?> <!-- Poema anotado de acordo com poema.xsd --> <poema tipo="soneto"> <titulo>"Soneto Já Antigo"</titulo> <autor>(Álvaro de Campos)</autor> <corpo> <quadra> <verso>Olha, <nome>Daisy</nome>: quando eu morrer tu hás-de</verso> ... </quadra> <terno> <verso>embora não o saibas, que morri...</verso> ... </terno> </corpo> <data>(1922)</data> </poema>
  • 7. 31 de Outubro de jcr – ped2005 Exemplo: nodo raiz <?xml version="1.0" encoding="iso-8859-1"?> <!-- Poema anotado de acordo com poema.xsd --> <poema tipo="soneto"> <titulo>"Soneto Já Antigo"</titulo> <autor>(Álvaro de Campos)</autor> <corpo> <quadra> <verso>Olha, <nome>Daisy</nome>: quando eu morrer tu hás-de</verso> ... </quadra> <terno> <verso>embora não o saibas, que morri...</verso> ... </terno> </corpo> <data>(1922)</data> </poema> / poema<?xml version ... <!-- Poema ... restantes nodos
  • 8. 31 de Outubro de jcr – ped2005 Exemplo: nodos elemento <?xml version="1.0" encoding="iso-8859-1"?> <!-- Poema anotado de acordo com poema.xsd --> <poema tipo="soneto"> <titulo>"Soneto Já Antigo"</titulo> <autor>(Álvaro de Campos)</autor> <corpo> <quadra> <verso>Olha, <nome>Daisy</nome>: quando eu morrer tu hás-de</verso> ... </quadra> <terno> <verso>embora não o saibas, que morri...</verso> ... </terno> </corpo> <data>(1922)</data> </poema> poema titulo autor corpo quadra verso terno nome lugar data verso = “Olha, Daisy: quando eu morrer ...”
  • 9. 31 de Outubro de jcr – ped2005 Exemplo: nodos atributo <?xml version="1.0" encoding="iso-8859-1"?> <!-- Poema anotado de acordo com poema.xsd --> <poema tipo="soneto"> <titulo>"Soneto Já Antigo"</titulo> <autor>(Álvaro de Campos)</autor> <corpo> <quadra> <verso>Olha, <nome>Daisy</nome>: quando eu morrer tu hás-de</verso> ... </quadra> <terno> <verso>embora não o saibas, que morri...</verso> ... </terno> </corpo> <data>(1922)</data> </poema> tipo poema tipo elementos filho
  • 10. 31 de Outubro de jcr – ped2005 Exemplo: nodos texto <?xml version="1.0" encoding="iso-8859-1"?> <!-- Poema anotado de acordo com poema.xsd --> <poema tipo="soneto"> <titulo>"Soneto Já Antigo"</titulo> <autor>(Álvaro de Campos)</autor> <corpo> <quadra> <verso>Olha, <nome>Daisy</nome>: quando eu morrer tu hás-de</verso> ... </quadra> <terno> <verso>embora não o saibas, que morri...</verso> ... </terno> </corpo> <data>(1922)</data> </poema> nome “Daisy”
  • 11. 31 de Outubro de jcr – ped2005 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.
  • 12. 31 de Outubro de jcr – ped2005 Endereçamento (exemplo1) /AAA <AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> Selecciona o elemento raíz AAA.
  • 13. 31 de Outubro de jcr – ped2005 Endereçamento (exemplo2) /AAA/CCC <AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> Selecciona os elementos CCC que são filhos do elemento raíz AAA.
  • 14. 31 de Outubro de jcr – ped2005 Endereçamento (exemplo3) /AAA/DDD/BBB <AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> Selecciona os elementos BBB que são filhos de elementos DDD que, por sua vez são filhos do elemento raíz AAA.
  • 15. 31 de Outubro de jcr – ped2005 Descendência Se o endereço começar por //, então todos os elementos no documento que respeitarem a selecção que vem a seguir serão seleccionados.
  • 16. 31 de Outubro de jcr – ped2005 Descendência (exemplo1) //BBB <AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA> Selecciona todos os elementos BBB.
  • 17. 31 de Outubro de jcr – ped2005 Descendência (exemplo2) //DDD/BBB <AAA> <BBB/> <CCC/> <BBB/> <DDD> <BBB/> </DDD> <CCC> <DDD> <BBB/> <BBB/> </DDD> </CCC> </AAA> Selecciona todos os elementos BBB filhos de elementos DDD.
  • 18. 31 de Outubro de jcr – ped2005 * O operador * selecciona todos os elementos abrangidos pelo endereço precedente.
  • 19. 31 de Outubro de jcr – ped2005 * (exemplo1) /AAA/CCC/DDD/* Selecciona todos os elementos com contexto: /AAA/CCC/DDD.<AAA> <XXX> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </XXX> <CCC> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </CCC> <CCC> <BBB> <BBB> <BBB/> </BBB> </BBB> </CCC> </AAA>
  • 20. 31 de Outubro de jcr – ped2005 * (exemplo2) /*/*/*/BBB Selecciona todos os elementos BBB com 3 gerações ancestrais.<AAA> <XXX> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </XXX> <CCC> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </CCC> <CCC> <BBB> <BBB> <BBB/> </BBB> </BBB> </CCC> </AAA>
  • 21. 31 de Outubro de jcr – ped2005 * (exemplo3) //* Selecciona todos os elementos. <AAA> <XXX> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </XXX> <CCC> <DDD> <BBB/> <BBB/> <EEE/> <FFF/> </DDD> </CCC> <CCC> <BBB> <BBB> <BBB/> </BBB> </BBB> </CCC> </AAA>
  • 22. 31 de Outubro de jcr – ped2005 Exercício • Arquivo de Música de Ernesto Veiga de Oliveira
  • 23. 31 de Outubro de jcr – ped2005 Documento XML exemplo <?xml version="1.0" encoding="ISO-8859-1"?> <arq> <doc> <prov>Alentejo</prov> <local>Santa Vitória, Beja</local> <tit>Murianos é bom povo</tit> <musico>Jorge Montes Caranova (viola campaniça)</musico> <obs>Partitura, versão curta <file t="SWA">audiocurswa/0403evo0.swa</file> <file t="MP3">audiocurmp3/0403evo0.mp3</file> (0'34'') <intxt>Viola campaniça</intxt> </obs> <file t="MP3">d1/evo002.mp3</file> <duracao>1:10</duracao> </doc> ...
  • 24. 31 de Outubro de jcr – ped2005 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.
  • 25. 31 de Outubro de jcr – ped2005 Predicados •Em XPath uma expressão dentro de [] designa-se por predicado. •Um predicado visa especificar ainda mais um dado elemento: testanto a sua posição na árvore, o seu conteúdo, ... •Se a expressão fôr constituída por apenas um número selecciona o elemento pela posição no seu nível. •O predicado last() testa se o elemento é o último do seu nível.
  • 26. 31 de Outubro de jcr – ped2005 Predicados (exemplo1) /AAA/BBB[1] <AAA> <BBB/> <BBB/> <BBB/> <BBB/> </AAA> Selecciona o primeiro elemento BBB filho de AAA.
  • 27. 31 de Outubro de jcr – ped2005 Predicados (exemplo2) /AAA/BBB[last()] <AAA> <BBB/> <BBB/> <BBB/> <BBB/> </AAA> Selecciona o último elemento BBB filho de AAA.
  • 28. 31 de Outubro de jcr – ped2005 Atributos Os atributos são especificados pelo prefixo @.
  • 29. 31 de Outubro de jcr – ped2005 Atributos (exemplo1) //BBB[@ident] <AAA> <BBB ident="b1"/> <BBB ident="b2"/> <BBB name="bbb"/> <BBB/> </AAA> Selecciona os elementos BBB que têm o atributo ident especificado.
  • 30. 31 de Outubro de jcr – ped2005 Atributos (exemplo2) //BBB[@nome] <AAA> <BBB ident="b1"/> <BBB ident="b2"/> <BBB nome="bbb"/> <BBB/> </AAA> Selecciona os elementos BBB que têm o atributo nome especificado.
  • 31. 31 de Outubro de jcr – ped2005 Atributos (exemplo3) //BBB[@*] <AAA> <BBB ident="b1"/> <BBB ident="b2"/> <BBB nome="bbb"/> <BBB/> </AAA> Selecciona os elementos BBB que têm um atributo especificado.
  • 32. 31 de Outubro de jcr – ped2005 Atributos (exemplo4) //BBB[not(@*)] <AAA> <BBB ident="b1"/> <BBB ident="b2"/> <BBB nome="bbb"/> <BBB/> </AAA> Selecciona os elementos BBB que não têm nenhum atributo.
  • 33. 31 de Outubro de jcr – ped2005 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.
  • 34. 31 de Outubro de jcr – ped2005 Valores de Atributos (exemplo1) //BBB[@ident=“b1”] <AAA> <BBB ident="b1"/> <BBB ident="b2"/> <BBB name="bbb"/> <BBB/> </AAA> Selecciona os elementos BBB que têm o atributo ident com valor igual a b1.
  • 35. 31 de Outubro de jcr – ped2005 Valores de Atributos (exemplo2) //BBB[@nome=“bbb”] <AAA> <BBB ident="b1"/> <BBB ident="b2"/> <BBB nome="bbb"/> <BBB nome=“ bbb "/> <BBB/> </AAA> Selecciona os elementos BBB que têm o atributo nome com valor igual a bbb.
  • 36. 31 de Outubro de jcr – ped2005 Valores de Atributos (exemplo3) //BBB[normalize-space(@nome)=“bbb”] <AAA> <BBB ident="b1"/> <BBB ident="b2"/> <BBB nome="bbb"/> <BBB nome=“ bbb "/> <BBB/> </AAA> Selecciona os elementos BBB que têm o atributo nome com valor igual a bbb (filtrando espaços iniciais e finais).
  • 37. 31 de Outubro de jcr – ped2005 Funções: count A função count dá como resultado o número de elementos resultantes da aplicação do selector que lhe fôr passado como argumento.
  • 38. 31 de Outubro de jcr – ped2005 count (exemplo1) //*[count(BBB)=2] <AAA> <CCC> <BBB/> <BBB/> <BBB/> </CCC> <DDD> <BBB/> <BBB/> </DDD> <EEE> <CCC/> <DDD/> </EEE> </AAA> Selecciona todos os elementos que tenham dois filhos BBB.
  • 39. 31 de Outubro de jcr – ped2005 count (exemplo2) //*[count(*)=2] <AAA> <CCC> <BBB/> <BBB/> <BBB/> </CCC> <DDD> <BBB/> <BBB/> </DDD> <EEE> <CCC/> <DDD/> </EEE> </AAA> Selecciona todos os elementos que tenham dois filhos.
  • 40. 31 de Outubro de jcr – ped2005 count (exemplo3) //*[count(*)=3] <AAA> <CCC> <BBB/> <BBB/> <BBB/> </CCC> <DDD> <BBB/> <BBB/> </DDD> <EEE> <CCC/> <DDD/> </EEE> </AAA> Selecciona todos os elementos que tenham três filhos.
  • 41. 31 de Outubro de jcr – ped2005 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.
  • 42. 31 de Outubro de jcr – ped2005 name (exemplo1) //*[name()= BBB] <AAA> <BCC> <BBB/> <BBB/> <BBB/> </BCC> <DDB> <BBB/> <BBB/> </DDB> <BEC> <CCC/> <DBD/> </BEC> </AAA> Selecciona todos os elementos que tenham nome igual a BBB.
  • 43. 31 de Outubro de jcr – ped2005 name (exemplo2) //*[starts-with(name(), ‘B’)] <AAA> <BCC> <BBB/> <BBB/> <BBB/> </BCC> <DDB> <BBB/> <BBB/> </DDB> <BEC> <CCC/> <DBD/> </BEC> </AAA> Selecciona todos os elementos que tenham nome iniciado por B.
  • 44. 31 de Outubro de jcr – ped2005 name (exemplo3) //*[contains(name(),‘C’)] <AAA> <BCC> <BBB/> <BBB/> <BBB/> </BCC> <DDB> <BBB/> <BBB/> </DDB> <BEC> <CCC/> <DBD/> </BEC> </AAA> Selecciona todos os elementos cujo nome contém a letra C.
  • 45. 31 de Outubro de jcr – ped2005 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 >
  • 46. 31 de Outubro de jcr – ped2005 string-length (exemplo1) //*[string-length(name())=3] <AAA> <Q/> <SSSS/> <BB/> <CCC/> <DDDDDDDD/> <EEEE/> </AAA> Selecciona todos os elementos que tenham o nome constituído por 3 caracteres.
  • 47. 31 de Outubro de jcr – ped2005 string-length (exemplo2) //*[string-length(name()) &lt; 3] <AAA> <Q/> <SSSS/> <BB/> <CCC/> <DDDDDDDD/> <EEEE/> </AAA> Selecciona todos os elementos que tenham o nome constituído por menos de 3 caracteres.
  • 48. 31 de Outubro de jcr – ped2005 string-length (exemplo3) //*[string-length(name()) &gt; 3] <AAA> <Q/> <SSSS/> <BB/> <CCC/> <DDDDDDDD/> <EEEE/> </AAA> Selecciona todos os elementos que tenham o nome constituído por mais de 3 caracteres.
  • 49. 31 de Outubro de jcr – ped2005 Combinação de endereços • Vários selectores poderão ser combinados com o operador ‘|’ com o significado de serem alternativos.
  • 50. 31 de Outubro de jcr – ped2005 Combinação de end. (exemplo1) //BBB | //CCC <AAA> <BBB/> <CCC/> <DDD> <CCC/> </DDD> <EEE/> </AAA> Selecciona todos os elementos BBB e CCC.
  • 51. 31 de Outubro de jcr – ped2005 Combinação de end. (exemplo2) //BBB | /AAA/EEE <AAA> <BBB/> <CCC/> <DDD> <CCC/> </DDD> <EEE/> </AAA> Selecciona todos os elementos BBB e os elementos EEE filhos de AAA.
  • 52. 31 de Outubro de jcr – ped2005 Combinação de end. (exemplo3) //BBB | /AAA/EEE | /AAA | //DDD/CCC <AAA> <BBB/> <CCC/> <DDD> <CCC/> </DDD> <EEE/> </AAA> O número de combinações é ilimitado.
  • 53. 31 de Outubro de jcr – ped2005 Exercício: qual o significado? • //doc/tit[contains(.,'Vila Verde')] • //doc[local='Castelo Branco']/inst • //inst • //ref/@tipo • //@* • //file[@t = ‘MP3’]
  • 54. 31 de Outubro de jcr – ped2005 “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: 1. descendant 2. parent 3. ancestor 4. following-sibling 5. preceding-sibling 6. following 7. preceding 8. descendant-or-self 9. ancestor-or-self
  • 55. 31 de Outubro de jcr – ped2005 child:: (exemplo1) /AAA <AAA> <BBB/> <CCC/> </AAA> Selecciona os elementos AAA filhos da raíz. /child::AAA
  • 56. 31 de Outubro de jcr – ped2005 child:: (exemplo2) /AAA/BBB <AAA> <BBB/> <CCC/> </AAA> Selecciona os elementos BBB filhos de AAA. /child::AAA/child::BBB
  • 57. 31 de Outubro de jcr – ped2005 child:: (exemplo3) /AAA/BBB <AAA> <BBB/> <CCC/> </AAA> O operador pode ser colocado em evidência. /child::AAA/BBB
  • 58. 31 de Outubro de jcr – ped2005 descendant:: (exemplo1) <AAA> <BBB> <DDD> <CCC> <DDD/> <EEE/> </CCC> </DDD> </BBB> Selecciona os descendentes da raíz, logo todos os nodos. /descendant::* <CCC> <DDD> <EEE> <DDD> <FFF/> </DDD> </EEE> </DDD> </CCC> </AAA>
  • 59. 31 de Outubro de jcr – ped2005 descendant:: (exemplo2) <AAA> <BBB> <DDD> <CCC> <DDD/> <EEE/> </CCC> </DDD> </BBB> Selecciona os descendentes de AAA/BBB. /AAA/BBB/descendant::* <CCC> <DDD> <EEE> <DDD> <FFF/> </DDD> </EEE> </DDD> </CCC> </AAA>
  • 60. 31 de Outubro de jcr – ped2005 descendant:: (exemplo3) <AAA> <BBB> <DDD> <CCC> <DDD/> <EEE/> </CCC> </DDD> </BBB> Selecciona os nodos que têm CCC como ancestral. //CCC/descendant::* <CCC> <DDD> <EEE> <DDD> <FFF/> </DDD> </EEE> </DDD> </CCC> </AAA>
  • 61. 31 de Outubro de jcr – ped2005 descendant:: (exemplo4) <AAA> <BBB> <DDD> <CCC> <DDD/> <EEE/> </CCC> </DDD> </BBB> Selecciona os nodos DDD que têm CCC como ancestral. //CCC/descendant::*/DDD <CCC> <DDD> <EEE> <DDD> <FFF/> </DDD> </EEE> </DDD> </CCC> </AAA>
  • 62. 31 de Outubro de jcr – ped2005 parent:: (exemplo1) <AAA> <BBB> <DDD> <CCC> <DDD/> <EEE/> </CCC> </DDD> </BBB> Selecciona os elementos pai de nodos DDD. //DDD/parent::* <CCC> <DDD> <EEE> <DDD> <FFF/> </DDD> </EEE> </DDD> </CCC> </AAA>
  • 63. 31 de Outubro de jcr – ped2005 ancestor:: (exemplo1) Selecciona os ancestrais de ...EEE. /AAA/BBB/DDD/CCC/EEE/ancestor::* <AAA> <BBB> <DDD> <CCC> <DDD/> <EEE/> </CCC> </DDD> </BBB> <CCC> <DDD> <EEE> <DDD> <FFF/> </DDD> </EEE> </DDD> </CCC> </AAA>
  • 64. 31 de Outubro de jcr – ped2005 ancestor:: (exemplo2) Selecciona os ancestrais de FFF.//FFF/ancestor* <AAA> <BBB> <DDD> <CCC> <DDD/> <EEE/> </CCC> </DDD> </BBB> <CCC> <DDD> <EEE> <DDD> <FFF/> </DDD> </EEE> </DDD> </CCC> </AAA> Exemplificar com as taxonomias
  • 65. 31 de Outubro de jcr – ped2005 following-sibling:: (exemplo1) Selecciona os irmãos à direita do nodo BBB. /AAA/BBB/following-sibling::* <AAA> <BBB> <CCC/> <DDD/> </BBB> <XXX> <DDD> <EEE/> <DDD/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </DDD> </XXX> <CCC> <DDD/> </CCC> </AAA>
  • 66. 31 de Outubro de jcr – ped2005 following-sibling:: (exemplo2) //CCC/following-sibling::* <AAA> <BBB> <CCC/> <DDD/> </BBB> <XXX> <DDD> <EEE/> <DDD/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </DDD> </XXX> <CCC> <DDD/> </CCC> </AAA>
  • 67. 31 de Outubro de jcr – ped2005 preceding-sibling:: (exemplo1) Selecciona os irmãos à esquerda do nodo XXX./AAA/XXX/preceding-sibling::* <AAA> <BBB> <CCC/> <DDD/> </BBB> <XXX> <DDD> <EEE/> <DDD/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </DDD> </XXX> <CCC> <DDD/> </CCC> </AAA>
  • 68. 31 de Outubro de jcr – ped2005 preceding-sibling:: (exemplo2) //CCC/preceding-sibling::* <AAA> <BBB> <CCC/> <DDD/> </BBB> <XXX> <DDD> <EEE/> <DDD/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </DDD> </XXX> <CCC> <DDD/> </CCC> </AAA>
  • 69. 31 de Outubro de jcr – ped2005 following:: (exemplo1) /AAA/XXX/following::* <AAA> <BBB> <CCC/> <ZZZ> <DDD/> <DDD> <EEE/> </DDD> </ZZZ> <FFF> <GGG/> </FFF> </BBB> <XXX> <DDD> <EEE/> <DDD/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </DDD> </XXX> <CCC> <DDD/> </CCC> </AAA>
  • 70. 31 de Outubro de jcr – ped2005 following:: (exemplo2) //ZZZ/following::* <AAA> <BBB> <CCC/> <ZZZ> <DDD/> <DDD> <EEE/> </DDD> </ZZZ> <FFF> <GGG/> </FFF> </BBB> <XXX> <DDD> <EEE/> <DDD/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </DDD> </XXX> <CCC> <DDD/> </CCC> </AAA>
  • 71. 31 de Outubro de jcr – ped2005 preceding:: (exemplo1) /AAA/XXX/preceding::* <AAA> <BBB> <CCC/> <ZZZ> <DDD/> </ZZZ> </BBB> <XXX> <DDD> <EEE/> <DDD/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </DDD> </XXX> <CCC> <DDD/> </CCC> </AAA>
  • 72. 31 de Outubro de jcr – ped2005 preceding:: (exemplo2) //GGG/preceding::* <AAA> <BBB> <CCC/> <ZZZ> <DDD/> </ZZZ> </BBB> <XXX> <DDD> <EEE/> <DDD/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </DDD> </XXX> <CCC> <DDD/> </CCC> </AAA>
  • 73. 31 de Outubro de jcr – ped2005 descendant-or-self:: (exemplo1) /AAA/XXX/descendant-or-self::* <AAA> <BBB> <CCC/> <ZZZ> <DDD/> </ZZZ> </BBB> <XXX> <DDD> <EEE/> <DDD/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </DDD> </XXX> <CCC> <DDD/> </CCC> </AAA>
  • 74. 31 de Outubro de jcr – ped2005 descendant-or-self :: (exemplo2) //CCC/descendant-or-self::* <AAA> <BBB> <CCC/> <ZZZ> <DDD/> </ZZZ> </BBB> <XXX> <DDD> <EEE/> <DDD/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </DDD> </XXX> <CCC> <DDD/> </CCC> </AAA>
  • 75. 31 de Outubro de jcr – ped2005 ancestor-or-self:: (exemplo1) /AAA/XXX/DDD/EEE/ancestor-or-self::* <AAA> <BBB> <CCC/> <ZZZ> <DDD/> </ZZZ> </BBB> <XXX> <DDD> <EEE/> <DDD/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </DDD> </XXX> <CCC> <DDD/> </CCC> </AAA>
  • 76. 31 de Outubro de jcr – ped2005 ancestor-or-self :: (exemplo2) //GGG/ancestor-or-self::* <AAA> <BBB> <CCC/> <ZZZ> <DDD/> </ZZZ> </BBB> <XXX> <DDD> <EEE/> <DDD/> <CCC/> <FFF/> <FFF> <GGG/> </FFF> </DDD> </XXX> <CCC> <DDD/> </CCC> </AAA>
  • 77. 31 de Outubro de jcr – ped2005 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*