Title: Unidade 3- Consulta a dados semi-estruturados
1Unidade 3- Consulta a dados semi-estruturados
2Requisitos desejáveis (Maier 98)
Consulta
- Expressividade
- linguagem de consulta ao estilo SQL
- possibilitar a restruturação de dados
semi-estruturados - Semântica precisa
- muito importante para XML
- Composição
- o resultado de uma consulta deve poder ser
utilizado dentro de uma outra consulta - Consulta ao esquema
- visando otimização
- Facilitar a geração automática de consultas
3Expressões de caminho (Path expressions)
Consulta
- Expressões que permitem navegar no grafo de dados
- Expressões de caminho simples
- sequências de labels
- exemplos
- root.pessoas p1,p2,p3
- root.pessoas.filhos p2,p3
- semântica
- o resultado de uma expressão de caminho r.l1.
.ln, onde l1,,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 l1,,ln.
4Expressões de caminho
Consulta
- 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 - (pessoaestudante)._.idade
- As expressões de caminho definidas até o presente
retornam os conjuntos de objetos e não de dados
semi-estruturados
5LOREL uma linguagem de consultas para dados
semi-estruturadoss
Consulta
Roux
author
Combalusier
author
date
1976
n1
title
Database systems
book
Smith
author
biblio
bib
db
n2
date
1999
book
title
Database systems
paper
n3
6LOREL
Consulta
- Sintaxe baseada em OQL
- Exemplo
- select authorX
- from biblio.book.author X
- Semântica
- para cada nodo do conjunto biblio.book.author
- X toma o valor deste nodo
- cria um nodo de label author e de valor X
- Resultado
- author"Roux", author"Combalusier",
author"Smith"
7SELECT author XFROM biblio.book.author X
Query 1
resposta
author
Resposta author Smith, author Roux,
author Combalusier
author
author
8LOREL
Consulta
- Restrição dentro da cláusula where
- Exemplo
- select rowX
- from biblio._ X
- where "Smith" in X.author
- Resultado
- row
- author"Smith",
- date1999,
- title"Database systems"
-
-
- 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
9SELECT row XFROM biblio._ XWHERE Smith in
X.author
Query 2
row
resposta
. . .
resposta row authorSmith,
date 1999, title Database,
row
row
10LOREL
Consulta
- Restrições dentro da cláusula where
- Exemplo
- select authorY
- from biblio._ X,
- X.author Y,
- X.title Z
- where Z matches "Ddatabase"
- Resultado
- retorna os autores de publicações cujo título
contém a palavra "database". - Tratamento de uma consulta select-from-where
- três momentos
- 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
-
11LOREL
Consulta
- Criação de vários nodos dentro da projeção
- select rowtitleY, authorZ
- from biblio.book X, X.title Y, X.author Z
- Composição de consultas
- select row select authorY from X.author Y
- from biblio.book X
- Lorel também permite o uso de expressões de
caminho na cláusula select - select X.author
- from biblio.book X
12SELECT row ( SELECT author Y
FROM X.author Y)FROM biblio.book X
Query 3
row
resposta
row
a1
Resposta row authorSmith, row
authorRoux, authorCombalusier,
,
a2
author
author
author
13LOREL
Consulta
- Outro exemplo de composição
- select row select authorY, titleT
- from X.author Y
- X.title T
- from biblio.book X
- where "Roux" in X.author
14SELECT ( SELECT row author Y, title T
FROM X.author Y, X.title T)FROM
biblio.book XWHERE Roux in X.author
Query 4
row
resposta
Resposta row authorRoux,
title Database, row authorCombalusier,
title Database,
a1
row
a2
author
title
title
author
(Query está errada no livro texto)
15LOREL
Consulta
- Semântica dos predicados de comparação
- select aA, cC
- from r1.row X,
- r2.row Y,
- X.a A, X.b B, Y.b B', Y.c C
- where BB'
- se r1 e r2 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
16LOREL
Consultas
- Comparações de valores
- select rowX
- 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 rowX
- from biblio.paper X
- where X.yeargt1993
17Lorel
- Pequenas diferenças sintáticas na expressões de
caminho ( ao invés de _, ao invés de _) - Convenção de caminhotorna-se
SELECT biblio.book.authorFROM biblio.bookWHERE
biblio.book.year 1999
SELECT X.authorFROM biblio.book XWHERE X.year
1999
18Lorel
- Variáveis existenciais
- O que acontece com livros com múltiplos autores?
Author é existencialmente quantificado
SELECT biblio.book.yearFROM biblio.bookWHERE
biblio.book.author Roux
SELECT biblio.book.yearFROM biblio.book X,
X.author YWHERE Y Roux
19UnQL
Patterns Equivalente a
SELECT row XWHERE biblio.book author
Roux,
title X in DB,
SELECT row XFROM biblio.book Y,
Y.author Z, Y.title XWHERE
ZRoux
20UnQL
- Variávels Label
- encontre todos os tipos de publicação e seus
títulos onde Roux é autor
SELECT row type L, title YWHERE biblio.L
author Roux,
title X in DB,
21Bases de dadoss semi-estruturados
22O sistema LORE
LORE
- LORE Lightweight Object Repository
- Um SGBD para dados semi-estruturados
- Desenvolvido em Stanford
- Utiliza o modelo OEM
23Arquitetura
LORE
GUI
Applications
A P I
Compilação de consultas
consultas
gerador de planos de consultas
optimizador de consultas
parser
préprocessador
Data Engine
gerente de índices
gerente de objetos
gerente de dados externos
operadores físicos
Armazenamento físico
24Linguagem de Consulta
25XML-QL
- Primeira linguagem declarativa para XML
- Como obter uma query language para XML
rapidamente ? - Assumir OEM como modelo de dados
- Usar características de UnQL e StruQL
- Patterns
- Templates
- Projetar uma sintaxe XML-like
26Patterns em XML-QL
Encontre todos os autores que publicaram pela
Morgan Kaufmann
WHERE ltbookgt ltpublishergt
ltnamegt Morgan Kaufmann lt/gt
lt/gt ltauthorgt
A lt/gt lt/bookgt in
www.a.b.c/bib.xml CONSTRUCT ltauthorgt A lt/gt
Abreviação lt/gt fecha qualquer tag.
27Exemplo2
Encontre os autores e títulos dos livros da
AWL where ltbookgt ltpublishergt ltnamegt AWL lt/gt
lt/gt lttitlegt T lt/gt ltauthorgt A lt/gt lt/gt
in www.a.b.c/bib.xml construct
ltresultadogt ltauthorgt A lt/gt lttitlegt T lt/gt
lt/gt
28Resultado do Exemplo2
ltresultadogt ltauthorgt Ceri lt/authorgt lttitlegt
Active Database System lt/titlegt lt/resultadogt ltresu
ltadogt ltauthorgt Widom lt/authorgt lttitlegt Active
Database System lt/titlegt lt/resultadogt ltresultadogt
ltauthorgt ... lt/authorgt lttitlegt ...
lt/titlegt lt/resultadogt
29Patterns em XML-QL
Encontre as linguagens nas quais Jones têm
publicado
where ltbook languageXgt ltauthorgt Jones
lt/authorgt lt/bookgt in
www.a.b.c/bib.xml construct ltresultgt X lt/gt
30Construtores em XML-QL
Encontre todos os autores e as linguagens nas
quais eles publicaram
where ltbook language Lgt
ltauthorgt A lt/gt lt/gt in
www.a.b.c/bib.xml construct ltresultgt ltauthorgt
A lt/gt ltlanggt L lt/gt lt/gt
Resultado ltresultgt ltauthorgtSmithlt/authorgt
ltlanggtEnglish lt/langgt lt/resultgt ltresultgt
ltauthorgtSmithlt/authorgt ltlanggtFrenchlt/langgt
lt/resultgt ltresultgt ltauthorgtDoe lt/authorgt
ltlanggtEnglish lt/langgt lt/resultgt . . . .
31Consultas aninhadas em XML-QL
Encontre os autores e as linguagens nas quais
eles publicaram agrupando por autores
WHERE ltbook.authorgt A lt/gt in www.a.b.c/bib.xml
CONSTRUCT ltresultgt ltauthorgt A lt/gt
WHERE ltbook language Lgt
ltauthorgt A lt/gt
lt/gt in www.a.b.c/bib.xml
CONSTRUCT ltlanggt L lt/gt
lt/gt
Obs book.author é uma expressão de caminho
32ltresultgt ltauthorgtSmithlt/authorgt
ltlanggtEnglishlt/langgt
ltlanggtFrenchlt/langgt ltlanggtlt/langgt
lt/resultgt ltresultgt
ltauthorgtDoelt/authorgt
ltlanggtEnglishlt/langgt lt/resultgt
Resultado
33Junção em XML-QL
Encontre os artigos que têm pelo menos um autor
que também escreveu um livro em inglês
WHERE ltarticlegt ltauthorgt a lt/gt lt/gt
CONTENT_AS p in www.a.b.c/bib.xml ltbook
language Lgt ltauthor gt a lt/gt lt/gt in
www.a.b.c/bib.xml, L English CONSTRUCT
ltresultgt p lt/gt
34Variáveis Tag em XML-QL
Encontre as publicações publicadas em 2000 nas
quais Carlos é um autor ou editor
WHERE ltpgt lttitlegt t lt/gt ltyeargt 2000
lt/gt ltegt Carlos lt/gt lt/gt in
www.a.b.c/bib.xml, ltegt in author,
editor CONSTRUCT ltpgt lttitlegt t lt/gt
ltegt Carlos lt/gt lt/gt
35Path Expressions em XML-QL
Seja o DTD lt!ELEMENT peca (nome fabricante
peca) gt lt!ELEMENT nome CDATAgt lt!ELEM fabricante
CDATAgt 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 ltpecagt ltnomegt r lt/gt
ltfabricantegt Ford lt/gt in www.a.b.c/pecas.xml
CONSTRUCT ltresultadogt r lt/gt
36Path Expressions em XML-QL
No exemplo anterior peca é uma expressão de
caminho regular que é equivalente à seguinte
sequência infinita de patterns ltnomegt r lt/gt
ltfabricantegt Fordlt/gt ltpecagt ltnomegt r lt/gt
ltfabricantegt Fordlt/gt lt/gt ltpecagt ltpecagt ltnomegt r
lt/gt ltfabricantegt Fordlt/gt lt/gt lt/gt ltpecagt ltpecagt
ltpecagt ltnomegt r lt/gt ltfabricantegt Fordlt/gt lt/gt
lt/gt ...
37Path Expressions em XML-QL
A consulta a seguir ilustra o uso de alternativa
(), concatenação(.) e asterisco() em expressões
regulares WHERE ltpeca.(subpecacomponente.parte
)gt r lt/gt IN www.a.b.c/peca.xml CONSTRUCT
ltresultadogt r lt/gt
38Integrando 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
ltprofessoresgt ltnomegt n lt/gt ltcpfgt c lt/gt
lt/gt IN www.ufpb.br/professores.xml,
ltcontribuintesgt ltcpfgt c lt/gt ltimpostogt i
lt/gt lt/gt IN www.receita.gov.br/contribuintes.x
ml CONSTRUCT ltresultadogt n i lt/gt
39Linguagem de Consulta
40XQuery
- Baseda em Quilt (que é baseda em XML-QL)
- http//www.w3.org/TR/xquery/2/2001
- XML Query data model
41FLWR (Flower) Expressions
FOR ... LET... WHERE... RETURN...
42XQuery
Encontre os títulos dos livros publicados após
1995
FOR x IN document("bib.xml")/bib/book WHERE
x/year gt 1995 RETURN x/title
Resultado lttitlegt abc lt/titlegt lttitlegt def
lt/titlegt lttitlegt ghi lt/titlegt
43XQuery
Para cada autor de um livro publicado pela Morgan
Kaufmann, listar os livros publicados
FOR a IN distinct(document("bib.xml")
/bib/bookpublisherMorgan
Kaufmann/author) RETURN ltresultgt
a, FOR t IN
/bib/bookauthora/title
RETURN t lt/resultgt
distinct elimina duplicatas
44XQuery
Resultado ltresultgt
ltauthorgtJoneslt/authorgt lttitlegt abc
lt/titlegt lttitlegt def lt/titlegt
lt/resultgt ltresultgt ltauthorgt Smith
lt/authorgt lttitlegt ghi lt/titlegt
lt/resultgt
45XQuery
- FOR x in expr -- liga x a cada valor na lista
expr - LET x expr -- liga x à inteira lista expr
- Usado para subexpressões comuns e para agregações
46XQuery
ltbig_publishersgt FOR p IN
distinct(document("bib.xml")//publisher)
LET b document("bib.xml")/bookpublisher
p WHERE count(b) gt 100 RETURN
p lt/big_publishersgt
count função (aggregate) que retorna o número
de elementos
47XQuery
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
aavg(document("bib.xml")/bib/book/price) WHERE
b/price gt a RETURN b
48XQuery
- Sumário
- 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
49FOR versus LET
- FOR
- liga variáveis nodo ? iteration
- LET
- liga variáveis coleção ? one value
50FOR versus LET
Retorna ltresultgt ltbookgt...lt/bookgtlt/resultgt
ltresultgt ltbookgt...lt/bookgtlt/resultgt ltresultgt
ltbookgt...lt/bookgtlt/resultgt ...
FOR x IN document("bib.xml")/bib/book RETURN
ltresultgt x lt/resultgt
LET x IN document("bib.xml")/bib/book RETURN
ltresultgt x lt/resultgt
Retorna ltresultgt ltbookgt...lt/bookgt
ltbookgt...lt/bookgt
ltbookgt...lt/bookgt ... lt/resultgt
51Coleções em XQuery
- Conjuntos e Bags
- /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...)
Retorna ltresultgt ltauthorgt...lt/authorgt
ltauthorgt...lt/authorgt
ltauthorgt...lt/authorgt
... lt/resultgt
RETURN ltresultgt b/author lt/resultgt
52Ordenação em XQuery
ltpublisher_listgt FOR p IN distinct(document("
bib.xml")//publisher) RETURN ltpublishergt
ltnamegt p/text() lt/namegt ,
FOR b IN document("bib.xml")//bookpublisher
p RETURN ltbookgt
b/title ,
b/price
lt/bookgt SORTBY(price DESCENDING)
lt/publishergt SORTBY(name)
lt/publisher_listgt
Argumentos de sort referem-se ao namespace da
cláusula RETURN e não da cláusula FOR
53If-Then-Else
FOR h IN //holding RETURN ltholdinggt
h/title, IF
h/_at_type "Journal"
THEN h/editor ELSE
h/author lt/holdinggt SORTBY
(title)
54Quantificador Existencial
FOR b IN //book WHERE SOME p IN b//para
SATISFIES contains(p, "sailing") AND
contains(p, "windsurfing") RETURN b/title
55Quantificador Universal
FOR b IN //book WHERE EVERY p IN b//para
SATISFIES contains(p, "sailing") RETURN
b/title