tutorial sobre xpath
TRANSCRIPT
![Page 1: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/1.jpg)
31 de Outubro de 2005
jcr – ped2005
XPath
Processamento Estruturado de Documentos 2005
By jcr
![Page 2: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/2.jpg)
31 de Outubro de 2005
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
![Page 3: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/3.jpg)
31 de Outubro de 2005
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 ...
![Page 4: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/4.jpg)
31 de Outubro de 2005
jcr – ped2005
Índice Remissivo de Conteúdos
1. Modelo de Dados2. Endereçamento3. Descendência4. Selector universal (*)5. Exercício6. Predicados7. Atributos
8. Valores de Atributos9. Funções (count)10. Funções (name)11. Funções (string-length)12. Combinação de endereços13. Exercício14. Eixos de Navegação
![Page 5: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/5.jpg)
31 de Outubro de 2005
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 elemento3. nodos atributo4. nodos texto5. nodos comentário6. nodos instrução de processamento7. nodos Namespace
![Page 6: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/6.jpg)
31 de Outubro de 2005
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>
![Page 7: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/7.jpg)
31 de Outubro de 2005
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
![Page 8: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/8.jpg)
31 de Outubro de 2005
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>
poematituloautorcorpoquadraversoternonomelugardata
verso = “Olha, Daisy: quando eu morrer ...”
![Page 9: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/9.jpg)
31 de Outubro de 2005
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
![Page 10: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/10.jpg)
31 de Outubro de 2005
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”
![Page 11: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/11.jpg)
31 de Outubro de 2005
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.
![Page 12: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/12.jpg)
31 de Outubro de 2005
jcr – ped2005
Endereçamento (exemplo1)
/AAA
<AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA>
Selecciona o elemento raíz AAA.
![Page 13: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/13.jpg)
31 de Outubro de 2005
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.
![Page 14: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/14.jpg)
31 de Outubro de 2005
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 vezsão filhos do elemento raíz AAA.
![Page 15: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/15.jpg)
31 de Outubro de 2005
jcr – ped2005
Descendência
Se o endereço começar por //, então todos os elementos nodocumento que respeitarem a selecção que vem a seguir serãoseleccionados.
![Page 16: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/16.jpg)
31 de Outubro de 2005
jcr – ped2005
Descendência (exemplo1)
//BBB
<AAA> <BBB/> <CCC/> <BBB/> <BBB/> <DDD> <BBB/> </DDD> <CCC/> </AAA>
Selecciona todos os elementos BBB.
![Page 17: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/17.jpg)
31 de Outubro de 2005
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.
![Page 18: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/18.jpg)
31 de Outubro de 2005
jcr – ped2005
*
O operador * selecciona todos os elementos abrangidos peloendereço precedente.
![Page 19: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/19.jpg)
31 de Outubro de 2005
jcr – ped2005
* (exemplo1)
/AAA/CCC/DDD/* Selecciona todos os elementos comcontexto: /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>
![Page 20: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/20.jpg)
31 de Outubro de 2005
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>
![Page 21: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/21.jpg)
31 de Outubro de 2005
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>
![Page 22: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/22.jpg)
31 de Outubro de 2005
jcr – ped2005
Exercício
• Arquivo de Música de Ernesto Veiga de Oliveira
![Page 23: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/23.jpg)
31 de Outubro de 2005
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>...
![Page 24: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/24.jpg)
31 de Outubro de 2005
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.
![Page 25: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/25.jpg)
31 de Outubro de 2005
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.
![Page 26: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/26.jpg)
31 de Outubro de 2005
jcr – ped2005
Predicados (exemplo1)
/AAA/BBB[1]
<AAA> <BBB/> <BBB/> <BBB/> <BBB/> </AAA>
Selecciona o primeiro elemento BBBfilho de AAA.
![Page 27: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/27.jpg)
31 de Outubro de 2005
jcr – ped2005
Predicados (exemplo2)
/AAA/BBB[last()]
<AAA> <BBB/> <BBB/> <BBB/> <BBB/> </AAA>
Selecciona o último elemento BBBfilho de AAA.
![Page 28: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/28.jpg)
31 de Outubro de 2005
jcr – ped2005
Atributos
Os atributos são especificados pelo prefixo @.
![Page 29: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/29.jpg)
31 de Outubro de 2005
jcr – ped2005
Atributos (exemplo1)
//BBB[@ident]
<AAA> <BBB ident="b1"/> <BBB ident="b2"/> <BBB name="bbb"/> <BBB/> </AAA>
Selecciona os elementos BBBque têm o atributo ident especificado.
![Page 30: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/30.jpg)
31 de Outubro de 2005
jcr – ped2005
Atributos (exemplo2)
//BBB[@nome]
<AAA> <BBB ident="b1"/> <BBB ident="b2"/> <BBB nome="bbb"/> <BBB/> </AAA>
Selecciona os elementos BBBque têm o atributo nome especificado.
![Page 31: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/31.jpg)
31 de Outubro de 2005
jcr – ped2005
Atributos (exemplo3)
//BBB[@*]
<AAA> <BBB ident="b1"/> <BBB ident="b2"/> <BBB nome="bbb"/> <BBB/> </AAA>
Selecciona os elementos BBBque têm um atributo especificado.
![Page 32: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/32.jpg)
31 de Outubro de 2005
jcr – ped2005
Atributos (exemplo4)
//BBB[not(@*)]
<AAA> <BBB ident="b1"/> <BBB ident="b2"/> <BBB nome="bbb"/> <BBB/> </AAA>
Selecciona os elementos BBBque não têm nenhum atributo.
![Page 33: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/33.jpg)
31 de Outubro de 2005
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.
![Page 34: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/34.jpg)
31 de Outubro de 2005
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.
![Page 35: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/35.jpg)
31 de Outubro de 2005
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.
![Page 36: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/36.jpg)
31 de Outubro de 2005
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).
![Page 37: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/37.jpg)
31 de Outubro de 2005
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.
![Page 38: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/38.jpg)
31 de Outubro de 2005
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.
![Page 39: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/39.jpg)
31 de Outubro de 2005
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.
![Page 40: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/40.jpg)
31 de Outubro de 2005
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.
![Page 41: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/41.jpg)
31 de Outubro de 2005
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.
![Page 42: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/42.jpg)
31 de Outubro de 2005
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.
![Page 43: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/43.jpg)
31 de Outubro de 2005
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.
![Page 44: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/44.jpg)
31 de Outubro de 2005
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.
![Page 45: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/45.jpg)
31 de Outubro de 2005
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:– < para <– > para >
![Page 46: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/46.jpg)
31 de Outubro de 2005
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.
![Page 47: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/47.jpg)
31 de Outubro de 2005
jcr – ped2005
string-length (exemplo2)
//*[string-length(name()) < 3]
<AAA> <Q/> <SSSS/> <BB/> <CCC/> <DDDDDDDD/> <EEEE/> </AAA>
Selecciona todos os elementos que tenham o nome constituído por menos de 3 caracteres.
![Page 48: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/48.jpg)
31 de Outubro de 2005
jcr – ped2005
string-length (exemplo3)
//*[string-length(name()) > 3]
<AAA> <Q/> <SSSS/> <BB/> <CCC/> <DDDDDDDD/> <EEEE/> </AAA>
Selecciona todos os elementos que tenham o nome constituído por mais de 3 caracteres.
![Page 49: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/49.jpg)
31 de Outubro de 2005
jcr – ped2005
Combinação de endereços
• Vários selectores poderão ser combinados com o operador ‘|’ com o significado de serem alternativos.
![Page 50: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/50.jpg)
31 de Outubro de 2005
jcr – ped2005
Combinação de end. (exemplo1)
//BBB | //CCC
<AAA> <BBB/> <CCC/> <DDD> <CCC/> </DDD> <EEE/> </AAA>
Selecciona todos os elementos BBB e CCC.
![Page 51: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/51.jpg)
31 de Outubro de 2005
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.
![Page 52: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/52.jpg)
31 de Outubro de 2005
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.
![Page 53: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/53.jpg)
31 de Outubro de 2005
jcr – ped2005
Exercício: qual o significado?
• //doc/tit[contains(.,'Vila Verde')]
• //doc[local='Castelo Branco']/inst
• //inst
• //ref/@tipo
• //@*
• //file[@t = ‘MP3’]
![Page 54: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/54.jpg)
31 de Outubro de 2005
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. descendant2. parent3. ancestor4. following-sibling5. preceding-sibling
6. following7. preceding8. descendant-or-self9. ancestor-or-self
![Page 55: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/55.jpg)
31 de Outubro de 2005
jcr – ped2005
child:: (exemplo1)
/AAA
<AAA> <BBB/> <CCC/> </AAA>
Selecciona os elementos AAA filhos da raíz.
/child::AAA
![Page 56: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/56.jpg)
31 de Outubro de 2005
jcr – ped2005
child:: (exemplo2)
/AAA/BBB
<AAA> <BBB/> <CCC/> </AAA>
Selecciona os elementos BBB filhos de AAA.
/child::AAA/child::BBB
![Page 57: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/57.jpg)
31 de Outubro de 2005
jcr – ped2005
child:: (exemplo3)
/AAA/BBB
<AAA> <BBB/> <CCC/> </AAA>
O operador pode ser colocado em evidência.
/child::AAA/BBB
![Page 58: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/58.jpg)
31 de Outubro de 2005
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>
![Page 59: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/59.jpg)
31 de Outubro de 2005
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>
![Page 60: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/60.jpg)
31 de Outubro de 2005
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>
![Page 61: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/61.jpg)
31 de Outubro de 2005
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>
![Page 62: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/62.jpg)
31 de Outubro de 2005
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>
![Page 63: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/63.jpg)
31 de Outubro de 2005
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>
![Page 64: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/64.jpg)
31 de Outubro de 2005
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
![Page 65: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/65.jpg)
31 de Outubro de 2005
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>
![Page 66: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/66.jpg)
31 de Outubro de 2005
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>
![Page 67: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/67.jpg)
31 de Outubro de 2005
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>
![Page 68: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/68.jpg)
31 de Outubro de 2005
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>
![Page 69: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/69.jpg)
31 de Outubro de 2005
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>
![Page 70: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/70.jpg)
31 de Outubro de 2005
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>
![Page 71: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/71.jpg)
31 de Outubro de 2005
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>
![Page 72: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/72.jpg)
31 de Outubro de 2005
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>
![Page 73: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/73.jpg)
31 de Outubro de 2005
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>
![Page 74: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/74.jpg)
31 de Outubro de 2005
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>
![Page 75: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/75.jpg)
31 de Outubro de 2005
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>
![Page 76: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/76.jpg)
31 de Outubro de 2005
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>
![Page 77: Tutorial sobre XPath](https://reader035.vdocuments.net/reader035/viewer/2022062419/559e7b311a28abd8318b4733/html5/thumbnails/77.jpg)
31 de Outubro de 2005
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*