consultando documentos xml com xquery n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Consultando Documentos XML com XQUERY PowerPoint Presentation
Download Presentation
Consultando Documentos XML com XQUERY

Loading in 2 Seconds...

play fullscreen
1 / 28

Consultando Documentos XML com XQUERY - PowerPoint PPT Presentation


  • 64 Views
  • Uploaded on

Consultando Documentos XML com XQUERY. Vânia Maria Ponte Vidal vvidal@lia.ufc.br. Por que uma linguagem de Consulta para XML?. Consultar bases de dados XML tornou-se necessário dado que grandes quantidades de dados estão sendo armazenados utilizando XML.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Consultando Documentos XML com XQUERY' - gagan


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
consultando documentos xml com xquery

Consultando Documentos XML com XQUERY

Vânia Maria Ponte Vidal

vvidal@lia.ufc.br

por que uma linguagem de consulta para xml
Por que uma linguagem de Consulta para XML?
  • Consultar bases de dados XML tornou-se necessário dado que grandes quantidades de dados estão sendo armazenados utilizando XML.
  • Dados XML são diferentes dos dados de bancos de dados relacionais ou orientados a objetos pois os dados XML não seguem uma estrutura rígida.
  • Devido a flexibilidade da XML, linguagens de consultas convencionais não são adequadas para especificar consultas em documentos XML
linguagens de consulta para xml
Linguagens de Consulta para XML
  • LOREL: foi projetada inicialmente para consultar dados semi-estruturados e recentemente foi estendida para manipulação de dados XML. É uma linguagem baseada em OQL.
  • XML-QL: estende linguagem SQL com uma cláusula explícita CONSTRUCT que permite a construção de documentos como resultado de consulta
  • XML-GL: linguagem de consulta gráfica que tem como base uma representação em grafos de documentos XML e DTDs
linguagens de consulta para xml1
Linguagens de Consulta para XML
  • XSL (Extensible Stylesheet Language): utiliza a linguagem XPath para selecionar os elementos a serem processados e para geração de textos
  • XQL: pode ser considerada uma extensão da sintaxe da XSL e foi projetada com o objetivo de ser sintaticamente mais simples e compacta, entretanto com o poder de expressão reduzido
xquery
XQuery
  • XML Query Language
  • Proposta pela W3C e agrega características de diversas outras linguagens de consulta para XML, bem como SQL e OQL
  • É uma linguagem funcional na qual a consulta é representada como uma expressão
  • Utiliza o conceito de expressões de caminho para navegar em árvores
  • Xquery é flexível o suficiente para consultar vários tipos de fontes de informação XML incluindo bancos de dados e documentos
xquery conceitos
XQuery - Conceitos

Uma consulta em XQuery é uma expressão que:

  • Lê um número de documentos XML ou fragmentos de documentos XML
  • Retorna uma seqüência de fragmentos XML bem-formados

Expressões XQuery podem ser:

  • Expressões de caminho
  • Construtores de elementos
  • Expressões FLWR
  • Expressões condicionais
  • Expressões com quantificadores
xquery express es de caminho
XQuery – Expressões de Caminho
  • Consiste de uma série de passos.
  • Cada passo pode aplicar um ou mais predicados para eliminar nós que não satisfazem uma determinada condição
  • Uma expressão de caminho pode começar com uma expressão que identifica um nó específico, como a função document (string), que retorna o nó raiz de um dado documento
  • Uma expressão de caminho também pode começar com “/” ou “//”, que representa um nó raiz implícito, determinado pelo ambiente no qual a consulta está sendo executada.
express es de caminho exemplo

doc

capitulo *

parte *

figura

titulo

numero

Expressões de Caminho - Exemplo

Q1: Obtenha todas as figuras cujo título é “Fig1”

procura um elemento figura em qualquer profundidade depois do elemento doc

document(“livro.xml”) / doc // figura[titulo= “Fig1”]

A função document lê um arquivo XML e retorna o nó raiz do documento

express es flwr
Expressões FLWR

Consiste de uma seqüência de um ou mais cláusulas FOR e/ou LET, seguidas por um WHERE opcional e terminada por um RETURN

  • FOR e LET: associam valores a uma ou mais variáveis
  • WHERE: expressão condicional
  • RESULT: retorna o resultado

FLWR = FOR-LET-WHERE-RETURN

express es flwr exemplo

livraria

livros

livro*

autor

pri_nome

sobrenome

titulo

Expressões FLWR - Exemplo

Q2: Obtenha os títulos dos livros cujo primeiro nome do autor é “José”

FOR $l IN document(“livraria.xml”)//livro

WHERE $l/autor/pri_nome = “José”

RETURN $l/titulo

FOR $l IN document(“livraria.xml”)//livro[autor/pri_nome = “José”]

RETURN $l/titulo

constru o de elementos
Construção de Elementos

Q3:Gerar documento XML cuja raiz é o elemento livros o qual contém todos os títulos dos livros cujo autor tem como primeiro nome “José”

<livros>

{

FOR $l INdocument(“livraria.xml”)//livro

WHERE $l/autor/pri_nome = “José”

RETURN $l/titulo

}

</livros>

constrói um elemento livros

flwr exemplo

livraria

livro*

titulo

ano

autor+

pri_nome

sobrenome

editor+

pri_nome

sobrenome

associação

editora

preço

FLWR - Exemplo

Q4: Obter o ano e o título de todos os livros publicados pela editora Addison-Wesley depois de 1991.

<livraria>

{

FOR $l IN document(doc.xml)/livraria/livro

WHERE $l/editora = “Addison-Wesley” and

$l/@ano > 1991

RETURN

<livro ano=“{$livro/@ano}”>

{$l/titulo}

</livro>

}

</livraria>

Expressão de caminho

@ é utilizado para acessar o valor do atributo

flwr exemplo1

livraria

livro*

titulo

ano

autor+

pri_nome

sobrenome

editor+

pri_nome

sobrenome

associação

editora

preço

FLWR - Exemplo

Q5: Criar elemento resultado contendo conjunto de elementos livroWesley (os livros publicados pela Addison-Wesley ), o qual contém o título e autor do livro.

<resultado>

{

FOR $l in document(“doc.xml")/livraria/livro,

WHERE $l/editora = “Addison-Wesley”

RETURN

< livroWesley >

{($l/titulo,

$l/autor )}

</livroWesley >

}

</resultado>

flwr exemplo2

livro

titulo

autor

seção +

@id

@dificuldade

titulo

figura *

titulo

caminho

FLWR - Exemplo

Q6: criar elemento listaSeções o qual contém, para cada elemento seção de livro1.xml, um elemento seção contendo dois atributos título e figcont cujo valor é o número de figuras contidas na seção.

livro1.xml

<listaSeções>

{

FOR $s in document(“livro1.xml")//seção

RETURN

<seção titulo="{ $s/titulo/text() }"

figcont="{ count($s/figura )}”/>

}

</listaSeções >

retorna apenas o conteúdo do elemento (sem as tags)

ordenando
Ordenando
  • Algumas vezes é necessário controlar a ordem dos elementos na sequência
  • Uma seqüência pode ser ordenada utilizando a cláusula SORTBY, que pode conter uma ou mais expressões ordenadas
  • Cada expressão ordenada pode vir seguida de uma palavra chave
    • Ascending (default)
    • descending
ordenando exemplo

livraria

livro*

titulo

ano

autor+

pri_nome

sobrenome

editor+

pri_nome

sobrenome

associação

editora

preço

Ordenando - Exemplo

Q7: Obtenha o título e o ano de todos os livros publicados pela editora Addison-Wesley depois de 1991 e em ordem alfabética

<livraria>

{

FOR $l IN document(doc.xml)/livraria/livro

WHERE $l/editora = “Addison-Wesley” and

$l/@ano > 1991

RETURN

<livro ano=“{$livro/@ano}”>

{$l/titulo}

</livro>

SORT BY(titulo)

}

</livraria>

express es condicionais
Expressões Condicionais
  • XQuery suporta expressões condicionais baseadas em if, then, else
  • Expressões condicionais são úteis quando a estrutura da informação a ser retornada depende de alguma condição
  • As expressões condicionais podem ser aninhadas e podem ser usadas em qualquer lugar onde um valor é esperado
express es condicionais exemplo

livraria

livro*

titulo

ano

autor+

pri_nome

sobrenome

editor+

pri_nome

sobrenome

associação

editora

preço

Expressões Condicionais - Exemplo

Q8: Gerar elemento contendo o título e os dois primeiros autores dos livros. Se o livro tem outros autores então acrescentar o elemento vazio <outros/>

<livros>

{ FOR $l IN document(“Livraria.xml”)//livro

RETURN

<livro>

{ ($l/titulo,

FOR$a in$l/autor[position( )<= 2]

RETURN $a ,

IF (count($l/autor) >2)

THEN <outros/>

ELSE ( ))}

</livro>

}

</livros>

Retorna a posição do elemento

expressão condicional

elemento vazio

express es com quantificadores
Expressões com Quantificadores
  • Ocasionalmente é necessário testar se algum elemento ou todos elementos de uma coleção satisfaz uma condição
  • Para isso utilizamos o quantificador existencial (some) e o quantificador universal (every)
express es com quantificadores1

livraria

livro*

titulo

ano

autor+

pri_nome

sobrenome

editor+

pri_nome

sobrenome

associação

editora

preço

Expressões com Quantificadores

Q9: Gerar elemento contendo para cada autor, o nome e os títulos de todos os livros do autor. Estes últimos, devem estar agrupados dentro de um elemento livrosDoAutor.

Retorna somente valores distintos

<resultado>

{FOR $a IN distinctvalues(document(“livraria.xml”)//autor)

RETURN

<autor>

{($a,

<livrosDoAutor>

{FOR $l IN document(“livraria.xml”)/livraria/livro

WHERE some$la IN $l/autor satisfies deep-equal($la,$a)

RETURN $l/titulo) }

<livrosDoAutor> }

</autor>

</resultado>

deep-equal( ) testa se dois nós tem a mesma estrutura e os mesmos valores

express es com quantificadores2

livraria

livro

titulo

autor

pri_nome

sobrenome

comentario *

Expressões com Quantificadores

Q10:Obtenha os títulos dos livros que tem “ótimo” em todos os comentários

<resultado>

{for $l in //livro

whereevery $c in $l/comentario contains($c, “ótimo”)

return $l/titulo

}

</resultado>

quantificador universal

fun es
Funções

Funções pré-definidas que podemos utilizar nas consultas XQuery (Xpath)

fun es exemplo

livraria

livro*

titulo

ano

autor+

pri_nome

sobrenome

editor+

pri_nome

sobrenome

associação

editora

preço

Funções - Exemplo

Q11:

Para cada livro contendo algum elemento cuja “label” termina com a string “or” e cujo conteúdo contém a string “José”, faça:

- Retorne o título do livro e o elemento encontrado

Procura a string no nó atual

* pega qualquer sub-elemento

for $l in document(“www.bn.com/livraria.xml”)//livro

let $e:= $l/* [contains(string(.),”José”) and

ends-with(local-name(.),”or”)]

where exists($e)

return

<book>

{ $l/titulo }

{ $e }

</book>

Indica que é o nome do elemento e não o conteúdo do elemento

fun es exemplo1

livro

titulo

autor

seção +

@id

@dificuldade

titulo

figura *

titulo

caminho

seção *

Funções - Exemplo

Q12:

Liste todos os elementos seção preservando seus atributos e hierarquia. Dentro de cada seção coloque o título da seção e um elemento com o número de figuras contidos imediatamente naquela seção

define functionresumo_seção(element $s)returns element

{ <section>

{ ($s/@* ,

$s/title ,

<numfig>{ count($s/figura) }</numfig> ,

for $ss in $s/seção

returnresumo_seção($ss) )}

</section> }

------------------------------------------------------------------

<resultado>

{ for $s in document(“livro.xml")/livro/seção

returnresumo_seção($s)}

</resultado>

* Obtém todos os atributos de seção

xquery1
XQuery

Uma consulta em XQuery é uma expressão que:

  • Lê um número de documentos XML ou fragmentos de documentos XML
  • Retorna uma seqüência de fragmentos XML bem-formados

Expressões XQuery podem ser:

  • Expressões de caminho
  • Construtores de elementos
  • Expressões FLWR
  • Expressões condicionais
  • Expressões com quantificadores
estudo de caso i
ESTUDO DE CASO I

Elemento Raiz

livraria

livro

autor

autor

nome

email

@ISBN

titulo

editora

preço

nome

email

autor

autor

Holz@cs.br

Steven

Holz@cs.br

Holzner

stev@cs.br

1234

Inside

XML

New

Riders

100,00

stev@cs.br

(*) Vide XML Schema em arquivo separado

xquery2
XQuery
  • Expressões FLWR – Exemplo (1)
  • - Obtenha ISBN, título e editora do livro cujo título é “Inside XML”.

<livroXML>

{FOR $q IN document(“liv.xml” ) / livraria / livro[titulo =“Inside XML”]

RETURN

<livro> { ($q/@ISBN,$q/titulo,$q/editora) } </livro>

}

</ livroXML >

xquery3
XQuery
  • Expressões FLWR – Exemplo (2)
  • - Obtenha o titulo dos livros de autoria de Steven.

<livrosSteven>

{ FOR $q IN document("Livraria.xml")/livraria/livro

LET $p := document("Livraria.xml")/livraria/autor[nome="Steven"]

WHERE $q/autor = $p/email

RETURN $q/titulo

}

</livrosSteven>