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 co...
31 de Outubro de jcr – ped2005
Introdução
• O XPath foi desenvolvido para ser utilizado como
valor dum atributo num docume...
31 de Outubro de jcr – ped2005
Índice Remissivo de Conteúdos
1. Modelo de Dados
2. Endereçamento
3. Descendência
4. Select...
31 de Outubro de jcr – ped2005
O Modelo de Dados do XPath
• Do ponto de vista do XPath, um documento
XML é uma ADA, uma ár...
31 de Outubro de jcr – ped2005
Exemplo: instância do poema
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Poema anotado ...
31 de Outubro de jcr – ped2005
Exemplo: nodo raiz
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Poema anotado de acordo...
31 de Outubro de jcr – ped2005
Exemplo: nodos elemento
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Poema anotado de a...
31 de Outubro de jcr – ped2005
Exemplo: nodos atributo
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Poema anotado de a...
31 de Outubro de jcr – ped2005
Exemplo: nodos texto
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Poema anotado de acor...
31 de Outubro de jcr – ped2005
Endereçamento
• A sintaxe básica do XPath é muito
semelhante à do endereçamento de ficheiro...
31 de Outubro de jcr – ped2005
Endereçamento (exemplo1)
/AAA
<AAA>
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC/>
...
31 de Outubro de jcr – ped2005
Endereçamento (exemplo2)
/AAA/CCC
<AAA>
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CC...
31 de Outubro de jcr – ped2005
Endereçamento (exemplo3)
/AAA/DDD/BBB
<AAA>
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD>
<BBB/>
</DDD>...
31 de Outubro de jcr – ped2005
Descendência
Se o endereço começar por //, então todos os elementos no
documento que respei...
31 de Outubro de jcr – ped2005
Descendência (exemplo1)
//BBB
<AAA>
<BBB/>
<CCC/>
<BBB/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC/>
...
31 de Outubro de jcr – ped2005
Descendência (exemplo2)
//DDD/BBB
<AAA>
<BBB/>
<CCC/>
<BBB/>
<DDD>
<BBB/>
</DDD>
<CCC>
<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>
...
31 de Outubro de jcr – ped2005
* (exemplo2)
/*/*/*/BBB Selecciona todos os elementos BBB com 3
gerações ancestrais.<AAA>
<...
31 de Outubro de jcr – ped2005
* (exemplo3)
//* Selecciona todos os elementos.
<AAA>
<XXX>
<DDD>
<BBB/>
<BBB/>
<EEE/>
<FFF...
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>Alentej...
31 de Outubro de jcr – ped2005
Exercício: queries
• Todos os títulos das obras registadas no
arquivo.
• A lista de todas a...
31 de Outubro de jcr – ped2005
Predicados
•Em XPath uma expressão dentro de [] designa-se por
predicado.
•Um predicado vis...
31 de Outubro de jcr – ped2005
Predicados (exemplo1)
/AAA/BBB[1]
<AAA>
<BBB/>
<BBB/>
<BBB/>
<BBB/>
</AAA>
Selecciona o pri...
31 de Outubro de jcr – ped2005
Predicados (exemplo2)
/AAA/BBB[last()]
<AAA>
<BBB/>
<BBB/>
<BBB/>
<BBB/>
</AAA>
Selecciona ...
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...
31 de Outubro de jcr – ped2005
Atributos (exemplo2)
//BBB[@nome]
<AAA>
<BBB ident="b1"/>
<BBB ident="b2"/>
<BBB nome="bbb"...
31 de Outubro de jcr – ped2005
Atributos (exemplo3)
//BBB[@*]
<AAA>
<BBB ident="b1"/>
<BBB ident="b2"/>
<BBB nome="bbb"/>
...
31 de Outubro de jcr – ped2005
Atributos (exemplo4)
//BBB[not(@*)]
<AAA>
<BBB ident="b1"/>
<BBB ident="b2"/>
<BBB nome="bb...
31 de Outubro de jcr – ped2005
Valores de Atributos
• O valor dum atributo pode ser usado como
critério de selecção.
• A f...
31 de Outubro de jcr – ped2005
Valores de Atributos (exemplo1)
//BBB[@ident=“b1”]
<AAA>
<BBB ident="b1"/>
<BBB ident="b2"/...
31 de Outubro de jcr – ped2005
Valores de Atributos (exemplo2)
//BBB[@nome=“bbb”]
<AAA>
<BBB ident="b1"/>
<BBB ident="b2"/...
31 de Outubro de jcr – ped2005
Valores de Atributos (exemplo3)
//BBB[normalize-space(@nome)=“bbb”]
<AAA>
<BBB ident="b1"/>...
31 de Outubro de jcr – ped2005
Funções: count
A função count dá como resultado o número de elementos
resultantes da aplica...
31 de Outubro de jcr – ped2005
count (exemplo1)
//*[count(BBB)=2]
<AAA>
<CCC>
<BBB/>
<BBB/>
<BBB/>
</CCC>
<DDD>
<BBB/>
<BB...
31 de Outubro de jcr – ped2005
count (exemplo2)
//*[count(*)=2]
<AAA>
<CCC>
<BBB/>
<BBB/>
<BBB/>
</CCC>
<DDD>
<BBB/>
<BBB/...
31 de Outubro de jcr – ped2005
count (exemplo3)
//*[count(*)=3]
<AAA>
<CCC>
<BBB/>
<BBB/>
<BBB/>
</CCC>
<DDD>
<BBB/>
<BBB/...
31 de Outubro de jcr – ped2005
Funções: name
• A função name retorna o nome do elemento
seleccionado.
• A função starts-wi...
31 de Outubro de jcr – ped2005
name (exemplo1)
//*[name()= BBB]
<AAA>
<BCC>
<BBB/>
<BBB/>
<BBB/>
</BCC>
<DDB>
<BBB/>
<BBB/...
31 de Outubro de jcr – ped2005
name (exemplo2)
//*[starts-with(name(), ‘B’)]
<AAA>
<BCC>
<BBB/>
<BBB/>
<BBB/>
</BCC>
<DDB>...
31 de Outubro de jcr – ped2005
name (exemplo3)
//*[contains(name(),‘C’)]
<AAA>
<BCC>
<BBB/>
<BBB/>
<BBB/>
</BCC>
<DDB>
<BB...
31 de Outubro de jcr – ped2005
Funções: string-length
• A função string-length retorna o número de
caracteres na string ar...
31 de Outubro de jcr – ped2005
string-length (exemplo1)
//*[string-length(name())=3]
<AAA>
<Q/>
<SSSS/>
<BB/>
<CCC/>
<DDDD...
31 de Outubro de jcr – ped2005
string-length (exemplo2)
//*[string-length(name()) &lt; 3]
<AAA>
<Q/>
<SSSS/>
<BB/>
<CCC/>
...
31 de Outubro de jcr – ped2005
string-length (exemplo3)
//*[string-length(name()) &gt; 3]
<AAA>
<Q/>
<SSSS/>
<BB/>
<CCC/>
...
31 de Outubro de jcr – ped2005
Combinação de endereços
• Vários selectores poderão ser combinados
com o operador ‘|’ com o...
31 de Outubro de jcr – ped2005
Combinação de end. (exemplo1)
//BBB | //CCC
<AAA>
<BBB/>
<CCC/>
<DDD>
<CCC/>
</DDD>
<EEE/>
...
31 de Outubro de jcr – ped2005
Combinação de end. (exemplo2)
//BBB | /AAA/EEE
<AAA>
<BBB/>
<CCC/>
<DDD>
<CCC/>
</DDD>
<EEE...
31 de Outubro de jcr – ped2005
Combinação de end. (exemplo3)
//BBB | /AAA/EEE | /AAA | //DDD/CCC
<AAA>
<BBB/>
<CCC/>
<DDD>...
31 de Outubro de jcr – ped2005
Exercício: qual o significado?
• //doc/tit[contains(.,'Vila Verde')]
• //doc[local='Castelo...
31 de Outubro de jcr – ped2005
“Axis”: travessia da árvore
• O operador ‘::’ permite indicar o tipo de travessia que se
fa...
31 de Outubro de jcr – ped2005
child:: (exemplo1)
/AAA
<AAA>
<BBB/>
<CCC/>
</AAA>
Selecciona os elementos AAA
filhos da ra...
31 de Outubro de jcr – ped2005
child:: (exemplo2)
/AAA/BBB
<AAA>
<BBB/>
<CCC/>
</AAA>
Selecciona os elementos BBB
filhos d...
31 de Outubro de jcr – ped2005
child:: (exemplo3)
/AAA/BBB
<AAA>
<BBB/>
<CCC/>
</AAA>
O operador pode ser colocado
em evid...
31 de Outubro de jcr – ped2005
descendant:: (exemplo1)
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
Seleccio...
31 de Outubro de jcr – ped2005
descendant:: (exemplo2)
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
Seleccio...
31 de Outubro de jcr – ped2005
descendant:: (exemplo3)
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
Seleccio...
31 de Outubro de jcr – ped2005
descendant:: (exemplo4)
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
Seleccio...
31 de Outubro de jcr – ped2005
parent:: (exemplo1)
<AAA>
<BBB>
<DDD>
<CCC>
<DDD/>
<EEE/>
</CCC>
</DDD>
</BBB>
Selecciona o...
31 de Outubro de jcr – ped2005
ancestor:: (exemplo1)
Selecciona os ancestrais
de ...EEE.
/AAA/BBB/DDD/CCC/EEE/ancestor::*
...
31 de Outubro de jcr – ped2005
ancestor:: (exemplo2)
Selecciona os ancestrais de FFF.//FFF/ancestor*
<AAA>
<BBB>
<DDD>
<CC...
31 de Outubro de jcr – ped2005
following-sibling:: (exemplo1)
Selecciona os irmãos à
direita do nodo BBB.
/AAA/BBB/followi...
31 de Outubro de jcr – ped2005
following-sibling:: (exemplo2)
//CCC/following-sibling::*
<AAA>
<BBB>
<CCC/>
<DDD/>
</BBB>
...
31 de Outubro de jcr – ped2005
preceding-sibling:: (exemplo1)
Selecciona os irmãos à
esquerda do nodo XXX./AAA/XXX/precedi...
31 de Outubro de jcr – ped2005
preceding-sibling:: (exemplo2)
//CCC/preceding-sibling::*
<AAA>
<BBB>
<CCC/>
<DDD/>
</BBB>
...
31 de Outubro de jcr – ped2005
following:: (exemplo1)
/AAA/XXX/following::*
<AAA>
<BBB>
<CCC/>
<ZZZ>
<DDD/>
<DDD>
<EEE/>
<...
31 de Outubro de jcr – ped2005
following:: (exemplo2)
//ZZZ/following::*
<AAA>
<BBB>
<CCC/>
<ZZZ>
<DDD/>
<DDD>
<EEE/>
</DD...
31 de Outubro de jcr – ped2005
preceding:: (exemplo1)
/AAA/XXX/preceding::*
<AAA>
<BBB>
<CCC/>
<ZZZ>
<DDD/>
</ZZZ>
</BBB>
...
31 de Outubro de jcr – ped2005
preceding:: (exemplo2)
//GGG/preceding::*
<AAA>
<BBB>
<CCC/>
<ZZZ>
<DDD/>
</ZZZ>
</BBB>
<XX...
31 de Outubro de jcr – ped2005
descendant-or-self:: (exemplo1)
/AAA/XXX/descendant-or-self::*
<AAA>
<BBB>
<CCC/>
<ZZZ>
<DD...
31 de Outubro de jcr – ped2005
descendant-or-self :: (exemplo2)
//CCC/descendant-or-self::*
<AAA>
<BBB>
<CCC/>
<ZZZ>
<DDD/...
31 de Outubro de jcr – ped2005
ancestor-or-self:: (exemplo1)
/AAA/XXX/DDD/EEE/ancestor-or-self::*
<AAA>
<BBB>
<CCC/>
<ZZZ>...
31 de Outubro de jcr – ped2005
ancestor-or-self :: (exemplo2)
//GGG/ancestor-or-self::*
<AAA>
<BBB>
<CCC/>
<ZZZ>
<DDD/>
</...
31 de Outubro de jcr – ped2005
Exercício
• Pegando na árvore do poema e centrando a
referência na primeira quadra: quadra[...
Próximos SlideShares
Carregando em…5
×

Tutorial sobre XPath

532 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
532
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1
Ações
Compartilhamentos
0
Downloads
18
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Tutorial sobre XPath

  1. 1. 31 de Outubro de jcr – ped2005 XPath Processamento Estruturado de Documentos 2005 By jcr
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 18. 31 de Outubro de jcr – ped2005 * O operador * selecciona todos os elementos abrangidos pelo endereço precedente.
  19. 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. 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. 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. 22. 31 de Outubro de jcr – ped2005 Exercício • Arquivo de Música de Ernesto Veiga de Oliveira
  23. 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. 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. 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. 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. 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. 28. 31 de Outubro de jcr – ped2005 Atributos Os atributos são especificados pelo prefixo @.
  29. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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*

×