quinta-feira, 21 de junho de 2001

Por que usar XML ?

Essa é a dúvida mais freqüente para os interessados em aprender esta nova tecnologia. Explanarei, em linhas gerais, a necessidade do uso do XML (eXtended Markup Language) e seu relacionamento com o futuro da Web.


O XML é um formato para a descrição de dados (é uma meta-linguagem e não uma linguagem de programação), que baseia seu formato em um arquivo texto, com estruturas organizadas hierarquicamente. Segundo a descrição do W3C (www.w3c.org), este formato permite troca de dados independente de plataforma e, utilizando o Document Object Model (DOM) nível 1, permite acesso segundo métodos padrões, facilitando a portabilidade dos dados. Mas que para que tipo de problema o XML pode ser uma peça-chave na elaboração de uma solução ?


Uma situação comum a desenvolvedores de aplicações web que envolvem outras empresas parceiras: o compartilhamento de dados. Uma empresa X possui um conjunto de dados que precisam ser disponibilizados para a empresa parceira Y. As formas tradicionais de resolver este tipo de problema seria a transmissão de dados em um formato conhecido pelas duas empresas, de forma que uma entenda o significado dos dados enviados pela outra. Atualmente os dados podem ser transmitidos em arquivos texto de largura fixa, delimitados, etc., mas será necessário incorporar estes dados texto a um banco de dados (podendo ser um SGBD ou em estruturas na memória) para que possamos transformar os dados brutos em informações significativas. Se estivermos falando em dados relacionados (duas tabelas que compartilham uma mesma chave, por exemplo), o problema aumenta um pouco, pois deveremos passar mais de um arquivo e a lógica ficaria mais restrita a estas duas empresas. Se a empresa Z tentar acessar o mesmo set de dados, ela obrigatoriamente terá que buscar a especificação da estrutura do arquivo (layout) junto a uma das outras empresas, o que pode ser trabalhoso.


O XML pode ajudar a resolver este tipo de problema. Os dados armazenados em um arquivo XML usam tags para delimitar estruturas, exatamente como as tags do HTML. Um exemplo de arquivo XML poderia ser:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<pedidos>
<pedido id="1">
<item descrição="1" qtde="100" />
<item descrição="2" qtde="20"/>
</pedido>
<pedido id="2">
<item descrição="1" qtde="25" />
<item descrição="3" qtde="10"/>
<item descrição="4" qtde="50"/>
</pedido>
<descrições>
<descrição id="1">Pacote de papel sulfite</descrição>
<descrição id="2">Pacote de papel carbono</descrição>
<descrição id="3">Caixa de grampos</descrição>
<descrição id="4">Borracha branca</descrição>
</descrições>
</pedidos>

Disponibilizando este arquivo para acesso via HTTP, uma das empresas acima poderia acessar os dados e ter a noção exata de como estes dados estão hierarquizados. Uma aplicação que acesse o DOM do documento XML pode facilmente incorporar estes dados à base de dados existentes na empresa. O requisito necessário seria que todas as empresas tivessem um consenso sobre qual o vocabulário (conjunto de tags e seus significados) usar. O mercado já identificou esta necessidade de padronização é já busca soluções. Um exemplo é ebXML (http://www.ebxml.org/), uma iniciativa de um grupo de grandes empresas de tecnologia para modernizar as atuais transações de EDI (Electronic Data Interchange). 


O que vemos neste exemplo é que um conjunto de dados pode criado usando um padrão conhecido e depois manipulado para atender as necessidades específicas de cada organização. Como os dados são auto-descritivos, não há a necessidade de montar tabelas de layout para transmitir o significado dos dados. E a estrutura hierarquizada permite saber a qual tipo de estrutura os dados nela contidos estão subordinados.


Mas não é só isso. Usando a linguagem XSL (eXtended Stylesheet Language), podemos converter a estrutura deste documento em uma outra, cujo vocabulário usado seja mais significativo. O exemplo abaixo mostra um arquivo XSL que converte o arquivo XML mostrado anteriormente em um documento XML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<b>Relação dos pedidos do documento XML</b>
<xsl:apply-templates />
<xsl:value-of select="count( //pedido )"/> pedidos listados
</body>
</html>
</xsl:template>
<xsl:template match="pedido">
<ul>
<li><xsl:value-of select="name()"/> número <xsl:value-of select="@id"/></li>
<ul>
<xsl:apply-templates />
</ul>
</ul>
</xsl:template>
<xsl:template match="item">
<li><xsl:value-of select="//descrição[ @id = current()/@descrição ]" /> (qtde: <xsl:value-of select="@qtde"/>)</li>
</xsl:template>
<xsl:template match="descrição" />
</xsl:stylesheet>

E o resultado da aplicação do XSL no arquivo XML seria:

<html>
<body>
<b>Relação dos pedidos do documento XML</b>
<ul>
<li>pedido número 1</li>
<ul>
<li>Pacote de papel sulfite (qtde: 100)</li>
<li>Pacote de papel carbono (qtde: 20)</li>
</ul>
</ul>
<ul>
<li>pedido número 2</li>
<ul>
<li>Caixa de grampos (qtde: 10)</li>
<li>Borrachas (qtde: 50)</li>
</ul>
</ul>
2 pedidos listados
</body>
</html>

Que seria exibido em um browser assim:





Relação dos pedidos do documento XML

  • pedido número 1

    • Pacote de papel sulfite (qtde: 100)
    • Pacote de papel carbono (qtde: 20)


  • pedido número 2

    • Caixa de grampos (qtde: 10)
    • Borrachas (qtde: 50)
2 pedidos listados

Desta forma, podemos transformar o vocabulário usado no documento XML original em um outro vocabulário, que possua um significado específico (o HTML para ser compreendido e corretamente renderizado pelo browser).


Presente e futuro


Atualmente, diversas empresas de porte estão fazendo uso do XML para situações específicas. Bancos podem usar os recursos da estruturação de dados para distribuir o processamento dos mesmos, racionalizando o uso dos recursos de processamento envolvidos. Empresas podem acessar dados de parceiros, conforme comentamos acima, de forma a diminuir os custos com a transmissão e compartilhamento de dados. Sites podem oferecer parte seu conteúdo para ser inserido em outros sites, aumentando o número de visitas.


O potencial é bastante amplo. Podemos imaginar um software que teste a segurança de um servidor web, por exemplo. Conforme vão sendo descobertas novas vulnerabilidades nos servidores, um banco de dados centralizado de informações é atualizado, com os dados sendo disponibilizados no formato XML. Este software acessa esses dados e sempre executa os procedimentos mais atuais para descobrir eventuais falhas, sem a necessidade de instalar uma nova versão, auxiliando o trabalho de administradores de sistema. Já existem softwares com estas características em desenvolvimento.


A Microsoft acaba de lançar a versão beta 2 do seu .NET Framework. Desde o beta 1, podemos construir webservices, que são "entidades programáveis que residem em um servidor web e são acessadas via protocolos padrões da Internet". Utilizando estes webservices, podemos montar módulos que seriam incorporados a aplicações criadas por terceiros, sem necessidade de disponibilizar o código fonte ou componentes. Um exemplo seria um webservice que calcula um dígito verificador de um código específico de uma empresa, que pode permitir que terceiros validem informações, de modo a consistirem os dados que estariam sendo alimentados. Podemos também pensar em webservices para retornar números por extenso, cálculo de equações complexas, etc., sem que tenhamos a necessidade de recodificar estes módulos, aumentando a produtividade e diminuindo a redundância de código e a possibilidade de erros de codificação. O ponto chave é que os dados que são transmitidos/recebidos pelos webservices utilizam o padrão XML, tornando universal o acesso à  estas informações.


Com certeza, a adoção do XML como padrão para a troca de dados já é uma realidade e seu uso só tende a aumentar. O profissional que começar a se familiarizar com este novo padrão terá um diferencial em sua formação, que será muito requisitada em breve.



Esta matéria foi postada originalmente no ASP4Developers por Rubens N. Farias (site), que na época era "pós-graduado em análise de sistemas orientados a objetos, MCP, MCSD, MCAD, MCSD.NET e consultor em TI, além de idealizador do projeto ASP4Developers. Desenvolve sistemas sob medida, focados na satisfação do usuário, com qualidade e custo realista.". Hoje, vai saber...

0 comentários: