29
XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: http://www-rocq.inria.fr/~abitebou/Master-SSD/slxquery.pdf)

XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Embed Size (px)

Citation preview

Page 1: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

XQuery (1ª parte)

Helena GalhardasDEI IST

(baseado nos slides de Ioana Manolescu, acessíveis em:

http://www-rocq.inria.fr/~abitebou/Master-SSD/slxquery.pdf)

Page 2: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Agenda

Aspectos básicos Porquê XQuery? Príncipios fundamantais

Modelo de dados XQuery Modelo simples para colecções de documentos Sequências Items Aspectos sintáticos do XQuery

Formulação de interrogações Preliminares Expressões FLOWR

Page 3: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Porquê XQuery?XQuery, a linguagem de interrogações de XML promovida pelo

W3C. http://www.w3.org/XML/Query Verificar as interrogações online (análise sintática):

http://www.w3.org/2005/qt-applets/xqueryApplet.html Interrogações de exemplo:

http://www.w3.org/TR/xquery-use-cases/

XQuery vs XSLT XSLT é uma linguagem procedimental, adequada para

transformar documentos XML XQuery é uma linguagem declarativa, adequada para aceder

de forma eficiente ao conteúdo de grandes colecções de documentos.

Nota: Nalguns casos, XSLT e XQuery podem ambos ser usados. A escolha tem a ver com uma questão de contexto ou de gosto.

Page 4: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Príncipios fundamentaisO desenho do XQuery satisfaz as regras seguintes:

Avaliação “Closed-form”: XQuery assenta sobre um modelo de dados, e cada interrogação mapeia uma instância do modelo noutra instância do modelo.

Composição. XQuery assenta sobre expressões que podem ser compostas para formar interogações arbitrariamente ricas.

Type awareness. XQuery pode associar um esquema XSD à interpretação de uma interrogação, mas tb opera com documentos sem esquema.

Compatibilidade com XPath: XQuery é uma extensão de XPath 2.0. Assim, qualquer expressão XPath é tb uma expressão XQuery

Análise sintática: inferência de tipos, re-escrita, optimização. O objectivo é explorar a natureza declarativa do XQuery para uma avaliação das interrogações mais inteligente.

Do ponto de vista da sintaxe, XQuery pretende ser simultaneamente concisa e simples.

Page 5: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Agenda

Aspectos básicos Porquê XQuery? Príncipios fundamantais

Modelo de dados XQuery Modelo simples para colecções de documentos Sequências Items Aspectos sintáticos do XQuery

Formulação de interrogações Preliminares Expressões FLOWR

Page 6: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Modelo simples para colecções de documentosUm valor é uma sequência de 0 ou n itemsUm item é um nó ou um valor atómicoExistem 7 tipos de nós: Document, a raíz do documento Element, com nome, que denota a estrutura do documento Attributes, com nome e valor, associados a um elemento Text, sem nome e com valor Comment; ProcessingInstruction; Namespace.

O modelo é bastante genérico: tudo é uma sequência de items. Isto cobre qualquer coisa, desde um único valor inteiro até grandes colecções de documentos XML.

Page 7: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Exemplos de valoresOs seguintes são exemplos de valores: 47 : uma sequência com um único item (valor

atómico) </a> : uma sequência com um único item (nó

Element) (1, 2, 3) : uma sequência com três valores atómicos (47, <a/>, ``Hello'') : uma sequência com três items,

cada um com um tipo diferente () a sequência vazia Um documento XML Muitos documentos XML (uma colecção)

Page 8: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Sequências: detalhesNão existe diferença entre um item e uma sequência de tamanho 1 =>

tudo é uma sequência

Uma sequência não pode ser aninhada uma sequência nunca contém outra sequência

A noção de valor null não existe no modelo XQuery um valor ou está lá, ou não está.

Uma sequência pode ser vazia.

Uma sequência pode conter items heterógeneos

As sequências são ordenadas: duas sequências com o mesmo conjunto de items, mas ordenadas de maneira diferente, são diferentes

Page 9: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Items: detalhesOs nós têm uma identidade; os valores não

têm

Element e Attribute têm anotações de tipo, que podem ser inferidas a partir do esquema XSD (ou desconhecidas se o esquema não fôr fornecido)

Os nós aparecem com uma determinada ordem nos seus documentos. A ordem dos atributos é indefinida.

Page 10: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Aspectos sintáticos do XQueryXQuery é uma linguagem case-sensitive: as palavras

chave têm que ser escritas em letra minúscula

XQuery constrói as interrogações como composição de expressões

Uma expressão produz um valor e não tem efeitos colaterais: não existe modificação no contexto, em particular nos valores de variáveis.

Os comentários em XQuery podem ser colocados em qualquer lado. Sintaxe:

(: This is a comment :)

Page 11: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Agenda

Aspectos básicos Porquê XQuery? Príncipios fundamantais

Modelo de dados XQuery Modelo simples para colecções de documentos Sequências Items Aspectos sintáticos do XQuery

Formulação de interrogações Preliminares Expressões FLOWR

Page 12: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Contexto de avaliação de interrogaçõesUma expressão é sempre avaliada com respeito a um contexto. Informação usada para analisar a expressão e avaliá-la. É uma ligeira generalização dos contextos XPath e XSLT, e incluí:

Correspondências (bindings) entre prefixos de namespaces e URIS de namespaces

Correspondências de valores (bindings) para variáveis Funções in-scope Um conjunto de colecções disponíveis e uma colecção por omissão Data e Tempo Nó de contexto corrente Posição do nó de contexto na sequência de contexto Tamanho da sequência

Page 13: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Expressões XQueryUma expressão aceita um valor (uma sequência de

items) e retorna um valorAs expressões podem tomar várias formas:

Expressões de caminho (path expressions) Constructores Expressões FLOWR; Expressões com listas Condições Expressões quantificadas Expressões com tipos de dados Funções

Page 14: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Expressões simplesOs valores são expressões:

Literais: 'Hello', 47, 4.7, 4.7E+2 Valores construídos: date(`2008-03-15'), true(), false() Variáveis: $x Sequências construídas: (1, (2, 3), (), (4, 5)), equiv. to (1, 2, 3,

4, 5), equiv. to 1 to 5.

Um documento XML é também uma expressão.

<employee empid="12345"><name>John Doe</name><job>XML specialist</job><deptno>187>/deptno><salary>125000>/salary></employee>

O resultado destas expressões são as próprias expressões!

Page 15: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Obter documentos e colecçõesUma interrogação aceita, em geral, como entrada uma

ou mais sequências de documentos XML, chamadas colecções

XQuery identifica as suas entradas com as seguintes

funções:

document() aceita a URI de um documento XML e retorna uma única ávore de documento

collection() aceita uma URI e retorna uma sequência

O resultado da função document() é o nó raiz da árvore de documento, e o seu tipo é Document

Page 16: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Acerca de XPathQualquer expressão XPath é uma interrogação. A expressão XPath seguinte retorna todos os títulos de

filmes na colecção filmes (para filmes publicados em 2005): collection('movies ')/ movie [ year =2005]/ title

O resultado é uma sequência de nós title: <title >A History of Violence </ title ><title >Match Point </ title >

Nota: A expressão XPath é avaliada para cada item (document) na sequência retornada por collection('movies')

Page 17: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

ConstructoresO XQuery permite a construção de novos elementos, cujo

conteúdo pode misturar etiquetas, valores e resultados de expressões XQuery

<titles >{ collection('movies ')//title }

</ titles >

As expressões podem ser usadas em qualquer nível da interrogação, e um constructor pode incluir várias expressões

Nota: Uma expressão tem que ser delimitada por chavetas {} de modo a ser reconhecida e processada

Page 18: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Constructores: outros exemplosOutros constructores de elementos:<chapter ref="[{1 to 5, 7, 9}]">É o mesmo que:<chapter ref="[1 2 3 4 5 7 9]"><chapter ref="[1 to 5, 7, 9]">

O constructor:<paper>{ $myPaper/@id }</paper>Cria um elemento da forma: <paper id="271"></paper>

Page 19: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

VariáveisUma variável é um nome que se refere a um valor. Pode ser usada

em qualquer expressão (incluindo a identidade) no seu âmbito.

<employee empid ="{$id}"><name>{ $name }</name>

{ $job }<deptno>{ $deptno }</deptno><salary>{ $SGMLspecialist +100000} </salary>

</employee>

Às variáveis $id, $name, $job, $deptno, $SGMLspecialist têm que corresponder valores

Page 20: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Expressões FLOWRAs mais poderosas expressões em XQuery. Uma expressão FLOWR (“flower”):

Itera sobre sequências (for) Define e faz corresponder valores a variáveis (let) Ordena o resultado (order); Aplica predicados (where); Constrói um resultado (return).

Um exemplo (sem let nem order):

for $m in collection('movies')/moviewhere $m/year >= 2005return<film>{ $m/ title/text()} ," directed by " {$m/director/last_name /text()}</film>

Page 21: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Expressões FLOWR e XPathNa sua forma mais simples, uma expressão FLWR

consiste numa alternativa às expressões XPath Exemplo:let $year:=1960for $a in document(“SpiderMan.xml”)//actorwhere $a/birth_date >= $yearreturn $a/last_name

É equivalente à expressão XPath: //actor[birth_date>=1960]/last_name

Nem todas as expressões FLOWR podem ser reescritas com XPath.

Page 22: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Um exemplo FLOWR complexoDevolver a descrição e preço médio de cada peça vermelha

que tem, pelo menos, 10 encomendas (supôr as colecções parts.xml e orders.xml):

for $p in doc("parts.xml")//part[color="Red"]let $o:=doc("orders.xml")//order[partno=$p/partno]where count($o) >= 10order by count($o) descendingreturn<important_red_part>{ $p/ description }<avg_price> {avg($o/price)} </avg_price></important_red_part>

Page 23: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

As claúsulas for e letAmbas as claúsulas fazem corresponder valores a variáveis. Mas:

for faz corresponder à variável, cada item da sequência de entrada for $x in /company/employee faz corresponder cada empregado a

$x, para cada item na sequência company.

let faz corresponder à variável, a sequência de entrada inteira:let $x := /company/employee atribuí a $x todos os empregados da

companhia

É de notar que for pode iterar sobre uma sequência heterógenea: for $a in document("Spider-Man.xml")//*where $a/birth_date >= 1960return $a/last_name

Aqui, a $a, vão sendo atribuídos todos os elementos do documento

Page 24: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

for + return = uma expressão!A combinação de for e return define uma expressão:

for define a sequência de entrada, return define a sequência de saída

Um ciclo simples:for $i in (1 to 10) return $i

Ciclos aninhados:for $i in (1 to 10) return

for $j in (1 to 2) return $i*$j

Variante sintáctica:for $i in (1 to 10) ,

$j in (1 to 2) return $i*$j

Combinação de ciclos:for $i in (for $j in (1 to 10) return $j*2)

return $i*3

Page 25: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Definição de variáveis com letlet faz corresponder um nome a um valor, ou seja a uma sequência

obtida por um meio conveniente, que pode incluir desde literais a interrogações complexas.

let $m:=document("movies/Spider-Man.xml")/moviereturn $m/director/last_name

Uma variável é só um sinónimo para o seu valor

let $m:=document("movies/Spider-Man.xml")/moviefor $a in $m/ actorreturn $a/last_name

O âmbito (scope) de uma variável é o da expressão FLWR em onde está definida.

As variáveis não podem ser redefinidas ou actualizadas dentro do seu âmbito.

Page 26: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

A claúsula whereA claúsula where é bastante semelhante ao seu sinónimo em SQLA diferença reside na estrutura muito mais flexível dos documentos XML. Exemplo:Quais os filmes dirigidos por M. Allen?

for $m in collection("movies")/moviewhere $m/director/last_name ="Allen"return $m/title

Parece-se com uma interrogação SQL? Sim, mas os predicados são interpretados de acordo com as regras XPath, ou

seja:1. Se um caminho (path) não existe, o resultado é falso e não existe nenhum

erro de tipos.2. Se uma expressão de caminho retorna vários nós, o resultado é verdadeiro

desde que exista pelo menos uma correspondência com o valor procurado Ex: Quais os filmes com Kirsten Dunst (nota: existem vários actores por

filme many )for $m in collection("movies")/moviewhere $m/actor/last_name =“Dunst"return $m/title

Page 27: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

A claúsula returnreturn é uma claúsula obrigatória de uma expressão FLWR. É instanciada uma vez para

cada correspondência da variável na claúsula for. Ex:for $m in collection("movies")/movielet $d := $m/directorwhere $m/actor/last_name ="Dunst"return

<div >{$m/ title/text(), " directed by",$d/first_name/text(), $d/last_name/text()} ," with ",<ol >

{for $a in $m/ actor return <li >{$a/ first_name , $a/ last_name

," as ", $a/ role }</li >}

</ol ></div >

Page 28: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Referências www.perfectxml.com/XQuery.html

XQuery: A Guided Tour (book chapter from XQuery from the Experts)

Ioana Manolescu, slides about XQuery, course about “Web Data Management and Distribution”, Master Recherche Informatique Paris Sud, http://www-rocq.inria.fr/~abitebou/Master-SSD/slxquery.pdf

Page 29: XQuery (1ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Tópicos próximas aulas

XQuery Update