Unidade 3 Consulta a dados semiestruturados Consulta Requisitos

  • Slides: 55
Download presentation
Unidade 3 - Consulta a dados semi-estruturados

Unidade 3 - Consulta a dados semi-estruturados

Consulta Requisitos desejáveis (Maier ’ 98) l Expressividade – – l Semântica precisa –

Consulta Requisitos desejáveis (Maier ’ 98) l Expressividade – – l Semântica precisa – l o resultado de uma consulta deve poder ser utilizado dentro de uma outra consulta Consulta ao esquema – l muito importante para XML Composição – l linguagem de consulta ao estilo SQL possibilitar a restruturação de dados semi-estruturados visando otimização Facilitar a geração automática de consultas

Consulta Expressões de caminho (Path expressions) l l Expressões que permitem navegar no grafo

Consulta Expressões de caminho (Path expressions) l l Expressões que permitem navegar no grafo de dados Expressões de caminho simples – – sequências de labels exemplos root. pessoas. filhos – {&p 1, &p 2, &p 3} {&p 2, &p 3} semântica l o resultado de uma expressão de caminho r. l 1. …. ln, onde l 1, …, ln são os labels e r um objeto, é o conjunto de nodos do grafo acessíveis de r por um caminho do grafo tal que os arcos percorridos passam sucessivamente pelos labels l 1, …, ln.

Consulta Expressões de caminho l l l Expressões de caminho generalizadas Idéia: além de

Consulta Expressões de caminho l l l Expressões de caminho generalizadas Idéia: além de especificar completamente um caminho, permite exprimir restrições (constraints) sobre o caminho Utilização de expressões regulares Exemplos _ é um caracter coringa que designa um label qualquer (pessoa|estudante). _. idade As expressões de caminho definidas até o presente retornam os conjuntos de objetos e não de dados semi-estruturados

Consulta LOREL: uma linguagem de consultas para dados semi-estruturadoss l Dados exemplo &n 1

Consulta LOREL: uma linguagem de consultas para dados semi-estruturadoss l Dados exemplo &n 1 author date title book author db biblio &bib book &n 2 paper &n 3 date title Roux Combalusier 1976 Database systems Smith 1999 Database systems

Consulta LOREL l l Sintaxe baseada em OQL Exemplo select author: X from biblio.

Consulta LOREL l l Sintaxe baseada em OQL Exemplo select author: X from biblio. book. author X l Semântica – para cada nodo do conjunto biblio. book. author l l l X toma o valor deste nodo cria um nodo de label author e de valor X Resultado {author: "Roux", author: "Combalusier", author: "Smith"}

SELECT author: X FROM biblio. book. author X Query 1: resposta biblio &o 1

SELECT author: X FROM biblio. book. author X Query 1: resposta biblio &o 1 paper book author &o 12 &o 24 &o 29 . . . title author &o 47 Smith date &o 48 1999 title author &o 52 &o 50 author &96 date &25 1976 Roux Combalusier Database Systems Resposta = {author: “Smith”, author: “Roux”, author: “Combalusier”} &30 Database Systems

Consulta LOREL l l Restrição dentro da cláusula where Exemplo select row: X from

Consulta LOREL l l Restrição dentro da cláusula where Exemplo select row: X from biblio. _ X where "Smith" in X. author l Resultado {row: { author: "Smith", date: 1999, title: "Database systems" } } l Observações – – X. author é uma expressão de caminho X. author é um conjunto de valores, "Smith" in X. author é um predicado de pertinência a um conjunto

SELECT row: X FROM biblio. _ X WHERE “Smith” in X. author Query 2:

SELECT row: X FROM biblio. _ X WHERE “Smith” in X. author Query 2: row biblio . . . &o 1 paper &o 12 book &o 24 title author &o 47 Smith date &o 48 1999 resposta = {row: {author: “Smith”, date: 1999, title: “Database…”}, row: … } row &o 29 . . . author resposta title author &o 52 &o 50 &96 date &25 1976 Roux Combalusier Database Systems &30 Database Systems

Consulta LOREL l l Restrições dentro da cláusula where Exemplo select author: Y from

Consulta LOREL l l Restrições dentro da cláusula where Exemplo select author: Y from biblio. _ X, X. author Y, X. title Z where Z matches "*[D|d]atabase*" l Resultado – l retorna os autores de publicações cujo título contém a palavra "database". Tratamento de uma consulta select-from-where – três momentos: l l l determinação do conjunto de valores definido dentro da cláusula from restrição deste conjunto com a cláusula definida dentro do where projeção dentro da cláusula select

Consulta LOREL l Criação de vários nodos dentro da projeção select row: {title: Y,

Consulta LOREL l Criação de vários nodos dentro da projeção select row: {title: Y, author: Z} from biblio. book X, X. title Y, X. author Z l Composição de consultas select row: { select author: Y from X. author Y} from biblio. book X l Lorel também permite o uso de expressões de caminho na cláusula select: select X. author from biblio. book X

SELECT row: ( SELECT author: Y FROM X. author Y) FROM biblio. book X

SELECT row: ( SELECT author: Y FROM X. author Y) FROM biblio. book X Query 3: row resposta biblio &o 1 paper &o 12 book &o 29 . . . &o 47 Smith &o 48 1999 title author &o 52 &o 50 author title author date &a 2 author &o 24 author row &a 1 book &96 date &25 1976 Roux Combalusier Database Systems Resposta = {row: {author: “Smith”}, row: {author: “Roux”, author: “Combalusier”, }, } &30 Database Systems

Consulta LOREL l Outro exemplo de composição select row: { select author: Y, title:

Consulta LOREL l Outro exemplo de composição select row: { select author: Y, title: T from X. author Y X. title T} from biblio. book X where "Roux" in X. author

SELECT ( SELECT row: {author: Y, title: T} FROM X. author Y, X. title

SELECT ( SELECT row: {author: Y, title: T} FROM X. author Y, X. title T) FROM biblio. book X WHERE “Roux” in X. author Query 4: row resposta biblio &o 1 paper &o 12 &a 1 book &o 24 author &o 29 . . . &o 47 Smith date &o 48 1999 title author &o 52 &o 50 title &a 2 author title author row &96 date &25 1976 Roux Combalusier Database Systems &30 Resposta = {row: {author: “Roux”, title: “Database…”}, row: {author: “Combalusier”, title: “Database…”}, } Database Systems (Query está errada no livro texto)

Consulta LOREL l Semântica dos predicados de comparação select a: A, from r 1.

Consulta LOREL l Semântica dos predicados de comparação select a: A, from r 1. row r 2. row X. a A, where B=B' – – c: C X, Y, X. b B, Y. b B', Y. c C se r 1 e r 2 são representações de relações, esta consulta calcula a junção natural destas relações sobre os atributos b. Dentro do contexto semi-estruturado, certos valores de B ou B' podem ser multi-valorados

Consultas LOREL l Comparações de valores select row: X from biblio. paper X where

Consultas LOREL l Comparações de valores select row: X from biblio. paper X where X. author = "Smith" – X. author é um conjunto de objetos, "Smith" é um valor atômico where exists Y in X. author : Y="Smith" select row: X from biblio. paper X where X. year>1993

Lorel l l Pequenas diferenças sintáticas na expressões de caminho (% ao invés de

Lorel l l Pequenas diferenças sintáticas na expressões de caminho (% ao invés de _, # ao invés de _*) Convenção de caminho: torna-se: SELECT biblio. book. author FROM biblio. book WHERE biblio. book. year = 1999 SELECT X. author FROM biblio. book X WHERE X. year = 1999

Lorel l Variáveis existenciais: SELECT biblio. book. year FROM biblio. book WHERE biblio. book.

Lorel l Variáveis existenciais: SELECT biblio. book. year FROM biblio. book WHERE biblio. book. author = “Roux” – O que acontece com livros com múltiplos autores? Author é existencialmente quantificado: SELECT biblio. book. year FROM biblio. book X, X. author Y WHERE Y = “Roux”

Un. QL Patterns: SELECT row: X WHERE {biblio. book: {author “Roux”, title X}} in

Un. QL Patterns: SELECT row: X WHERE {biblio. book: {author “Roux”, title X}} in DB, Equivalente a: SELECT row: X FROM biblio. book Y, Y. author Z, Y. title X WHERE Z=“Roux”

Un. QL Variávels Label: – “encontre todos os tipos de publicação e seus títulos

Un. QL Variávels Label: – “encontre todos os tipos de publicação e seus títulos onde Roux é autor” SELECT row: {type: L, title : Y} WHERE {biblio. L: {author “Roux”, title X}} in DB,

Bases de dadoss semi-estruturados O sistema LORE

Bases de dadoss semi-estruturados O sistema LORE

LORE O sistema LORE l l LORE: Lightweight Object Repository Um SGBD para dados

LORE O sistema LORE l l LORE: Lightweight Object Repository Um SGBD para dados semi-estruturados Desenvolvido em Stanford Utiliza o modelo OEM

LORE Arquitetura GUI Applications A P I consultas parser préprocessador Compilação de consultas gerador

LORE Arquitetura GUI Applications A P I consultas parser préprocessador Compilação de consultas gerador de planos de consultas optimizador de consultas Data Engine Armazenamento físico gerente de objetos operadores físicos gerente de índices gerente de dados externos

Linguagem de Consulta XML-QL

Linguagem de Consulta XML-QL

XML-QL l l Primeira linguagem declarativa para XML Como obter uma query language para

XML-QL l l Primeira linguagem declarativa para XML Como obter uma query language para XML rapidamente ? – – Assumir OEM como modelo de dados Usar características de Un. QL e Stru. QL l l – Patterns Templates Projetar uma sintaxe XML-like

Patterns em XML-QL Encontre todos os autores que publicaram pela Morgan Kaufmann: WHERE <book>

Patterns em XML-QL Encontre todos os autores que publicaram pela Morgan Kaufmann: WHERE <book> <publisher> <name> Morgan Kaufmann </> <author> $A </> </book> in “www. a. b. c/bib. xml” CONSTRUCT <author> $A </> Abreviação: </> fecha qualquer tag.

Exemplo 2 Encontre os autores e títulos dos livros da AWL where <book> <publisher>

Exemplo 2 Encontre os autores e títulos dos livros da AWL where <book> <publisher> <name> AWL </> <title> $T </> <author> $A </> in “www. a. b. c/bib. xml” construct <resultado> <author> $A </> <title> $T </>

Resultado do Exemplo 2 <resultado> <author> Ceri </author> <title> Active Database System </title> </resultado>

Resultado do Exemplo 2 <resultado> <author> Ceri </author> <title> Active Database System </title> </resultado> <author> Widom </author> <title> Active Database System </title> </resultado> <author>. . . </author> <title>. . . </title> </resultado>

Patterns em XML-QL Encontre as linguagens nas quais Jones têm publicado: where <book language=$X>

Patterns em XML-QL Encontre as linguagens nas quais Jones têm publicado: where <book language=$X> <author> Jones </author> </book> in “www. a. b. c/bib. xml” construct <result> $X </>

Construtores em XML-QL Encontre todos os autores e as linguagens nas quais eles publicaram:

Construtores em XML-QL Encontre todos os autores e as linguagens nas quais eles publicaram: where <book language = $L> <author> $A </> in “www. a. b. c/bib. xml” construct <result> <author> $A </> <lang> $L </> Resultado: <result> <author>Smith</author> <lang>English </lang> </result> <author>Smith</author> <lang>French</lang> </result> <author>Doe </author> <lang>English </lang> </result>. .

Consultas aninhadas em XML-QL Encontre os autores e as linguagens nas quais eles publicaram;

Consultas aninhadas em XML-QL Encontre os autores e as linguagens nas quais eles publicaram; agrupando por autores: WHERE <book. author> $A </> in “www. a. b. c/bib. xml” CONSTRUCT <result> <author> $A </> WHERE <book language = $L> <author> $A </> </> in “www. a. b. c/bib. xml” CONSTRUCT <lang> $L </> </> Obs: book. author é uma expressão de caminho

Resultado: <result> <author>Smith</author> <lang>English</lang> <lang>French</lang> <lang>…</lang> … </result> <author>Doe</author> <lang>English</lang> … </result>

Resultado: <result> <author>Smith</author> <lang>English</lang> <lang>French</lang> <lang>…</lang> … </result> <author>Doe</author> <lang>English</lang> … </result>

Junção em XML-QL Encontre os artigos que têm pelo menos um autor que também

Junção em XML-QL Encontre os artigos que têm pelo menos um autor que também escreveu um livro em inglês WHERE <article> <author> $a </> CONTENT_AS $p in “www. a. b. c/bib. xml” <book language = $L> <author > $a </> in “www. a. b. c/bib. xml”, $L = “English” CONSTRUCT <result> $p </>

Variáveis Tag em XML-QL Encontre as publicações publicadas em 2000 nas quais Carlos é

Variáveis Tag em XML-QL Encontre as publicações publicadas em 2000 nas quais Carlos é um autor ou editor WHERE <$p> <title> $t </> <year> 2000 </> <$e> Carlos </> in “www. a. b. c/bib. xml”, <$e> in {author, editor} CONSTRUCT <$p> <title> $t </> <$e> Carlos </>

Path Expressions em XML-QL Seja o DTD: <!ELEMENT peca (nome fabricante peca*) > <!ELEMENT

Path Expressions em XML-QL Seja o DTD: <!ELEMENT peca (nome fabricante peca*) > <!ELEMENT nome CDATA> <!ELEM fabricante CDATA> A consulta: “Encontre os nomes da peças que contêm um fabricante “Ford” sem considerar o nível de aninhamento em que a peça occorre: WHERE <peca*> <nome> $r </> <fabricante> Ford </> in “www. a. b. c/pecas. xml” CONSTRUCT <resultado> $r </>

Path Expressions em XML-QL No exemplo anterior peca* é uma expressão de caminho regular

Path Expressions em XML-QL No exemplo anterior peca* é uma expressão de caminho regular que é equivalente à seguinte sequência infinita de patterns: <nome> $r </> <fabricante> Ford</> <peca> <nome> $r </> <fabricante> Ford</> </> <peca> <nome> $r </> <fabricante> Ford</> </>. . .

Path Expressions em XML-QL A consulta a seguir ilustra o uso de alternativa (|),

Path Expressions em XML-QL A consulta a seguir ilustra o uso de alternativa (|), concatenação(. ) e asterisco(*) em expressões regulares: WHERE <peca+. (subpeca|componente. parte)> $r </> IN “www. a. b. c/peca. xml” CONSTRUCT <resultado> $r </>

Integrando dados de diferentes fontes XML Encontre os nomes e CPF das fontes www.

Integrando dados de diferentes fontes XML Encontre os nomes e CPF das fontes www. receita. gov. br/contribuintes. xml e www. ufpb. br/professores. xml WHERE <professores> <nome> $n </> <cpf> $c </> IN “www. ufpb. br/professores. xml”, <contribuintes> <cpf> $c </> <imposto> $i </> IN “www. receita. gov. br/contribuintes. xml” CONSTRUCT <resultado> $n $i </>

Linguagem de Consulta X-Query

Linguagem de Consulta X-Query

XQuery l l l Baseda em Quilt (que é baseda em XML-QL) http: //www.

XQuery l l l Baseda em Quilt (que é baseda em XML-QL) http: //www. w 3. org/TR/xquery/2/2001 XML Query data model

FLWR (“Flower”) Expressions FOR. . . LET. . . WHERE. . . RETURN. .

FLWR (“Flower”) Expressions FOR. . . LET. . . WHERE. . . RETURN. . .

XQuery Encontre os títulos dos livros publicados após 1995: FOR $x IN document("bib. xml")/bib/book

XQuery Encontre os títulos dos livros publicados após 1995: FOR $x IN document("bib. xml")/bib/book WHERE $x/year > 1995 RETURN $x/title Resultado: <title> abc </title> <title> def </title> <title> ghi </title>

XQuery Para cada autor de um livro publicado pela Morgan Kaufmann, listar os livros

XQuery Para cada autor de um livro publicado pela Morgan Kaufmann, listar os livros publicados: FOR $a IN distinct(document("bib. xml") /bib/book[publisher=“Morgan Kaufmann”]/author) RETURN <result> $a, FOR $t IN /bib/book[author=$a]/title RETURN $t </result> distinct = elimina duplicatas

XQuery Resultado: <result> <author>Jones</author> <title> abc </title> <title> def </title> </result> <author> Smith </author>

XQuery Resultado: <result> <author>Jones</author> <title> abc </title> <title> def </title> </result> <author> Smith </author> <title> ghi </title> </result>

XQuery l FOR $x in expr -- liga $x a cada valor na lista

XQuery l FOR $x in expr -- liga $x a cada valor na lista expr l LET $x = expr -- liga $x à inteira lista expr – Usado para subexpressões comuns e para agregações

XQuery <big_publishers> FOR $p IN distinct(document("bib. xml")//publisher) LET $b : = document("bib. xml")/book[publisher =

XQuery <big_publishers> FOR $p IN distinct(document("bib. xml")//publisher) LET $b : = document("bib. xml")/book[publisher = $p] WHERE count($b) > 100 RETURN $p </big_publishers> count = função (aggregate) que retorna o número de elementos

XQuery Encontre os livros cujos preços são maiores do que a média de preços:

XQuery Encontre os livros cujos preços são maiores do que a média de preços: FOR $b in document("bib. xml")/bib/book LET $a=avg(document("bib. xml")/bib/book/price) WHERE $b/price > $a RETURN $b

XQuery Sumário: l FOR-LET-WHERE-RETURN = FLWR FOR/LET Clauses Lista de tuplas WHERE Clause Lista

XQuery Sumário: l FOR-LET-WHERE-RETURN = FLWR FOR/LET Clauses Lista de tuplas WHERE Clause Lista de tuplas RETURN Clause Instância do modelo de dados Xquery

FOR versus LET FOR l liga variáveis nodo iteration LET l liga variáveis coleção

FOR versus LET FOR l liga variáveis nodo iteration LET l liga variáveis coleção one value

FOR versus LET FOR $x IN document("bib. xml")/bib/book RETURN <result> $x </result> LET $x

FOR versus LET FOR $x IN document("bib. xml")/bib/book RETURN <result> $x </result> LET $x IN document("bib. xml")/bib/book RETURN <result> $x </result> Retorna: <result> <book>. . . </book></result>. . . Retorna: <result> <book>. . . </book> <book>. . . </result>

Coleções em XQuery l Conjuntos e Bags – – l l /bib/book/author = uma

Coleções em XQuery l Conjuntos e Bags – – l l /bib/book/author = uma coleção do tipo Bag Distinct(/bib/book/author) = uma coleção do tipo conjunto (Set) LET $a = /bib/book $a é uma coleção $b/author uma coleção (vários autores. . . ) RETURN <result> $b/author </result> Retorna: <result> <author>. . . </author> <author>. . . </result>

Ordenação em XQuery <publisher_list> FOR $p IN distinct(document("bib. xml")//publisher) RETURN <publisher> <name> $p/text() </name>

Ordenação em XQuery <publisher_list> FOR $p IN distinct(document("bib. xml")//publisher) RETURN <publisher> <name> $p/text() </name> , FOR $b IN document("bib. xml")//book[publisher = $p] RETURN <book> $b/title , $b/price </book> SORTBY(price DESCENDING) </publisher> SORTBY(name) </publisher_list> Argumentos de sort referem-se ao namespace da cláusula RETURN e não da cláusula FOR

If-Then-Else FOR $h IN //holding RETURN <holding> $h/title, IF $h/@type = "Journal" THEN $h/editor

If-Then-Else FOR $h IN //holding RETURN <holding> $h/title, IF $h/@type = "Journal" THEN $h/editor ELSE $h/author </holding> SORTBY (title)

Quantificador Existencial FOR $b IN //book WHERE SOME $p IN $b//para SATISFIES contains($p, "sailing")

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

Quantificador Universal FOR $b IN //book WHERE EVERY $p IN $b//para SATISFIES contains($p, "sailing")

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