37
Linguagens de interrogação de dados XML XPath Helena Galhardas DEI IST

Linguagens de interrogação de dados XML XPath Helena Galhardas DEI IST

Embed Size (px)

Citation preview

Page 1: Linguagens de interrogação de dados XML XPath Helena Galhardas DEI IST

Linguagens de interrogação de dados XMLXPath

Helena Galhardas

DEI IST

Page 2: Linguagens de interrogação de dados XML XPath Helena Galhardas DEI IST

Agenda

Introdução Expressões de caminho (path expressions) XPath

Page 3: Linguagens de interrogação de dados XML XPath Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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”

Page 16: Linguagens de interrogação de dados XML XPath Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

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 Helena Galhardas DEI IST

Tópicos próximas aulas

XQuery XSLT

Page 37: Linguagens de interrogação de dados XML XPath Helena Galhardas DEI IST

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