Top Banner
XQuery Helena Galhardas DEI IST
42

XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Apr 07, 2016

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

XQuery

Helena GalhardasDEI IST

Page 2: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Agenda

XPath – exercício XQuery

Page 3: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

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>

Page 4: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

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 5: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Expressões simples

/bib/book/yearResultado: <year> 1995 </year> <year> 1998 </year>

/bib/paper/yearResultado: empty (não existem artigos)

Page 6: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Sumário dos exemplosbib elemento bib * qualquer elemento/ root/bib bib debaixo de rootbib/paper paper debaixo de bibbib//paper paper bebaixo de bib, a qq profundidade//paper paper a qualquer profundidadepaper|book um paper ou um book@price atributo price bib/book/@price atributo price em book, em bibdb/book[@price] books que têm um atributo pricedb/book[@price=’10’] books com price igual a 10

Page 7: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

ExercícioConsidere um documento XML d que representa uma colecção de CDs. Assuma

que o documento é válido no que diz respeito à seguinte DTD:<!ELEMENT CDlist ((CD)+)> <!ELEMENT CD (composer, (performance)+, publisher, (length)?)> <!ELEMENT performance (composition, (soloist)?, (orchestra, conductor)?)> <!ELEMENT composer (#PCDATA)><!ELEMENT publisher (#PCDATA)> <!ELEMENT length (#PCDATA)> <!ELEMENT composition (#PCDATA)> <!ELEMENT soloist (#PCDATA)><!ELEMENT orchestra (#PCDATA)> <!ELEMENT conductor (#PCDATA)> Quais as expressões XPath que retornam o seguinte de d, assumindo que o

contexto inicial é o elemento CDlist: Todas as composições Todas as composições envolvendo um solista Todas as execuções com uma orquesta mas sem solista Todos os solistas que tocaram com a London Symphony Orchestra num CD

publicado pela Deutsche Grammophon Todos os CDs que têm execuções pela London Symphony Orchestra

Page 8: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Todas as composições: CD/performance/composition

Todas as composições envolvendo um solista: CD/performance[soloist]/composition

Todas as execuções com uma orquestra mas sem solista: CD/performance[orchestra and not(soloist)]

Todos os solistas que tocaram com a London Symphony Orchestra num CD publicado pela Deutsche Grammophon CD[publisher="Deutsche Grammophon"]/performance [orchestra="London Symphony Orchestra"]/soloist

Todos os CDs com execuções pela London Symphony Orchestra CD[performance[orchestra="London Symphony Orchestra"]]

Page 9: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

XQuery Baseado em Quilt: que é um apanhado de

funcionalidades de outras linguagens (por ex., XML-QL)

Desenhado para obedecer aos requisitos identificados pelo W3C Query Working Group

Linguagem funcional na qual uma interrogação é uma expressão. Expressões podem estar completamente aninhadas

Entrada e saída de uma interrogação são documentos XML, fragmentos de docs XML ou colecções de docs XML. Estes podem ser modelados como uma floresta ordenada

de nós.

Page 10: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Principios do XQuery (1) Fecho

Definir um modelo de dados e um conjunto de operadores que é fechado sobre o modelo

Composição XQuery agrupa vários tipos de expressões Cada expressão pode ser avaliada sem efeitos

secundários As expressões podem ser compostas com generalidade

Obedece ao esquema Utilizar XML Schema Tipos pré-definidos

Page 11: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Principios do XQuery (2) Compatível com Xpath

Adopta XPath como um sub-conjunto sintático Compatível com XPath 1.0 e 2.0

Complitude Tão bom como o modelo relacional Não existia nenhum standard para as linguagens

hierárquicas Funções recursivas Conciso e simples de expressar

Page 12: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Principios do XQuery (2) Compatível com Xpath

Adopta XPath como um sub-conjunto sintático Compatível com XPath 1.0 e 2.0

Complitude Tão bom como o modelo relacional Não existia nenhum standard para as linguagens

hierárquicas Funções recursivas Conciso e simples de expressar

Page 13: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Principios do XQuery (3) Deve permitir uma análise estática

Fase opcional de análise estática antes de cada execução de interrogação

Regras de inferência de tipo baseadas em XML Schema

Permite a detecção de erros durante a compilação

Facilita a optimização

Page 14: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Expressões de caminho em XML Baseado na sintaxe abreviada de XPath

Exemplo: quais as figuras com legenda "Tiger" no segundo capítulo do documento com nome zoo.xml: document("zoo.xml")/chapter[2] //figure[caption="Tiger"]

Três passos de localização: document() encontra o nó raiz do documento chapter[2] encontra o elemento “2º capítulo” que é filho

da raíz. //figure[caption="Tiger"] encontra os elementos figure

que ocorrem em qualquer sítio dentro do capítulo, só devolve aqueles que satisfazem o predicado

Page 15: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Como seguir referências ID? Operador de “desreferênciação” –> semelhante ao

id() do XPath Usado para seguir um atributo do tipo IDREF Retorna os elementos referenciados pelo atributo Exemplo: quais as legendas de figuras que são

referenciadas por elementos figref (usando o atributo refid) no capítulo de zoo.xml com título "Tigers": document("zoo.xml")/chapter[title="Tigers"] //figref/@refid->/caption

Page 16: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Bases de dados relacionais

S(sno, sname) - SupplierP(pno, descrip) - PartsSP(sno, pno, price) – Supplies Part

Exemplo de um esquema relacional

Page 17: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Interrogação select-project do SQL Quais os números das peças cuja descrição

contém : “motor”?

Select pnoFrom PWhere descrip like ‘motor’

Page 18: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Interrogação join SQL

Quais os nomes dos fornecedores e a descrição das peças que eles fornecem?

Select sname, descripFrom S, P, SPWhere S.sno = SP.sno and P.pno = SP.pno Equivalente a:Select sname, descripFrom (S inner join SP on S.sno = SP.sno)Inner join P on p.pno = SP.pno

Page 19: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Dados relacionais vistos como dados em XMLRelacional:

S(sno, sname) - SupplierP(pno, descrip) - PartsSP(sno, pno, price) – Supplies Part

XML:<S>

<s-tuple><sno><sname>

<P><p-tuple>

<pno><descrip>

....

Page 20: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Interrogação select-project XQuery Quais os números cujas descrições contêm

“motor”?For $p in document(“p.xml”)//p_tupleWhere contains($p/descrip, “motor”)Return $p/pno for...where...return é análogo a from... where... select $p é uma variável que itera sobre p_tuples Contains() é um predicado análogo a LIKE

Page 21: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Interrogação join XQuery Quais os nomes dos fornecedores e a descrição dos produtos que

eles fornecem? FOR $sp IN document("sp.xml")//sp_tuple, $p IN document("p.xml")//p_tuple[pno=$sp/pno], $s IN document("s.xml")//s_tuple[sno=$sp/sno] RETURN

<sp_pair> $s/sname, $p/descrip </sp_pair>

$p itera sobre os p-tuples que contêm elementos pnoque correspondem a elementos pno em sp-tuples

$s itera sobre s-tuples que contêm elementos sno que correspondem a elementos sno em sp_tuples

Sp_pair é um elemento constructor

Page 22: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

O que é uma interrogação XQuery? É uma expressão que:

Lê uma sequência de fragmentos de XML ou de valores atómicos

Retorna uma sequência de fragmentos de XML ou de valores atómicos

Formas principais que uma expressão XQuery pode tomar: Expressões de caminho Constructores Expressões FLWOR Expressões de listas Condições Expressões quantificadas Expressões de tipos de dados Funções

Page 23: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Relembrando o 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>

Page 24: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Expressões FLWOR (“Flower”)FOR ... LET... FOR... LET...WHERE...ORDER BY…RETURN...

Page 25: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Sumário das expressões FLWOR

Page 26: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Exemplo simples

Quais os títulos dos livros publicados depois de 1995:

FOR $x IN doc("bib.xml")/bib/book

WHERE $x/@year > 1995

RETURN $x/title

Resultado: <title> abc </title> <title> def </title> <title> ghi </title>

Page 27: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

DistinctPara cada autor de um livro editado pela Morgan

Kaufmann, listar todos os livros por ele publicados:

FOR $a IN distinct(doc("bib.xml") /bib/book[publisher=“Morgan Kaufmann”]/author)

RETURN <result>

{ $a,

FOR $t IN /bib/book[author=$a]/title

RETURN $t }

</result>

distinct = função que elimina duplicados

Page 28: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Resultado

<result> <author>Jones</author> <title> abc </title> <title> def </title> </result> <result> <author> Smith </author> <title> ghi </title> </result>

Page 29: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Cláusulas FOR e LET

FOR $x in expr -- associa $x a cada valor da lista dada por expr

LET $x = expr -- associa $x à lista completa dada por expr Útil para sub-expressões comuns e agregações

Page 30: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

FOR versus LET

FOR Associa variáveis de nó (node variables)

iteração

LET Associa variáveis de colecção (collection

variables) um valor

Page 31: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

FOR versus LET (exemplos)FOR $x IN doc("bib.xml")/bib/book

RETURN <result> { $x } </result>

Retorna: <result> <book>...</book></result> <result> <book>...</book></result> <result> <book>...</book></result> ...

LET $x IN doc("bib.xml")/bib/book

RETURN <result>{ $x } </result>

Retorna: <result> <book>...</book> <book>...</book> <book>...</book> ...</result>

Page 32: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Exemplo 1: FOR e LET

count = função de agregação que retorna o número de elementos

<big_publishers> FOR $p IN distinct(doc("bib.xml")//publisher) LET $b := doc("bib.xml")/book[publisher = $p] WHERE count($b) > 100 RETURN $p </big_publishers>

Page 33: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Exemplo 2: FOR e LET

Quais os livros cujo preço é maior do que a média dos preços:

LET $a=avg(doc("bib.xml")/bib/book/price)

FOR $b in document("bib.xml")/bib/book

WHERE $b/price > $a

RETURN $b

Page 34: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Junções

for $t in doc("books.xml")//title, $e in doc("reviews.xml")//entry where $t = $e/title return <review>{ $t, $e/remarks }</review>

<reviews> <entry> <title>TCP/IP Illustrated</title> <rating>5</rating> <remarks>Excellent technical content. Not much plot.</remarks> </entry>

</reviews>

Page 35: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Ordenação em XQuery

FOR $t IN doc("books.xml")//title ORDER BY $tRETURN $t

Listar os nomes dos livros por ordem alfabética

Page 36: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Diferentes especificações de ordem

for $a in doc("books.xml")//author order by $a/last descending, $a/first descendingreturn $a

Quais os autores ordenados por ordem inversa do último nome e depois pelo primeiro nome

Page 37: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Constructores Para construir um novo elemento com um nome conhecido e um

conteúdo, usar a sintaxe XML-like:<book isbn = "12345"><title>Huckleberry Finn</title></book> Se o conteúdo do elemento ou atributo tem que ser calculado,

então usar uma expressão aninhada delimitada por { }<book isbn = "{$x}">{ $b/title }</book> Se o nome e conteúdo tiverem quer calculados, então usar um

constructor calculadoelement { name-expr } { content-expr }attribute { name-expr } { content-expr }

Page 38: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

If-Then-Elsefor $b in doc("books.xml")//book return <book>

{ $b/title } { for $a at $i in $b/author where $i <= 2 return <author>{string($a/last), ", ",

string($a/first)}</author> } { if (count($b/author) > 2) then <author>et al.</author> else () }

</book>

Page 39: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Quantificadores existenciais

FOR $b IN //book

WHERE SOME $p IN $b//para SATISFIES

contains($p, "sailing")

AND contains($p, "windsurfing")

RETURN $b/title

Page 40: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Quantificadores universais

FOR $b IN //book

WHERE EVERY $p IN $b//para SATISFIES

contains($p, "sailing")

RETURN $b/title

Page 41: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

Tópicos próximas aulas

XSLT

Page 42: XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.

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/

www.w3.org/XML/Query W3C's working group on XML query languages

www.perfectxml.com/XQuery.html XQuery: A Guided Tour (book chapter from XQuery from the Experts)