XQuery

Propaganda
GERÊNCIA DE DADOS SEMI
ESTRUTURADOS
- XQUERY
Prof. Angelo Augusto Frozza
XQUERY (XML QUERY LANGUAGE)

XQuery é para XML o que o SQL é para Banco de
Dados.
XQUERY (XML QUERY LANGUAGE)

XQuery é uma linguagem para encontrar e extrair
elementos e atributos de documentos XML.

P.ex.: “Selecione todos os registros de livros com preço
maior do que R$ 30,00, armazenados no documento
books.xml, ordenado por titulo.”
for $x in doc("books.xml")/bookstore/book
where $x/price > 30
order by $x/title
return $x/title
XQUERY (XML QUERY LANGUAGE)

XQuery 1.0 e Xpath 2.0 compartilham o mesmo modelo
de dados e suportam as mesmas funções e operadores.

XQuery pode ser usada para:
Extrair informação para usar em um Web Service;
 Gerar relatórios resumidos;
 Transformar dados XML em XHTML;
 Procurar em documentos Web por informações relevantes.


XQuery é um padrão W3C.
XQUERY (XML QUERY LANGUAGE)

Limitações da XPath
recupera somente porções de um documento XML
 incapaz de produzir resultados mais elaborados de consulta

combinação (junção) de dados XML
 geração de novas estruturas de dados


XQuery
recomendação recente da W3C (2007)
 maior poder de expressão que a XPath

ESTRUTURA BÁSICA

DE UMA
CONSULTA
Expressões FLWR (“flower”)
(acrônimo de “for, Let, Where, Order by, Return”)
for variável in expressão XPath
[let associação de novas variáveis]
[where condição]
return estrutura de resultado

Exemplo:
for $liv in /livros/livro
where $liv/autor/nome = "Maria Souza"
return <livrosMariaSouza>
{ $liv/@ISBN,
$liv/titulo }
</livrosMariaSouza>
ESTRUTURA BÁSICA

DE UMA
CONSULTA
Resultado da consulta
for $liv in /livros/livro
where $liv/autor/nome = "Maria Souza"
return <livrosMariaSouza>
{ $liv/@ISBN,
$liv/titulo }
</livrosMariaSouza>
<livrosMariaSouza>
<livro @ISBN = "114">
<titulo>Viagem à Serra</titulo>
<livro @ISBN = "417">
<titulo>Tempo de Mudança</titulo>
<livro @ISBN = "993">
<titulo>Auto-Biografia</titulo>
</livrosMariaSouza>
ESTRUTURA BÁSICA

DE UMA
CONSULTA
Uso da cláusula let
for $liv in /livros/livro
let $pDesc := $liv/preco - $liv/preco * 0.1
where $liv/@tipo = "ficcao"
return {$liv/titulo, $pDesc}

Junções e ordenação do resultado
for $liv1 in /livros/livro[@ISBN = "562"]
for $liv2 in /livros/livro
where
$liv2/@ISBN != $liv1/@ISBN
and $liv2/autor/nome = $liv1/autor/nome
return $liv2/titulo
sort by (. ascending)
INICIANDO COM XQUERY

Funções

XQuery usa funções para extrair dados de documentos XML

P.ex.: A função doc() é usada para abrir um documento XML
doc("books.xml")

Expressões de caminho

XQuery usa expressões de caminho (XPath) para navegar
através de elementos em um documento XML

P.ex.: A seguinte expressão XPath é usada para selecionar todos os
elementos title no arquivo books.xml
doc("books.xml")/bookstore/book/title
INICIANDO COM XQUERY

Predicados

XQuery usa predicados para limitar os dados extraídos de
documentos XML

P.ex.: O seguinte predicado é usado para selecionar todos os
elementos book que tem um elemento price com valor menor do que
R$ 30,00
doc("books.xml")/bookstore/book[price < 30]
EXEMPLOS DE CONSULTA XQUERY

Observe a seguinte expressão XPath
doc("books.xml")/bookstore/book[price > 30]/title


Irá selecionar todos os elementos title, sob os elementos
book que estão sob o elemento bookstore, e que tem um
elemento price com valor superior a R$ 30,00.
A seguinte expressão FLWOR é equivalente
for $x in doc("books.xml")/bookstore/book
where $x/price > 30
return $x/title
EXEMPLOS DE CONSULTA XQUERY

Com expressões FLWOR é possível ordenar o resultado
for $x in doc("books.xml")/bookstore/book
where $x/price > 30
order by $x/title
return $x/title
EXEMPLOS DE CONSULTA XQUERY

Expressões FLWOR

A cláusula for seleciona todos os elementos book, sob o
elemento bookstore, em uma variável chamada $x

A cláusula where seleciona somente os elementos book com
um elemento price com um valor maior que 30

A cláusula order by define a ordem de ordenação (elemento
title)

A cláusula return especifica o que deveria ser retornado
(elementos title)
EXEMPLOS DE CONSULTA XQUERY

Apresentar o resultado em uma lista HTML
Expressão XQuery FLWOR:
for $x in doc("books.xml")/bookstore/book/title
order by $x
return $x

Resultado em forma de lista HTML (<ul> ... <li>):
<ul>
{
for $x in doc("books.xml")/bookstore/book/title
order by $x
return <li>{$x}</li>
}
</ul>

EXEMPLOS DE CONSULTA XQUERY

Apresentar o resultado em uma lista HTML

Agora eliminamos o elemento title e mostramos somente os
dados dentro do elemento title:
<ul>
{
for $x in doc("books.xml")/bookstore/book/title
order by $x
return <li>{data($x)}</li>
}
</ul>
TERMINOLOGIA XQUERY

XQuery usa a mesma terminologia do XPath

Nodos



Elementos, atributos, text, namespace, instruções de processamento,
comentários e nodos documento (raiz)
Exemplos:
 <bookstore>
(nodo documento - raiz)
 <author> J K. Rowling</author>
 lang = “en”
(nodo atributo)
Valores atômicos


São nodos sem filhos ou pais
Exemplos:
 J K. Rowling
 “en”
(nodo elemento)
TERMINOLOGIA XQUERY

XQuery usa a mesma terminologia do XPath

Items


São valores atômicos ou nodos
Relacionamento de nodos
Pai
 Filho
 Irmão
 Ancestral (Avô)
 Descendentes

TERMINOLOGIA XQUERY

Regras básicas de sintaxe XQuery





É case-sensitive
Elementos, atributos e variáveis devem ser nomes XML
válidos
Um valor string pode estar entre aspas simples ou dupla
Uma variável XQuery é definida com $ seguido por um
nome. P.ex.: $bookstore
Comentários são delimitados por (: e :)
P.ex.: (: XQuery Comment :)
TERMINOLOGIA XQUERY

Expressões condicionais em XQuery

Expressões If-Then-Else são permitidas em XQuery
for $x in doc("books.xml")/bookstore/book
return if ($x/@category="CHILDREN")
then <child>{data($x/title)}</child>
else <adult>{data($x/title)}</adult>
É necessário colocar os parênteses na expressão de teste do if
 A cláusula else é obrigatória, mas pode ser substituída por else()

RESULTADO:
<adult>Everyday Italian</adult>
<child>Harry Potter</child>
<adult>Learning XML</adult>
<adult>XQuery Kick Start</adult>
TERMINOLOGIA XQUERY

Comparações em Xquery

Há dois modos de comparar valores:
Comparações gerais: =, !=, <, <=, >, >=
 Comparação de valores: eq, ne, lt, le, gt, ge


Diferença entre os dois métodos de comparação

A seguinte expressão retorna Verdadeiro se qualquer atributo q
tem um valor maior que 10
$bookstore//book/@q > 10
A seguinte expressão retorna Verdadeiro se há somente UM
atributo q retornado pela expressão e se este é maior do que 10.
 Se retornar mais de um atributo q, ocorre um ERRO.
$bookstore//book/@q gt 10

XQUERY – ADICIONANDO ELEMENTOS

E
ATRIBUTOS
Adicionando Elementos e Atributos para o resultado
<html>
<body>
<h1>Bookstore</h1>
<ul>
{
for $x in doc("BookStore.xml")/bookstore/book
order by $x/title
return
<li>{data($x/title)}. Category:
{data($x/@category)}</li>
}
</ul>
</body>
</html>
XQUERY – ADICIONANDO ELEMENTOS

E
ATRIBUTOS
Adicionando Atributos para elementos HTML
<html>
<body>
<h1>Bookstore</h1>
<ul>
{
for $x in doc("BookStore.xml")/bookstore/book
order by $x/title
return
<li class="{data($x/@category)}">
{data($x/title)} </li>
}
</ul>
</body>
</html>
XQUERY – SELECIONANDO

E
FILTRANDO ELEMENTOS
Expressões FLWOR

A cláusula for



A cláusula for liga uma variável para cada item retornado pela
expressão.
A cláusula for resulta em interação.
Pode haver múltiplas cláusulas for na mesma expressão FLWOR.
for $x in (1 to 5)
return <test>{$x}</test>
for $x at $i in doc("books.xml")/bookstore/book/title
return <book>{$i}. {data($x)}</book>
for $x in (10,20), $y in (100,200)
return <test>x={$x} and y={$y}</test>
XQUERY – SELECIONANDO

E
FILTRANDO ELEMENTOS
Expressões FLWOR

A cláusula let


A cláusula let permite atribuições de variáveis e evita repetir a
mesma expressão muitas vezes.
Esta cláusula não resulta em interação.
let $x := (1 to 5)
return <test>{$x}</test>
XQUERY – SELECIONANDO

E
FILTRANDO ELEMENTOS
Expressões FLWOR

A cláusula where

A cláusula where é usada para especificar um ou mais critérios para
o resultado.
where
$x/price > 30
and $x/price < 100
XQUERY – SELECIONANDO

E
FILTRANDO ELEMENTOS
Expressões FLWOR

A cláusula order by

A cláusula order by é usada para especificar a ordenação do
resultado.
for $x in doc("books.xml")/bookstore/book
order by $x/@category, $x/title
return $x/title
XQUERY – SELECIONANDO

E
FILTRANDO ELEMENTOS
Expressões FLWOR

A cláusula return

Especifica o que deve ser retornado.
for $x in doc("books.xml")/bookstore/book
return $x/title
FUNÇÕES XQUERY

XQuery inclui mais de 100 funções embutidas (built-in
functions).


Há funções para valores string e numéricos, comparação de
data e hora, manipulação de nodos e QName, manipulação
de sequência, valores booleanos, entre outras.
Também é possível definir funções de usuário (userdefined functions).
EXERCÍCIOS

Encontre um arquivo de dados disponível na Internet.
Pesquise dados XML no portal http://www.dados.gov.br ou
 Pesquise no Google por arquivos XML, eliminando da busca
arquivos que representam mapa de sites
 P.ex.: filetype:xml -sitemap.xml produto


Crie cinco consultas distintas em XQuery, conforme
indicado abaixo:
Uma consulta gerando como resultado um documento XML
 Uma consulta gerando como resultado um documento
HTML
 Duas consultas utilizando diferentes funções built-in
 Uma consulta utilizando uma função definida pelo usuário

REFERÊNCIA
BIBLIOGRÁFICA

XQuery Tutorial
http://www.w3schools.com/xquery

Portal Brasileiro de Dados Abertos
http://www.dados.gov.br

Portal de Dados Abertos de SP
http://www.governoaberto.sp.gov.br/view/
Download