1 / 28

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?. Consultar bases de dados XML tornou-se necessário dado que grandes quantidades de dados estão sendo armazenados utilizando XML.

gagan
Download Presentation

Consultando Documentos XML com XQUERY

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Consultando Documentos XML com XQUERY Vânia Maria Ponte Vidal vvidal@lia.ufc.br

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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.

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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>

  14. 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)

  15. 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

  16. 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>

  17. 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

  18. 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

  19. 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)

  20. 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

  21. 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

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

  23. 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

  24. 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

  25. 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

  26. 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

  27. 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 >

  28. 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>

More Related