xquery update gestão e tratamento da informação dei ist (baseado nos slides de ioana manolescu,...

21
XQuery Update 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/slxqupdate.pdf)

Upload: internet

Post on 17-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

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

XQuery Update

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/slxqupdate.pdf)

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

Agenda Aspectos básicos

Porquê XQuery Update? Príncipios

Requisitos para a linguagem XQuery Update Conceitos XQuery Update Modelo de processamento do XQuery Update

Actualizações XQuery Expressões de inserção, remoção, actualização,

renomeação, transformação Exemplo de programação com XQuery Update

Comparação entre SQL e XQuery Update

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

Porquê XQuery Update?XQuery é uma linguagem só de leitura (read-only): pode retornar

uma instãncia do modelo de dados XQuery, mas não pode modificar uma instância existente

Paralelo em SQL:select... from... where...Sem:insert into table... update table...

Como as aplicações necessitam de ler e actualizar dados XML, surgiu:

XQuery Update Facility: um documento de trabalho, que ainda não é uma especificação

http://www.w3.org/TR/xquery-update-10/

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

Requisitos para a linguagem XQuery Update

Poder de expressividade: Inserção (Insert) Remoção (Delete) Actualização (Update) Cópia com nova identidade

Extensão do próprio XQuery: Simplifica a compreensão e aprendizagem da linguagem

Tem uma semântica bem definidaÉ concisaPresta-se a uma implementação eficiente...

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

Conceitos de XQuery UpdateTodas as expressões XQuery podem ser classificadas em: Expressões que efectuam actualização Expressões que não efectuam actualização

XQuery Update introduz 5 novos tipos de expressões: insert, delete, replace, rename: expressões que

efectuam actualizações transform: expressões que não efectuam actualizações

XQuery Update especifica: Lugares onde cada tipo de expressão pode aparecer Sintaxe e semântica de cada expressão nova

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

Modelo de processamento de XQuery UpdateA avaliação de uma expressão produz: Uma instância do modelo de dados XQuery Uma lista de actualizações pendentes: conjunto de primitivas de

actualização, ou seja mudanças ao estado de um nó, que têm que ser aplicadas

Na especificação corrente, uma das duas tem que ser vazia. Isto pode mudar no futuro.

(A avaliação de uma XQuery simples produz uma instância do modelo de dados XQuery)

Cada primitiva de actualização tem um nó alvo.As primitivas de actualização são verificadas, de modo a detectar

conflitos. Se não existir nenhum conflito, então são aplicadas

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

Expressões de inserção (1)Insert é uma expressão de actualização

Forma geral: InsertExpr::=insert (node|nodes) SourceExpr InsertExprTargetChoice

TargetExprInsertExprTargetChoice::=((as (first|last))? into)

| after | before

SourceExpr::=ExprSingleTargetExpr::=ExprSingle

A primeira expressão é chamada de fonte, e a segunda de alvo. As expressões fonte e alvo não devem efectuar actualizações Exemplos:

Inserir o elemento year depois do publisher do 1º livroinsert nodes <year>2005</year>after doc(bib.xml)/books/book[1]/published

Através da variável $article, inserir a lista de autores a ela associada como filhos do 3º livroinsert nodes $article/authoras last into doc(bib.xml)/books/book[3]

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

ExprSingle

ExprSingle ::= FLWORExpr | QuantifiedExpr | TypeswitchExpr | IfExpr | InsertExpr | DeleteExpr | RenameExpr | ReplaceExpr | TransformExpr | OrExpr

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

Expressões de inserção (2)A lista de actualizações pendentes (lap) é obtida da seguinte maneira: Avaliar o alvo de actualização, que são os nós que devem receber novos filhos Para cada um desses nós, adicionar à lap as correspondentes operações

adiciona-filho

Exemplo: Navegando através de várias váriáveis, inserir um novo relatório de polícia na lista de relatórios de polícia para um determinado acidente

insert node $new-police-report as lastinto doc(“insurance.xml”)//policies/policy[id=$pid]/driver[licence=$licence]/accident[date=$dateacc]/police–reports

Localiza o elemento police-reports adequado Para cada elemento dentro da variável $new-police-report, adiciona uma

operação adiciona-ultimo-filho à lap

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

Expressões de remoçãoDelete é uma expressão que efectua actualizações. Produz uma lista

de actualizações pendentes não vazia

Forma geral:deleteExpr ::= delete (node|nodes) TargetExpr

 TargetExpr ::= ExprSingle

Exemplos: Apagar o nome do último autor do primeiro livro de uma determinada

bibliografiadelete nodes doc(bib.xml)/books/book[1]/ author[last()]

Apagar todas as mensagens de email que são mais velhas do que 365 dias

delete nodes /email/message[fn:currentDate()-date > xdt:dayTimeDuration(P365D)]

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

Expressões de substituiçãoReplace é uma expressão de actualização. Produz uma lista de actualizações pendentes não vazia

Forma geral:ReplaceExpr::= replace (value of)? node TargetExpr with

ExprSingleTargetExpr::= ExprSingle

Se value of é especificado, a expressão de substituição é usada para modificar o valor de um nó, mas preservando a sua identidade

Exemplos: Substituir o editor (publisher) do primeiro livro pelo editor do segundo livroreplace node doc(“bib.xml”)/books/book[1]/publisherwith doc(“bib.xml”)/books/book[2]/publisher

Aumentar o preço do primeiro livro em 10%replace value of node doc(“bib.xml”)/books/book[1]/pricewith doc(“bib.xml”)/books/book[1]/price*1.1

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

Expressão de renomeaçãoRename é uma expressão que efectua actualizações

Forma geral:RenameExpr::= rename node TargetExpr as NewNameExprTargetExpr::= ExprSingleNewNameExpr::= ExprSingle

Exemplos: Renomear o primeiro elemento author do primeiro livro para main-author rename node doc(“bib.xml”)/books/book[1]/author[1]as “main–author”

Renomear o primeiro elemento author do primeiro livro com o valor da variável $newname.

rename node doc(“bib.xml”)/books/book[1]/author[1]as $newname

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

Expressões de transformação (1)Transform é uma expressão que não efectua actualizações

Forma geral:: TransformExpr::= copy $ VarName := ExprSingle (, $

VarName := ExprSingle)* modify ExprSingle return ExprSingle

Pode ser usada para criar cópias modificadas de nós existentes numa instância do modelo de dados XQuery

Uma expressão transform consiste em 3 claúsulas, denotadas pelas palavras chave: copy, modify, and return

Exemplo: retornar todos os gestores, omitindo os seus salários e substituindo-os pelo atributo xsi:nil.

Nota: Pode ser feito em XQuery, mas é rebuscado!

Transform retorna uma cópia modificada, sem produzir impacto na base de dados original (visto que é uma expressão que não efectua actualizações)

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

Expressões de transformação (2)

Documento inicial<employees>

<employee mgr="true" dept="Toys"><name>Smith</name><salary>100000</salary>

</employee><employee dept="Toys">

<name>Jones</name><salary>60000</salary>

</employee><employee mgr="true" dept="Shoes">

<name>Roberts</name><salary>150000</salary>

</employee></employees>

Resultado desejado

<employee mgr="true" dept="Toys">

<name>Smith</name>

<salary xsi:nil="true"/>

</employee>

<employee mgr="true" dept="Shoes">

<name>Roberts</name>

<salary xsi:nil="true"/>

</employee>

Pode ser feito em XQuery, mas não é fácil. Tentar como exercício....

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

Expressões de transformação (3)Retornar todos os gestores, omitindo os seus salários e substituindo-os com um atributo xsi:nil.

for $e in doc("employees.xml")//employeewhere $e/@manager=true()return

copy $emp := $emodify (

replace value of node $emp/salary with "" ,insert nodes (attribute xsi:nil{"true"})into $emp/salary

)return $em

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

Programar com XQuery Update (1)Sincronização de livro de endereços: Uma versão de arquivo e duas cópias c1 = a e c2 != a => propagar c2 para a e c1 c1 != a, c2 != a =>

Se possível, fazer o apanhado das diferenças e propagá-las para a, e depois para c1 e c2

Senão, dar erro

Entradas da agenda são da forma:

<entry><name> Benjamin </name><contact> [email protected] </contact>

</entry><entry>

<name> Anthony </name><contact> [email protected] </contact>

</entry>

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

Programar com XQuery Update (2)for $a in doc("archive.xml")//entry , $v1 in doc("copy1.xml")/version/entry , $v2 in doc("copy2.xml")/version/entry

where $a/name = $v1/nameand $v1/name = $v2/namereturn

if ($a/contact = $v1/contact and $v1/contact =$v2/contactthen ()else

if ($v1/contact = $v2/contact)then replace value of node $a/contact with $v1/contactelseif ($a/contact = $v1/contact)then (

replace value of node $a/contactwith $v2/contact ,replace value of node $v1/contactwith $v2/contact ...

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

Programar com XQuery Update (3)...

if ($a/contact = $v1/contact )then ...else

if ($a/contact = $v2/contact )then ( replace value of node $a/contact

with $v1/contact ,replace value of node $v2/contact

with $v1/contact )else ( insert node<fail> <arch>{ $a }</arch>

<v1>{ $v1 }</v1> <v2>{ $v2 }</v2>

</fail>into doc("log.xml")/ log ),

replace value of node doc("archive.xml")/*/last-synch-time with current-dateTime()

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

Notas sobre XQuery UpdateXQuery Update não é uma linguagem de interrogação, porque falta: Controlo sobre o âmbito de snapshots, isto é, quando é que as

minhas actualizações se tornam visíveis para outra interrogação? XQuery Update: depois da interrogação corrente ter acabado de se executar

Controlo sobre a atomicidade, isto é, que expressões têm que ser executadas atomicamente?

Tratamento de erros

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

Implementações XQuery Update eXist MonetDB XQilla Saxon

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

Referências Ioana Manolescu, slides about XQuery Update, course

about “Web Data Management and Distribution”, Master Recherche Informatique Paris Sud, http://www-rocq.inria.fr/~abitebou/Master-SSD/slxqupdate.pdf

www.perfectxml.com/XQuery.html

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