Esse artigo faz parte da revista Java Magazine edição 67. Clique aqui para ler todos os artigos desta edição

AN style="FONT-FAMILY: Verdana; BACKGROUND: white; COLOR: red; FONT-SIZE: 10pt; moz-background-clip: -moz-initial; moz-background-origin: -moz-initial; moz-background-inline-policy: -moz-initial">

PAN>

ng=EN-US>>Para que serve:

Explicar os conceitos básicos da especificação e como ela é utilizada para executar consultas via XQuery em Java.

 

Em que situação o tema é útil:

O tema é importante para qualquer um que deseje entender um pouco mais sobre XQuery e empregar a linguagem em aplicações que utilizam Java, de forma totalmente independente da implementação. A XQuery é uma linguagem que está ganhando cada vez mais espaço em projetos envolvendo XML, Web Services e tecnologias relacionadas.

 

XQJ – XQuery API for Java – Resumo Devman:

O artigo aborda a API XQJ e como ela facilita a vida do desenvolvedor Java quando o assunto é a consulta de documentos XML, sejam provenientes de bases de dados ou arquivos. Estruturamos o artigo de forma a prover uma visão geral da linguagem XQuery para posteriormente ser possível abordar exemplos de como utilizamos a API XQJ. Feito isso, apresentamos um exemplo que consulta itens no eBay e adiciona a possibilidade de especificar mais um parâmetro, que é uma expressão regular a fim de filtrar o XML retornado pelo eBay via XQuery, utilizando a XQJ.

 

 

Neste artigo conheceremos como a API XQJ facilita a vida do desenvolvedor Java quando o assunto é a consulta de documentos XML, sejam provenientes de bases de dados ou arquivos. A idéia deste artigo será focar na especificação e como utilizar as interfaces providas por ela, porém é necessário um bom entendimento da linguagem XQuery antes de mergulharmos na API. Este entendimento será o que irá compor a primeira parte do artigo. Após esse entendimento, partiremos para a construção de exemplos pontuais com a XQJ e, por fim, criaremos uma aplicação que utilizando XQuery.

Conhecendo a linguagem XQuery

Apresentarei aqui uma visão geral sobre a linguagem XQuery, bem como seu relacionamento com a linguagem XPath. É impossível entrar em muitos detalhes sobre ambas as linguagens, pois este tema seria extenso até mesmo para um livro. Tentarei focar no necessário para ambientar você, leitor, para iniciar no uso da linguagem.

Visão geral de XQuery e a importância da XPath

XQuery é uma linguagem de consulta com foco em documentos XML. A linguagem possui similaridades com SQL, portanto uma analogia interessante que geralmente facilita o entendimento do propósito da linguagem XQuery é que ela representa para documentos XML o que a linguagem SQL representa para tabelas relacionais. O principal foco da linguagem é a realização de consultas em documentos, extraindo elementos e atributos. Ela também pode construir novos documentos XML, realizar transformações e até mesmo realizar todas essas tarefas ao mesmo tempo, de forma bastante simples. Além de tudo isso, a XQuery é uma recomendação W3C, o que a torna um padrão aberto e amplamente reconhecido pelo mercado e pelos principais fornecedores de software. E no âmbito dos padrões Java, a API correspondente – XQJ – também é um padrão formal (JSR-225, package javax.xml.xquery).

Entender a linguagem XPath é o primeiro passo para o entendimento da linguagem XQuery. Isso se deve ao fato de que a versão 2.0 da XPath é, na verdade, um sub-conjunto da XQuery 1.0. As duas linguagens, inclusive, dividem o mesmo modelo de dados, denominado XDM e também suportam as mesmas funções pré-construídas e os mesmos operadores.  

Exemplos

Apresentaremos aqui alguns exemplos que você poderá executar mais à frente quando estiver ambientado com a API XQJ. Neste momento focaremos apenas na estrutura da XQuery para seu entendimento. O XML que utilizaremos nestes e em outros exemplos está presente na Listagem 1 e se trata de uma lista hipotética de clientes.

 

Listagem 1. XML contendo a lista de clientes que usaremos como base para nossos exemplos.

<clientes>

  <cliente id="1">

   <nome>Jose da Silva</nome>

   <idade>48</idade>

   <rendaMensal>2000</rendaMensal>

  </cliente>

  <cliente id="2">

   <nome>Joao Paulo Siqueira</nome>

   <idade>32</idade>

   <rendaMensal>1000</rendaMensal>

  </cliente>

  <cliente id="3">

   <nome>Maria Eduarda da Silva</nome>

   <idade>26</idade>

   <rendaMensal>5000</rendaMensal>

  </cliente>

  <cliente id="4">

   <nome>Carlos Souza</nome>

   <idade>28</idade>

   <rendaMensal>3000</rendaMensal>

  </cliente>

</clientes>

 

XPath em ação

Conforme já foi apresentado, a XPath é parte importante da linguagem XQuery. Devido a isso, nosso primeiro exemplo se baseará em um comando XPath que você poderá executar dentro de uma consulta mais complexa via XQuery. O código a seguir apresenta o exemplo que obtém todos os elementos cliente dentro de nosso XML base clientes.xml.

 

fn:doc('clientes.xml')/clientes/cliente

 

Analisando o código apresentado, temos alguns pontos interessantes. Entre esses pontos, iniciamos com o uso de uma função para a obtenção do documento XML, a fn:doc(). Essa função é responsável por efetuar a leitura e a interpretação do documento XML e disponibilizar o documento no nó de contexto, que é o nó a partir do qual a expressão é executada. O uso da função aqui foi necessário, pois estamos utilizando um arquivo. Caso estivéssemos utilizando o XML proveniente de uma base de dados ou caso o nó de contexto tenha sido configurado fora da expressão, através de mecanismos providos pela API (o que veremos como fazer ainda neste artigo), não seria necessário o uso de uma função para leitura do documento.

O próximo ponto interessante a ser analisado é a navegação. Para a navegação entre os elementos são utilizadas barras normais “/”. Neste caso, navegamos pelo elemento que representa o nó de contexto, após isso temos que navegar pelo elemento que contém a lista de elementos cliente, que é o elemento clientes. Por fim, chegamos (e paramos) no elemento cliente, o que indica que desejamos que este elemento seja retornado. Nesta situação, como temos mais do que um elemento cliente, é retornada uma lista desses elementos.

Um comando equivalente ao que vimos, seria o apresentado a seguir.

 

fn:doc('clientes.xml')//cliente

 

Neste código, é utilizado o operador // que tem por objetivo localizar nós que sejam compatíveis com a expressão, independentemente de sua localização. A partir do nó de contexto configurado, solicitamos a localização de elementos denominados cliente. Apesar de tentador, esse “atalho” deve ser usado com cautela, pois pode representar a consulta indiscriminada dentro do XML, representando um risco para a performance da consulta. Pense nele como uma consulta em todos os registros de uma tabela relacional se estivéssemos lidando com SQL, ou seja, o famoso e temido full table scan.

FLWOR

Além do uso de expressões XPath, é possível construir consultas mais elaboradas através da expressão FLWOR, pronunciada flower. Essa expressão é o acrônimo de “For, Let, Where, Order by e Return”, que são as cláusulas presentes em consultas deste tipo (nem todas obrigatórias, como veremos em breve). Através dessas consultas, é possível realizar iteração, ordenação, entre outras manipulações dos dados obtidos no documento XML.

Analisando cada cláusula, temos:

...

Quer ler esse conteúdo completo? Tenha acesso completo