xquery (1ª parte) gestão e tratamento da informação dei ist (baseado nos slides de ioana...

28
XQuery (1ª parte) Gestão e Tratamento da Informação DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: http://www-rocq.inria.fr/~abitebou/Master-SSD/slxquery.pdf)

Upload: internet

Post on 18-Apr-2015

106 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: XQuery (1ª parte) Gestão e Tratamento da Informação DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

XQuery (1ª parte)

Gestão e Tratamento da InformaçãoDEI 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) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação 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 XQueryAná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) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em: abitebou/Master-SSD/slxquery.pdf

Aspectos sintáticos do XQuery

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) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação 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.Incluí:

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

– Correspondências de valores (bindings) para variáveis– Funções– 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) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação 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)) ou (1, 2, 3, 4, 5) ou

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) Gestão e Tratamento da Informação 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 documentocollection() 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) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação 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 23: XQuery (1ª parte) Gestão e Tratamento da Informação 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 24: XQuery (1ª parte) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação 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)for $m in collection("movies")/moviewhere $m/actor/last_name =“Dunst"return $m/title

Page 27: XQuery (1ª parte) Gestão e Tratamento da Informação 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) Gestão e Tratamento da Informação 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