XQuery Update Gestão e Tratamento da Informação DEI IST

Slides:



Advertisements
Apresentações semelhantes
Python: Funções Claudio Esperança.
Advertisements

Python: Dicionários Claudio Esperança.
Professor: Marcus Sampaio Monitor: Eduardo Santiago Moura
Object Query Language - OQL
Introdução Marcus Vinícius Carneiro Teixeira.
gerador de código intermediário
Álgebra Relacional Marcelo Mendes Manaus
Banco de Dados Prof. Antonio.
SQL Avançado Continuação
SQL Structured Query Language (continuação)
Banco de Dados SQL TRIGGERS (Gatilhos)
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone:
SISTEMAS DE INFORMAÇÃO Sistemas de Bancos de Dados 2º Semestre – 2010 Pedro Antonio Galvão Junior Fone:
XQuery (1ª parte) Helena Galhardas DEI IST
XSLT e recursividade estrutural
Visões Marilde Santos.
PostGreSQL Primeiros Passos
Mutação de Interface Interface Mutation: An Approach for Integration Testing Marcio E. Delamaro José C. Maldonado Aditya P. Mathur.
SQL – Noções Gerais Por Márcia Jacyntha N. Rodrigues Lucena
Árvores Introdução e Aplicações Árvores de Busca Binária Fundamentos
Análise Léxica Supondo o trecho de programa abaixo:
Banco de dados Profª Kelly Medeiros.
PostgreSQL.
Query Tuning Lílian Simão Oliveira.
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Tópicos de Sistemas de Informação A Carlos Oberdan Rolim Ciência da Computação.
LISTAS Uma lista é uma estrutura de dados muito comum na programação não numérica (com particular destaque na computação simbólica onde representa quase.
Jquery – Parte 3 Linguagem de scripts.
Funções Declaração function nomedafunção (arg_1, arg_2,..., arg_n) corpoDaFunção end.
Concurrent Versions System Leandro Augusto de Oliveira
Tópicos avançados em internet B Carlos Oberdan Rolim Ciência da Computação.
SQL Álvaro Vinícius de Souza Coêlho
Recapitular XML... Gestão e Tratamento de Informação DEI IST.
XQuery (2ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em:
Linguagens de interrogação de dados XML XPath
Monitoria GDI Aula Prática
Como fazer um SQL Injection Marco Ferreira Rui Cunha
Otimizador de consultas
Linguagem de Programação JAVA
Primeira aula de PL/SQL Parte II
Linguagem de programação
Estudo de Caso: um editor de documentos
Listas, Filas e Pilhas Katia Guimarães.
III – O Modelo OR Estudo de Caso, modelo Oracle 10g.
Desenvolvendo um script SQL
VIEW - VISÕES Professor Esp. Diego André Sant’Ana
Linguagem de Definição de Dados
Baseado no material do Professor Raul Paradeda
PostGres: Um Banco de Dados Orientado a Objetos
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
©Silberschatz, Korth and Sudarshan (modificado)4.1.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
Projeto de Sistemas de Informação Prof. Schneider Oracle Object-Relational.
Postgres Storage Tecnologia de Base de Dados Nuno Costa – Nº
Back-End Compilação aula-11-back-end.pdf.
Triggers (Gatilhos) Professor Esp. Diego André Sant’Ana
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
Banco de Dados I I Comandos SQL
Linguagem SQL Prof. Juliano.
Copyright 1998, Departamento de Informática da UFPE. Todos os direitos reservados sob a legislação em vigor. Variáveis e métodos estáticos, Passagem de.
Semântica de Linguagens de Programação
Fundamentos de Banco de Dados Fundamentos de Banco de Dados Prof. Gale 2º. Semestre 2008.
Primeiro Trabalho Prático de GTI 2008/09 Resolução.
1 Introdução à Manipulação de Dados SQL – Structured Query Language  Tabela = Relação  DDL – Data Definition Language  Sub-conjunto do SQL que suporta.
Professor Me. Jeferson Bussula Pinheiro.
Linguagem de definição de dados - SQL
OCLE Object Constraint Language Environment Fábio Moura CIn-UFPE.
BD SQL (Insert, Update, Delete) e Select Hayslan Nicolas Colicheski Bucarth – IFRO / 2015 –
Banco de Dados -Aprendendo conceitos -Usando o SQL Conf para:
1 Programação de Banco de Dados José Antônio da Cunha George Azevedo da Silva.
Programação para Internet Aula 11 SQL (Introdução a linguagem, comandos de modificação: Create, Drop, Alter, Insert, Delete, Update)
Transcrição da apresentação:

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)

Agenda Aspectos básicos Príncipios Actualizações XQuery 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

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/

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 É concisa Presta-se a uma implementação eficiente...

Conceitos de XQuery Update Todas 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

Modelo de processamento de XQuery Update A 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

Expressões de inserção (1) Insert é uma expressão de actualização Forma geral:  InsertExpr::=insert (node|nodes) SourceExpr InsertExprTargetChoice TargetExpr InsertExprTargetChoice::=((as (first|last))? into) | after | before SourceExpr::=ExprSingle TargetExpr::=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º livro insert 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º livro insert nodes $article/author as last into doc(bib.xml)/books/book[3] If before (or after) is specified: The inserted nodes become the preceding (or following) siblings of the target node.

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

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 last into 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

Expressões de remoção Delete é 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 bibliografia delete 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)]

Expressões de substituição Replace é 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 ExprSingle TargetExpr::= 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 livro replace node doc(“bib.xml”)/books/book[1]/publisher with 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]/price with doc(“bib.xml”)/books/book[1]/price*1.1

Expressão de renomeação Rename é uma expressão que efectua actualizações Forma geral: RenameExpr::= rename node TargetExpr as NewNameExpr TargetExpr::= ExprSingle NewNameExpr::= 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. as $newname

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)

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 mgr="true" dept="Shoes"> <name>Roberts</name> <salary>150000</salary> </employees> Resultado desejado <employee mgr="true" dept="Toys"> <name>Smith</name> <salary xsi:nil="true"/> </employee> <employee mgr="true" dept="Shoes"> <name>Roberts</name> Pode ser feito em XQuery, mas não é fácil. Tentar como exercício....

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")//employee where $e/@manager=true() return copy $emp := $e modify ( replace value of node $emp/salary with "" , insert nodes (attribute xsi:nil{"true"}) into $emp/salary ) return $em

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> benjamin@inria.fr </contact> </entry> <name> Anthony </name> <contact> tony@uni-toulon.fr </contact>

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/name and $v1/name = $v2/name return if ($a/contact = $v1/contact and $v1/contact =$v2/contact then () else if ($v1/contact = $v2/contact) then replace value of node $a/contact with $v1/contact if ($a/contact = $v1/contact) then ( replace value of node $a/contact with $v2/contact , replace value of node $v1/contact with $v2/contact ...

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()

Notas sobre XQuery Update XQuery 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

Implementações XQuery Update eXist MonetDB XQilla Saxon

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)