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

Slides:



Advertisements
Apresentações semelhantes
Object Query Language - OQL
Advertisements

Introdução Marcus Vinícius Carneiro Teixeira.
Álgebra Relacional Marcelo Mendes Manaus
Banco de Dados Prof. Antonio.
SQL Avançado Continuação
SQL Structured Query Language (continuação)
Parte I Capítulo 5 Reutilizando código e escrevendo funções.
Helena Galhardas DEI IST
XQuery (1ª parte) Helena Galhardas DEI IST
XQuery Update Gestão e Tratamento da Informação DEI IST
Objectivos Objectivos
XSLT e recursividade estrutural
Otimização de Consultas em SQL Parte I - Planos de Execução e Equivalências de Expressões da Álgebra Relacional AULA 19 Profa. Sandra de Amo Programa.
Gerenciamento de Banco de Dados
Otimização de Consultas em SQL Planos de Execução e Equivalências de Expressões da Álgebra Relacional AULA 24 Profa. Sandra de Amo GBC053 – BCC
Subconsultas ou Consultas Aninhadas
Gerenciamento de Dados XML
SQL – Noções Gerais Por Márcia Jacyntha N. Rodrigues Lucena
Operadores Especiais da SQL
SCC Bancos de Dados e Suas Aplicações
SCC Bancos de Dados e Suas Aplicações
21 de Outubro de 2001jcr – ped2001 XPath Processamento Estruturado de Documentos 2001 By jcr.
Análise Semântica e Representação Intermédia
Tópicos de Sistemas de Informação A Carlos Oberdan Rolim Ciência da Computação.
Document Type Definition - DTD
XQuery (2ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em:
Linguagens de interrogação de dados XML XPath
Gestão e Tratamento de Informação Helena Galhardas DEI IST.
Design Patterns / Acesso ao banco de dados (java.sql)
Banco de Dados Aplicado ao Desenvolvimento de Software
Otimização de Consultas em SQL Planos de Execução
© CIn, UFPE1 Linguagens de consulta em XML – Enfoque XQuery Thiago Alves Costa CIn – UFPE Recife-PE, 3 de julho de 2003.
Desenvolvendo um script SQL
Treinamento sobre SQL.
VIEW - VISÕES Professor Esp. Diego André Sant’Ana
Faculdade Talentos Humanos - FACTHUS - Algoritmo I - Rogério Rodrigues
Baseado no material do Professor Raul Paradeda
REVISÃO Comandos SQL - DML SELECT * FROM ?.
Linguagem de Manipulação de Dados. 2 Conteúdos Introdução ao SQL Comando SELECT – Extracção de Dados  Pesquisas Simples  Restrições na pesquisa de dados.
Treinamento SQL Server
©Silberschatz, Korth and Sudarshan (modificado)10.1.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.
Faculdade Pernambucana - FAPE Setembro/2007
Linguagem SQL Prof. Juliano.
©Silberschatz, Korth and Sudarshan (modificado)4.2.1Database System Concepts Capítulo 4: SQL Estrutura básica Operações com conjuntos Funções de agregação.
©Silberschatz, Korth and Sudarshan (modificado)9.2.1Database System Concepts Capítulo 9: BDs Objecto-Relacional Relações imbricadas Tipos complexos e objectos.
©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.
Primeiro Trabalho Prático de GTI 2008/09 Resolução.
Sumário 1 SQL Embutida 2 Processamento de Consultas
Object Constraint Language Philip Stephen Medcraft.
Validando Documentos XML Vânia Maria Ponte Vidal
1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,
Unidade 3- Consulta a dados semi-estruturados. Requisitos desejáveis (Maier ’98) Expressividade – linguagem de consulta ao estilo SQL – possibilitar a.
XSLT e recursividade estrutural Helena Galhardas DEI IST.
Modelo de base de dados relacional
Programas e Refinamento Programming from Specifications Carroll Morgan Prentice-Hall, 1994 [Capítulo 1] Equipe: Klaus Cavalcante Tarcísio Quirino Raquel.
Modelo de base de dados relacional
Consultando Documentos XML com XQUERY Vânia Maria Ponte Vidal
Linguagens de interrogação de dados XML XPath Helena Galhardas DEI IST.
1 Introdução à Manipulação de Dados SQL – Structured Query Language  Tabela = Relação  DDL – Data Definition Language  Sub-conjunto do SQL que suporta.
SQL SERVER XML Guia Essencial para Programação com XML no SQL Server.
Aula 09: Comando SELECT: Ligações entre tabelas e Subconsultas
Recuperação de Dados Banco de Dados Carina Farias
Programação Funcional 4a. Seção de Slides Tuplas e Definição de Funções Locais em Haskell.
VBA – Visual Basic para Aplicativos
UCSal – Bacharelado em Informática
Faculdade Pernambuca - FAPE Compiladores Abril/2007 Compiladores Abril/2007.
Aula Prática 5 Recursão Monitoria  Na linguagem C, como em muitas outras linguagens, uma função pode chamar a si própria.  Uma função assim.
Programação para Internet Aula 12 SQL (Comandos de Consulta ao BD)
José Antônio da Cunha 2/6/2016 José Antônio - CEFET-RN 1 Disciplina: Banco de Dados.
Rhizome. Roteiro Definição Metas Características Arquitetura Tecnologias envolvidas Referências.
Transcrição da apresentação:

XQuery Helena Galhardas DEI IST

Agenda XPath – exercício XQuery

Exemplo Addison-Wesley Serge Abiteboul Rick Hull Victor Vianu Foundations of Databases 1995 Freeman Jeffrey D. Ullman Principles of Database and Knowledge Base Systems 1998 Addison-Wesley Serge Abiteboul Rick Hull Victor Vianu Foundations of Databases 1995 Freeman Jeffrey D. Ullman Principles of Database and Knowledge Base Systems 1998

Modelo de dados para XPath bib book publisherauthor.. Addison-WesleySerge Abiteboul A raíz O elemento raíz Idêntico ao modelo de dados de XQuery

Expressões simples /bib/book/year Resultado: /bib/paper/year Resultado: empty (não existem artigos)

Sumário dos exemplos bibelemento bib *qualquer elemento /root /bibbib debaixo de root bib/paperpaper debaixo de bib bib//paperpaper bebaixo de bib, a qq profundidade //paperpaper a qualquer profundidade paper|bookum paper ou um price price em book, em bib que têm um atributo price com price igual a 10

Exercício Considere um documento XML d que representa uma colecção de CDs. Assuma que o documento é válido no que diz respeito à seguinte DTD: 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

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"]]

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.

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

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

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

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

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

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"]

Bases de dados relacionais S(sno, sname) - Supplier P(pno, descrip) - Parts SP(sno, pno, price) – Supplies Part Exemplo de um esquema relacional

Interrogação select-project do SQL Quais os números das peças cuja descrição contém : “motor”? Select pno From P Where descrip like ‘motor’

Interrogação join SQL Quais os nomes dos fornecedores e a descrição das peças que eles fornecem? Select sname, descrip From S, P, SP Where S.sno = SP.sno and P.pno = SP.pno Equivalente a: Select sname, descrip From (S inner join SP on S.sno = SP.sno) Inner join P on p.pno = SP.pno

Dados relacionais vistos como dados em XML Relacional: S(sno, sname) - Supplier P(pno, descrip) - Parts SP(sno, pno, price) – Supplies Part XML:....

Interrogação select-project XQuery Quais os números cujas descrições contêm “motor”? For $p in document(“p.xml”)//p_tuple Where 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

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 $s/sname, $p/descrip $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

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

Relembrando o exemplo Addison-Wesley Serge Abiteboul Rick Hull Victor Vianu Foundations of Databases 1995 Freeman Jeffrey D. Ullman Principles of Database and Knowledge Base Systems 1998 Addison-Wesley Serge Abiteboul Rick Hull Victor Vianu Foundations of Databases 1995 Freeman Jeffrey D. Ullman Principles of Database and Knowledge Base Systems 1998

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

Sumário das expressões FLWOR

Exemplo simples Quais os títulos dos livros publicados depois de 1995: FOR $x IN doc("bib.xml") /bib/book WHERE > 1995 RETURN $x/title FOR $x IN doc("bib.xml") /bib/book WHERE > 1995 RETURN $x/title Resultado: abc def ghi

Distinct Para 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 { $a, FOR $t IN /bib/book[author=$a]/title RETURN $t } FOR $a IN distinct( doc("bib.xml") /bib/book[publisher=“Morgan Kaufmann”]/author) RETURN { $a, FOR $t IN /bib/book[author=$a]/title RETURN $t } distinct = função que elimina duplicados

Resultado Jones abc def Smith ghi

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

FOR versus LET FOR Associa variáveis de nó (node variables)  iteração LET Associa variáveis de colecção (collection variables)  um valor

FOR versus LET (exemplos) FOR $x IN doc("bib.xml") /bib/book RETURN { $x } FOR $x IN doc("bib.xml") /bib/book RETURN { $x } Retorna:... LET $x IN doc("bib.xml") /bib/book RETURN { $x } LET $x IN doc("bib.xml") /bib/book RETURN { $x } Retorna:...

Exemplo 1: FOR e LET count = função de agregação que retorna o número de elementos FOR $p IN distinct(doc("bib.xml")//publisher) LET $b := doc("bib.xml")/book[publisher = $p] WHERE count($b) > 100 RETURN $p FOR $p IN distinct(doc("bib.xml")//publisher) LET $b := doc("bib.xml")/book[publisher = $p] WHERE count($b) > 100 RETURN $p

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 LET $a=avg( doc("bib.xml") /bib/book/price) FOR $b in document("bib.xml") /bib/book WHERE $b/price > $a RETURN $b

Junções for $t in doc("books.xml")//title, $e in doc("reviews.xml")//entry where $t = $e/title return { $t, $e/remarks } for $t in doc("books.xml")//title, $e in doc("reviews.xml")//entry where $t = $e/title return { $t, $e/remarks } TCP/IP Illustrated 5 Excellent technical content. Not much plot. TCP/IP Illustrated 5 Excellent technical content. Not much plot.

Ordenação em XQuery FOR $t IN doc("books.xml")//title ORDER BY $t RETURN $t FOR $t IN doc("books.xml")//title ORDER BY $t RETURN $t Listar os nomes dos livros por ordem alfabética

Diferentes especificações de ordem for $a in doc("books.xml")//author order by $a/last descending, $a/first descending return $a for $a in doc("books.xml")//author order by $a/last descending, $a/first descending return $a Quais os autores ordenados por ordem inversa do último nome e depois pelo primeiro nome

Constructores Para construir um novo elemento com um nome conhecido e um conteúdo, usar a sintaxe XML-like: Huckleberry Finn Se o conteúdo do elemento ou atributo tem que ser calculado, então usar uma expressão aninhada delimitada por { } { $b/title } Se o nome e conteúdo tiverem quer calculados, então usar um constructor calculado element { name-expr } { content-expr } attribute { name-expr } { content-expr }

If-Then-Else for $b in doc("books.xml")//book return { $b/title } { for $a at $i in $b/author where $i <= 2 return {string($a/last), ", ", string($a/first)} } { if (count($b/author) > 2) then et al. else () } for $b in doc("books.xml")//book return { $b/title } { for $a at $i in $b/author where $i <= 2 return {string($a/last), ", ", string($a/first)} } { if (count($b/author) > 2) then et al. else () }

Quantificadores existenciais FOR $b IN //book WHERE SOME $p IN $b//para SATISFIES contains($p, "sailing") AND contains($p, "windsurfing") RETURN $b/title FOR $b IN //book WHERE SOME $p IN $b//para SATISFIES contains($p, "sailing") AND contains($p, "windsurfing") RETURN $b/title

Quantificadores universais FOR $b IN //book WHERE EVERY $p IN $b//para SATISFIES contains($p, "sailing") RETURN $b/title FOR $b IN //book WHERE EVERY $p IN $b//para SATISFIES contains($p, "sailing") RETURN $b/title

Tópicos próximas aulas XSLT

Referências Peter Wood, Slides on “Representing and Querying Data on the Web”, web.html. Dan Suciu, Slides on “The semistructured data model”, CSE 590ds: Management of XML and Semistructured Data, ds/01sp/ ds/01sp/ W3C's working group on XML query languages XQuery: A Guided Tour (book chapter from XQuery from the Experts)