Você está na página 1de 18

XML

Linguagens de Consulta

Rebeca Schroeder

http://www.inf.ufsc.br/~rebecks/estagio/bd3
Linguagens de Consulta XML
• Objetivo: Recuperar dados armazenados
em documentos XML
– Assim como a SQL para dados relacionais
• Linguagens de Consulta XML:
– XML-QL
– XQL
– XPath (recomendação W3C desde 1999)
– XQuery (em breve será recomendada pela
W3C)
XPath
• O que é?
- Linguagem para navegação pela estrutura de
elementos e atributos em um documento XML

• Como ela trabalhar?


- Enxerga o documento XML como uma árvore.
Os nodos são: elementos, atributos, textos, etc...

- Explora o contexto hierárquico e seqüencial dos


elementos através de expressões de caminho para
localizar um elemento de interesse

- O retorno das consultas são dados XML


estruturados conforme consta no próprio documento
XPath
• Expressões de Caminho: Localizam nós do documento

• Considere o seguinte documento XML:

<notaFiscal>
<itensFiscais>
<produto sequencia="S1">
<codigo>1324</codigo>
<quantidade>10</quantidade>
</produto>
<servico>
<descricao>Instalações</descricao>
<produto>
<codigo>589</codigo>
</produto>
</servico>
</itensFiscais>
</notaFiscal>
Expressões de Caminho
• Caminho Absoluto:
– A expressão parte do root
– A partir do root, localiza elementos na sua estrutura
hierárquica
/ indica o root do documento

/notaFiscal/itensFiscais/produto/codigo

• Caminho Relativo:
– A expressão parte de um nó corrente
– A partir do nó corrente, localiza elementos na sua estrutura
hierárquica

Ex: Sendo <quantidade> o nó corrente, alcançar o


elemento <código>

../codigo ../ Refere-se ao nó pai do nó


corrente, neste caso <produto>
Expressões de Caminho
• Selecionar todos os elementos filhos de produto:
itensFiscais/produto/*

• Selecionar o código dos produtos e serviços

<itensFiscais>
<produto>
<codigo>1</codigo>
</produto>
<servico>
<codigo>13</codigo>
</servico>
</itensFiscais>

itensFiscais/*/codigo
Expressões de Caminho
• Selecionar ocorrências de um nó em
qualquer nível hierárquico abaixo de
um nó corrente
itensFiscais//código

• Selecionar qualquer ocorrência de


um nó a partir do root
//código
Expressões de Caminho
• Selecionar o elemento pai
../código
• Selecionar o elemento código a partir do
elemento corrente
./codigo
• Outras expressões:

Expressão Resultado
ancestor::codigo Todos os elementos “codigo”
ancestrais do elemento corrente
descendant::produto Todos os elementos “produto”
descendentes do elemento corrente
Expressões de Caminhos
• Selecionar diversos caminhos ao
mesmo tempo
– Expressões são unidas pelo símbolo |

/notaFiscal/itensFiscais|//produto
Predicados
• Selecionar nós específicos ou nós que
contenham determinado valor
– Predicados são definidos entre []

Expressão Resultado
/notaFiscal/itensFiscais/produto[1] O primeiro elemento produto
//produto[quantidade>10] Produtos que possuem
quantidade superior a 10
//produto[quantidade > 10]/codigo Códigos dos produto com
quantidade maior que 10
//produto[quantidade] Os produtos que tenham o
elemento quantidade como filho
Funções
Expressão Resultado
//produto[not(quantidade)] Os produtos que não tenham o
elemento quantidade como filho
/notaFiscal/itensFiscais/produto[last()] O último elemento produto

itensFiscais/produto[position() = 3] O terceiro elemento produto

//produto[quantidade > 10 and Os produto que possuem


contains(codigo, “123”)] quantidade superior a 10 e
código contendo a cadeira “123”
//servico/descricao[starts-with(., As descrições que começam com
“Instala”)] “Instala”
Expressões com Atributos
• Os atributos podem ser selecionados assim
como elementos
– Utilizar “@” antes do nome do atributo

produto/@sequencia
Seleciona o atributo sequencia do elemento produto

produto[@sequencia=“S1”]
Seleciona os produtos cujo atributo “sequencia”
possua valor=“S1”
XQuery
• Linguagem padrão para consultas a
dados XML
• É baseada em expressões da XPath
• Supera a XPath em aspectos como:
– Permite construir novas estruturas para
apresentar os resultados
– Permite junções de dados XML
Consultas XQuery
• Expressões FLWR (estrutura básica):

for variável in expressão XPath


[let associação de novas variáveis]
[where condição]
return estrutura de resultado
Exemplo - Consultas XQuery
• Consulta XQuery: • Consulta correspondente em
XPath:
for $prod in /itensFiscais/produto
/itensFiscais/
where $prod/quantidade = 100 produto[quantidade=100]
return <produtosCentos>
{ $prod/@sequencia,
$prod/codigo }
</produtosCentos> • Resultado:
<produto sequencia=“S1”>
• Resultado: <codigo>1234</codigo>
<produtosCentos> <quantidade>100</quantidade>
<produto sequencia=“S1”> </produto>
<codigo>1234</codigo>
</produtosCentos>
Consultas XQuery
• Uso da cláusula led e ordenação:
for $prod in /itensFiscais/produto
let $cento := $prod/quantidade div 100
where $prod[quantidade]
order by $cento
return <produtosCentos>
{ $prod/@sequencia,
$prod/codigo,
$cento }
</produtosCentos>
Consultas XQuery
• Junções:

for $prod in /itensFiscais/produto,


$serv in /itensFiscais/servico
where $prod/codigo = $serv/produto/codigo
return <produtosEmServicos>
{ $prod/codigo,
$serv/descricao }
</produtosEmServicos>
Funções XQuery
• Usuário pode definir suas próprias funções para utilizá-las
em expressões XQuery:

declare function local:getCento($quantidade as xs:decimal)


as xs:decimal
{
let $c := $quantidade div 100
return $c
};

for $prod in /itensFiscais/produto


let $cento := local:getCento($prod/quantidade)
where $prod[quantidade]
order by $cento
return <produtosCentos>
{ $prod/codigo,
$cento }
</produtosCentos>

Você também pode gostar