![Page 1: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/1.jpg)
Linguagens de interrogação de dados XMLXPath
Helena Galhardas
DEI IST
![Page 2: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/2.jpg)
Agenda
Introdução Expressões de caminho (path expressions) XPath
![Page 3: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/3.jpg)
Porquê uma linguagem de interrogação para dados SS? Essencial para dados Web Seleccionar partes de um documento Interessante ter uma linguagem de
interrogação do tipo de BD para aplicar predicados aos dados, e executar re-estrutuação dos dados
![Page 4: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/4.jpg)
Linguagens de interrogação para documentos XML LOREL e UnQL:
linguagens de consulta p/ dados semi-estruturados XML-QL: estende SQL
Strudel Project - AT&T Labs XML-GL: linguagem gráfica
Transforma o DTD e os documentos XML em grafos
XSL: conjunto de template rules – W3C XQL: extensão do XSL – Microsoft .... XQuery
![Page 5: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/5.jpg)
Linguagem de interrogação para dados semi-estruturados Poder expressivo Capacidade de re-estruturação de dados SS
Semântica precisa Composição
Saída de uma interrogação pode ser usada como entrada noutra interrogação
Esquema Explorar a estrutura (se existir) para verificação de tipos
Manipulação de programas Interrogações podem ser geradas automaticamente logo convém
ser linguagem verbosa
![Page 6: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/6.jpg)
Expressões de caminho (path expressions)
Seja l1.l2.l3…ln - sequência de etiquetas de arcos,
Expressão de caminho - é uma interrogação simples, cujo resultado é um conjunto de nós para um dado grafo de nós. resultado de l1.l2.l3…ln sobre um grafo de dados é um conjunto de
nós vn tal que existem arestas (r,l1,v1), (v1,l2,v2),…, (vn-1, ln, vn) no grafo de dados onde r é a raíz.
Mas ainda não resulta num conjunto de dados semi-estruturados.
![Page 7: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/7.jpg)
Exemplo
db
bookn1
n2
n3
biblio
author
author
date
title
authordate
title
paper
Roux
Combalusier
1976
Database Systems
Smith
1999
Database Systems...
book
![Page 8: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/8.jpg)
Exemplo
db
bookn1
n2
n3
biblio
author
author
date
title
authordate
title
paper
Roux
Combalusier
1976
Database Systems
Smith
1999
Database Systems...
biblio.book: {n1, n2}
book
![Page 9: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/9.jpg)
Exemplo
db
book n1
n2
n3
biblio
author
author
date
title
author
date
title
paper
Roux
Combalusier
1976
Database Systems
Smith
1999
Database Systems...
biblio.book.author: nós e conteúdo {“Roux”, “Combalusier”, “Smith”}
book
![Page 10: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/10.jpg)
Expressões regulares
Sintaxe genérica:e::= l | | _ | e’.’e | ‘(‘e’)’ | e ’|’e | e’*’ | e’+’ | e’?’ ,
Em que l varia entre as etiquetas, e sobre expressões e é o conjunto vazio.
Exemplo: ((s|S)ection|paragraph)(s)?
Corresponde a : Section, Section, sections, Sections, paragraph,
paragrahs
![Page 11: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/11.jpg)
Outro exemplo
biblio._*.section.(“[tT]itle” | paragraph”.*heading.*”)
Corresponde a qualquer caminho que começa com uma etiqueta biblio e acaba com uma etiqueta section, seguido quer por um título (com possível primeira letra maiúscula) ou uma aresta paragraph seguida por uma aresta que contém a string heading.
A expressão regular _* corresponde a um número infinito de caminhos sempre que existe um ciclo.
![Page 12: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/12.jpg)
Lacunas das path expressions Não constroiem nós novos Não conseguem executar o equivalente a um
join Não conseguem testar vaores da base de
dados
=> Linguagens de interrogação
![Page 13: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/13.jpg)
Sintaxe básica (Lorel)
Select author: X
From biblio.book.author X
Resultado:
{author: “Roux”, author: “Combalusier”, author: “Smith”}
author
author
Roux
Combalusier
authorSmithq1
![Page 14: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/14.jpg)
select row: X
from biblio._ X
where “Smith” in X.author
{row: {author: “Smith”,
date: 1999,
title: “Database Systems”,...}n2
q2
authordate
title
Smith
1999
Database Systems...
![Page 15: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/15.jpg)
select author: Y
from biblio._ X
X.author Y,
X.title Z
where matches(“.*(D|d)atabase.*”, Z)
Resultado: todos os autores de publicações cujo título contém a palavra “database”
1º
2º
3º
![Page 16: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/16.jpg)
XML Path Language (XPath) Recomendação W3C Linguagem declarativa para especificar caminhos
nas árvores Sintaxe semelhante à usada para caminhos em
hierarquias de ficheiros Serve de base a outros standards do W3C:
XSL Transformations (XSLT) XML Link (XLink) XML Pointer (XPointer) XML Query
![Page 17: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/17.jpg)
Xpath: Definição Uma expressão Xpath, p, estabelece uma
relação entre: Um nó de contexto e Um nó que pertence ao conjunto de respostas
Exemplos: author/firstname . = self .. = parent part/*/*/subpart/../name = part/*/*[subpart]/name
![Page 18: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/18.jpg)
Exemplo<bib>
<book> <publisher> Addison-Wesley </publisher> <author> Serge Abiteboul </author> <author> <first-name> Rick </first-name> <last-name> Hull </last-name> </author> <author> Victor Vianu </author> <title> Foundations of Databases </title> <year> 1995 </year></book><book price=“55”> <publisher> Freeman </publisher> <author> Jeffrey D. Ullman </author> <title> Principles of Database and Knowledge Base Systems </title> <year> 1998 </year></book>
</bib>
<bib><book> <publisher> Addison-Wesley </publisher> <author> Serge Abiteboul </author> <author> <first-name> Rick </first-name> <last-name> Hull </last-name> </author> <author> Victor Vianu </author> <title> Foundations of Databases </title> <year> 1995 </year></book><book price=“55”> <publisher> Freeman </publisher> <author> Jeffrey D. Ullman </author> <title> Principles of Database and Knowledge Base Systems </title> <year> 1998 </year></book>
</bib>
![Page 19: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/19.jpg)
Modelo de dados para XPath
bib
book book
publisher author . . . .
Addison-Wesley Serge Abiteboul
A raíz
O elemento raíz
Idêntico ao modelo de dados de XQuery
![Page 20: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/20.jpg)
Expressões simples
/bib/book/year
Resultado: <year> 1995 </year>
<year> 1998 </year>
/bib/paper/year
Resultado: empty (não existem artigos)
![Page 21: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/21.jpg)
Expressões um pouco mais complicadas//authorResultado:<author> Serge Abiteboul </author> <author> <first-name> Rick </first-name> <last-name> Hull </last-name> </author> <author> Victor Vianu </author> <author> Jeffrey D. Ullman </author>
/bib//first-nameResultado: <first-name> Rick </first-name>
![Page 22: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/22.jpg)
Nós de texto/bib/book/author/text()
Resultado: Serge Abiteboul Jeffrey D. Ullman
Rick Hull não aparece porque tem firstname, lastname
Algumas funções em XPath:text() = matches the text valuenode() = retorna qq. nó (= * or @* or text())name() = retorna o nome da etiqueta corrente
![Page 23: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/23.jpg)
Wildcard
//author/*
Resultado: <first-name> Rick </first-name>
<last-name> Hull </last-name>
* Corresponde a qualquer elemento
![Page 24: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/24.jpg)
Exemplo<bib>
<book> <publisher> Addison-Wesley </publisher> <author> Serge Abiteboul </author> <author> <first-name> Rick </first-name> <last-name> Hull </last-name> </author> <author> Victor Vianu </author> <title> Foundations of Databases </title> <year> 1995 </year></book><book price=“55”> <publisher> Freeman </publisher> <author> Jeffrey D. Ullman </author> <title> Principles of Database and Knowledge Base Systems </title> <year> 1998 </year></book>
</bib>
<bib><book> <publisher> Addison-Wesley </publisher> <author> Serge Abiteboul </author> <author> <first-name> Rick </first-name> <last-name> Hull </last-name> </author> <author> Victor Vianu </author> <title> Foundations of Databases </title> <year> 1995 </year></book><book price=“55”> <publisher> Freeman </publisher> <author> Jeffrey D. Ullman </author> <title> Principles of Database and Knowledge Base Systems </title> <year> 1998 </year></book>
</bib>
![Page 25: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/25.jpg)
Nós atributo
/bib/book/@price
Resultado: “55”
@price significa que price tem que ser um atributo
![Page 26: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/26.jpg)
Qualificadores (1)
/bib/book/author[firstname]
Resultado: <author> <first-name> Rick </first-name>
<last-name> Hull </last-name>
</author>
![Page 27: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/27.jpg)
Qualificadores (2)
/bib/book/author[firstname][address[//zip][city]]/lastname
Result: <lastname> … </lastname>
<lastname> … </lastname>
![Page 28: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/28.jpg)
Qualificadores (3)
/bib/book[@price < “60”]
/bib/book[author/@age < “25”]
/bib/book[author/text()]
![Page 29: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/29.jpg)
Sumário dos exemplosbib elemento bib
* qualquer elemento
/ root
/bib bib debaixo de root
bib/paper paper debaixo de bib
bib//paper paper bebaixo de bib, a qq profundidade
//paper paper a qualquer profundidade
paper|book um paper ou um book
@price atributo price
bib/book/@price atributo price em book, em bib
db/book[@price] books que têm um atributo price
db/book[@price=’10’] books com price igual a 10
![Page 30: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/30.jpg)
A raíz <bib> <paper> 1 </paper> <paper> 2 </paper>
</bib> bib é o “document element” A “root” está acima de bib
/bib = retorna o elemento documento / = returna a raíz
Se tivermos comentários antes e depois de <bib>, estes tornam-se irmãos de <bib>
![Page 31: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/31.jpg)
Navegação usando a sintaxe completa Passo de localização tem a sintaxe:
axis :: node-test predicates
Em que: Axis selecciona um conjunto de nós
candidatos node-test filtra os candidatos baseado no tipo
ou nome do nó E os predicates são opcionais
![Page 32: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/32.jpg)
Navegação Podemos navegar ao longo de 13 eixos:
ancestorancestor-or-selfAttribute – todos os atributos do nó de contextochilddescendantdescendant-or-selffollowingfollowing-siblingnamespaceParent – o pai do nó de contextoprecedingpreceding-siblingself – o nó de contexto, ele mesmo
![Page 33: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/33.jpg)
Exemploschild::author/child:lastname = author/lastname
child::author/descendant::zip = author//zip
child::author/parent::* = author/..
child::author/attribute::age = author/@age
E os seguintes, o que querem dizer? paper/publisher/parent::*/author /bib//address[ancestor::book] /bib//author/ancestor::*//zip
![Page 34: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/34.jpg)
Mais exemplos name() = o nome do nó corrente
/bib//*[name()=book] é o mesmo que /bib//book
O que quer dizer ? /bib//*[ancestor::*[name()!=book]]
Os eixos de navegação dão-nos mais poder
![Page 35: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/35.jpg)
Sintaxe abreviada vs sintaxe completa
Sintaxe completa Sintaxe abreviadachild:: nada (child eixo por
omissão)attribute:: @/descendant-or-self::node()/ //self::node() .parent::node() ..[position()=i] [i]
Se o caminho começa com //, então o contexto inicial é a raíz.
![Page 36: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/36.jpg)
Tópicos próximas aulas
XQuery XSLT
![Page 37: Linguagens de interrogação de dados XML XPath](https://reader035.vdocuments.site/reader035/viewer/2022062518/56813fe2550346895daacc07/html5/thumbnails/37.jpg)
Referências Peter Wood, Slides on “Representing and Querying
Data on the Web”, http://www.dcs.bbk.ac.uk/~ptw/teaching/data-on-the-web.html.
Dan Suciu, Slides on “The semistructured data model”, CSE 590ds: Management of XML and Semistructured Data, http://www.cs.washington.edu/education/courses/cse590ds/01sp/
S. Abiteboul, P. Buneman, D. Suciu, “Data on the Web, From Relations to Semistructured Data and XML”, Morgan Kaufmann, 2000, (cap 4)
www.w3.org/TR/xpath Recomendação W3C do XPath www.w3schools.com/xpath Tutorial XPath