A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Consultando Documentos XML com XQUERY Vânia Maria Ponte Vidal

Apresentações semelhantes


Apresentação em tema: "Consultando Documentos XML com XQUERY Vânia Maria Ponte Vidal"— Transcrição da apresentação:

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 Expressões de Caminho - Exemplo document(“livro.xml”) / doc // figura[titulo= “Fig1”] Q1: Obtenha todas as figuras cujo título é “Fig1” A função document lê um arquivo XML e retorna o nó raiz do documento procura um elemento figura em qualquer profundidade depois do elemento doc doc capitulo * parte * figura titulo numero

9 Expressões FLWR FOR e LET: associam valores a uma ou mais variáveis WHERE: expressão condicional RESULT: retorna o resultado FLWR = FOR-LET-WHERE-RETURN 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

10 Expressões FLWR - Exemplo FOR $l IN document(“livraria.xml”)//livro[autor/pri_nome = “José”] RETURN $l/titulo Q2: Obtenha os títulos dos livros cujo primeiro nome do autor é “José” livraria livros livro* autor pri_nome sobrenome titulo FOR $l IN document(“livraria.xml”)//livro WHERE $l/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é” { FOR $l IN document (“livraria.xml”)//livro WHERE $l/autor/pri_nome = “José” RETURN $l/titulo } constrói um elemento livros

12 FLWR - Exemplo Q4: Obter o ano e o título de todos os livros publicados pela editora Addison-Wesley depois de 1991. livro* livraria titulo ano autor+ pri_nome sobrenome editor+ associação editora pri_nome sobrenome preço { FOR $l IN document(doc.xml)/livraria/livro WHERE $l/editora = “Addison-Wesley” and $l/@ano > 1991 RETURN {$l/titulo} } @ é utilizado para acessar o valor do atributo Expressão de caminho

13 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. { FOR $l in document(“doc.xml")/livraria/livro, WHERE $l/editora = “Addison-Wesley” RETURN {($l/titulo, $l/autor )} } livro* livraria titulo ano autor+ pri_nome sobrenome editor+ associação editora pri_nome sobrenome preço

14 FLWR - Exemplo livro1.xml { FOR $s in document(“livro1.xml")//seção RETURN <seção titulo="{ $s/titulo/text() }" figcont="{ count($s/figura )}”/> } retorna apenas o conteúdo do elemento (sem as tags) 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. livro caminho @dificuldade @id seção + autor titulo figura * titulo

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 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 livro* livraria titulo ano autor+ pri_nome sobrenome editor+ associação editora pri_nome sobrenome preço { FOR $l IN document(doc.xml)/livraria/livro WHERE $l/editora = “Addison-Wesley” and $l/@ano > 1991 RETURN {$l/titulo} SORT BY (titulo) }

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 Expressões Condicionais - Exemplo { FOR $l IN document(“Livraria.xml”)//livro RETURN { ($l/titulo, FOR $a in $l/autor[position( )<= 2] RETURN $a, IF (count($l/autor) >2) THEN ELSE ( ))} } expressão condicional Retorna a posição do elemento elemento vazio 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 livro* livraria titulo ano autor+ pri_nome sobrenome editor+ associação editora pri_nome sobrenome preço

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 Expressões com Quantificadores {FOR $a IN distinctvalues(document(“livraria.xml”)//autor) RETURN {($a, {FOR $l IN document(“livraria.xml”)/livraria/livro WHERE some $la IN $l/autor satisfies deep-equal($la,$a) RETURN $l/titulo) } } deep-equal( ) testa se dois nós tem a mesma estrutura e os mesmos valores Retorna somente valores distintos 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. livro* livraria titulo ano autor+ pri_nome sobrenome editor+ associação editora pri_nome sobrenome preço

21 Expressões com Quantificadores Q10 :Obtenha os títulos dos livros que tem “ótimo” em todos os comentários {for $l in //livro where every $c in $l/comentario contains($c, “ótimo”) return $l/titulo } quantificador universal livro titulo autor pri_nome sobrenome comentario * livraria

22 Funções Funções pré-definidas que podemos utilizar nas consultas XQuery (Xpath) concatConcatena duas ou mais strings starts-withIndica se o valor de uma string começa com o caracter do valor da outra string ends-withIndica se o valor de uma string termina com o caracter do valor da outra string containsIndica se o valor de uma string contém caracteres iguais ao valor da outra string string-lengthRetorna o tamanho da string substring – before Retorna os caracteres de uma string que precedem os caracteres que são iguais aos outra string substring – after Retorna os caracteres de uma string que que vem depois dos caracteres que são iguais aos outra string

23 Funções - Exemplo 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 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 { $l/titulo } { $e } * pega qualquer sub-elemento Indica que é o nome do elemento e não o conteúdo do elemento Procura a string no nó atual Q11: livro* livraria titulo ano autor+ pri_nome sobrenome editor+ associação editora pri_nome sobrenome preço

24 Funções - Exemplo livro caminho @dificuldade @id seção + autor titulo figura * titulo seção * 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 function resumo_seção (element $s) returns element { { ($s/@*, $s/title, { count($s/figura) }, for $ss in $s/seção return resumo_seção($ss) )} } ------------------------------------------------------------------ { for $s in document(“livro.xml")/livro/seção return resumo_seção ($s)} * Obtém todos os atributos de seção Q12:

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 @ISBNtituloeditorapreço autor StevenHolzner email stev@cs.br Holz@cs.br nome livro email nome autor livraria 1234 Inside XML New Riders 100,00 Elemento Raiz autor Holz@cs.br stev@cs.br (*) Vide XML Schema em arquivo separado

27 XQuery {FOR $q IN document(“liv.xml” ) / livraria / livro[titulo =“Inside XML”] RETURN { ($q/@ISBN,$q/titulo,$q/editora) } } Expressões FLWR – Exemplo (1) - Obtenha ISBN, título e editora do livro cujo título é “Inside XML”.

28 XQuery { 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 } Expressões FLWR – Exemplo (2) - Obtenha o titulo dos livros de autoria de Steven.


Carregar ppt "Consultando Documentos XML com XQUERY Vânia Maria Ponte Vidal"

Apresentações semelhantes


Anúncios Google