Este artigo trata da manipulação de documentos XML diretamente na base de dados através do uso de um poderoso conjunto de funções disponibilizadas nativamente pelo PostgreSQL.
Em que situação o tema útil
Processar documentos em XML é um requisito muito comum na maioria das aplicações atualmente. Muitas vezes, o desconhecimento das funcionalidades nativas dos bancos de dados para manipulação de XML faz com que o desenvolvimento de rotinas simples de validação, consulta e geração de documentos seja delegada a camada de aplicação, consumindo tempo e recursos que poderiam facilmente ser mais bem aplicados ao se utilizar as funcionalidades já existentes na própria base de dados.
Além disso, o uso da linguagem XML permite a manipulação de dados em outra perspectiva, mais adequada a certos tipos de relações estabelecidas entre os elementos de um conjunto de dados, como as relações hierárquicas, por exemplo. Neste contexto, o uso dos paradigmas relacional e objeto/relacional mostra-se, de certa forma, inadequado e pouco eficaz.
Resumo DevMan
Em uso ascendente desde sua criação, a linguagem XML mostra-se como uma tecnologia extremamente útil na troca de informações entre sistemas, principalmente na WEB. Simplicidade, flexibilidade e interoperabilidade são algumas das características marcantes da tecnologia XML.
Dado o exponencial crescimento do uso de documentos XML como meio de troca de informações, os desenvolvedores de sistemas gerenciadores de banco de dados vislumbraram um aumento considerável da capacidades dos SGBDs integrando funções de armazenamento, consulta, geração e validação de documentos XML na própria base de dados.
Neste panorama, observa-se que o PostgreSQL apresenta um vasto conjunto de funções que atendem praticamente todas as necessidades em termos de manipulação de conteúdos XML, afirmando-se como uma ótima escolha quando estes requisitos se fizerem necessários ao desenvolvimento.
No processo de desenvolvimento de um software é muito comum nos depararmos com requisitos referentes à importação e exportação de dados. Comumente, estes requisitos nascem da necessidade que o sistema terá de comunicar-se com outros sistemas externos, de modo que possa haver troca de informações entre eles.
Neste ponto cabe ao analista especificar qual é o formato mais adequado para o arquivo de dados. Um bom exemplo de formato é o famigerado TXT, um simples arquivo de texto com dados dispostos em posições fixas (colunas) no decorrer de uma linha.
Contudo, há um grande problema com certos formatos de arquivo: eles acoplam fortemente as interfaces de leitura com as de escrita.
Mas o que isso significa na prática afinal? Significa que sempre que for atualizado o formato do arquivo todas as interfaces de leitura dos outros sistemas são afetadas em cascata, necessitando assim de uma atividade de evolução.
Outra situação que ocorre refere-se ao tipo de relação estabelecida entre as informações do domínio do negócio. Normalmente com o paradigma relacional, ou mesmo o objeto-relacional consegue-se mapear praticamente todos os tipos de relação existentes entre informações. Todavia, em certas situações, o uso das formas tradicionais de ligação entre os dados (referências) em uma base de dados não representa a forma mais adequada de mapeamento. Casos onde as informações estão dispostas vários níveis hierárquicos, por exemplo, são de difícil tratamento.
É neste contexto, onde a necessidade de interoperabilidade de informações soma-se a necessidade de representar os dados de maneira simples, não-ambígua e, principalmente, flexível que a linguagem XML mostra-se como uma ferramenta de extrema valia.
A linguagem XML (eXtensible Markup Language), resumidamente, define-se como uma metalinguagem, ou seja, uma espécie de receita para se criar linguagens próprias. O seu uso traz inúmeros benefícios, mas certamente, o maior deles é a capacidade de descrever dados de modo a dar significado aos mesmos. O resultado disso é que tanto seres humanos quanto máquinas têm facilidade em inferir informações a partir de um documento escrito em XML, o que permite a componentes de sistemas distintos, desconhecidos originalmente, compreender os dados com a mesma significância.
Os sistemas gerenciadores de banco de dados (SGBD), reconhecendo os benefícios do XML, bem como o crescimento exponencial do seu uso, principalmente no ambiente WEB, trouxeram a tecnologia para o próprio banco, permitindo assim que documentos XML pudessem ser armazenados, consultados e gerados nativamente na base de dados.
O PostgreSQL, como era de se esperar, não ficou atrás de seus concorrentes e disponibilizou um poderoso conjunto de funções para operar sobre dados em formato XML, como pode ser visto na sequência deste artigo.
Entendendo um pouco mais de XML
XML é o acrônimo de eXtensible Markup Language, uma linguagem de marcação projetada especificamente para transportar e armazenar dados, a fim de permitir e simplificar a troca de informações entre aplicações estruturalmente disconexas (que não apresentam interfaces comuns).
O seu uso serve as mais variadas necessidades de representação de dados, como transações de processos de negócio, dados vetoriais, equações matemáticas, troca de mensagens ou mesmo um cadastro de clientes, por exemplo. Como os dados são mantidos em formato textual e hierarquicamente organizados através das tags (marcações) definidas, qualquer software capaz de parsear o arquivo está apto a processar os dados.
Para melhor compreender os benefícios que a XML traz iremos utilizar um simples exemplo de documento que armazena alguns dados da Escola SJS, no ano de 2011. Antes de prosseguir com a leitura, analise atentamente os dados contidos no documento exibido na Listagem 1 e avalie o nível de dificuldade encontrado em compreendê-los.
Listagem 1. Documento XML contendo dados da escola SJS
<?xml version="1.0" encoding="UTF-8"?>
<escola nome ="Escola SJS">
<ano base="2011">
<semestre referencia="1">
<turma descricao="7A" nivel="7" codigo="45">
<disciplina nome ="Ciências" codigo="3">
<teste data="13/04/2011">
<aluno nome="Angelo" nota="9.5"/>
<aluno nome="Erica" nota="9.0"/>
<aluno nome="Victor" nota="10.0"/>
</teste>
<teste data="27/05/2011">
<aluno nome="Angelo" nota="9.0"/>
<aluno nome="Erica" nota="8.0"/>
<aluno nome="Victor" nota="9.5"/>
</teste>
</disciplina>
</turma>
</semestre>
</ano>
</escola>
...