9 de maio de 2009

Trabalhando com XML

A Extensible Markup Language - ou simplesmente XML - já é uma tecnologia madura, bastante adotada devido à sua flexibilidade em estruturar dados de uma maneira que permite facilmente intercambiar informações numa ampla gama de situações.

Porquê, então, postar um texto sobre isso se já é uma tecnologia tão amplamente dominada e divulgada ? Primeiro, por que é interessante ter onde encontrar informações básicas, mesmo para aqueles que já usam - de vez em quando dá um branco na gente ! Segundo, eu pretendo postar outros textos envolvendo XML e gostaria de usar neles uma terminologia que fosse bem conhecida. Portanto, vou descrever essa terminologia aqui - na forma como a entendo - e me referir a ela nos outros posts.

Em princípio, tenho em mente postar algo a respeito de como criar a assinatura digital de um XML para a Nota Fiscal Eletrônica (NFe) e como anexar essa assinatura ao documento a ser enviado para a Receita Federal. Considere, então o XML simplificado (bastante !) da NFe que reproduzo abaixo :
<?xml version="1.0"encoding="UTF-8" ?>
<enviNFe versao="1.10" xmlns="http://www.portalfiscal.inf.br/nfe">
<idLote>71</idLote>
<NFe>
<infNFe Id="NFe3508059978"versao="1.10">
 <cUF>35</cUF>
 <cNF>518005127</cNF>
 <natOp>Venda a vista</natOp>
 <mod>55</mod>
 <serie>1</serie>
 <dEmi>2008-05-06</dEmi>
 <tpAmb>2</tpAmb>
</infNFe>
 </NFe>
  </enviNFe>

Declaração XML
A primeira linha do XML é um cabeçalho indicando que se trata de um documento XML e que os textos embutidos nele respeitam a codificação UTF-8. Obs: É por essa razão que o XML da NFe que vai para a Receita Federal não pode conter a acentuação típica da língua portuguesa - para isso, a codificação mais apropriada teria que ser a ISO-8859-1.

Elementos ou Tags
Os elementos constituem a fundamentação do XML, moldando a estrutura de dados contida no documento. Eles delimitam as informações do documento e são distinguidos por aparecerem entre os caracteres < e >. No XML reproduzido acima, enviNFe e NFe são exemplos de elementos. Os dados são incluídos no documento entre um elemento de abertura e seu correspondente fechamento, sendo que o elemento de fechamento tem uma barra (/) antes do nome para diferenciá-lo da abertura.Exemplo :
 <dEmi>2008-05-06</dEmi>

Atributos
São propriedades adicionadas à elementos de abertura. Eles são compostos de um nome e de um valor ligados pelo sinal de igual (=). Os valores são delimitados por aspas ("). No XML do exemplo, o elemento infNFe possui 2 atributos : Id (cujo valor é NFe3508059978) e versao (de valor 1.10).

Nós ou Nodes
A representação computacional mais comum para um documento XML é através de DOM - Document Object Model, que permite acessar e manipular os elementos, atributos, valores, etc. através de uma estrutura de árvore. Neste contexto, os elementos também são chamados "nós" e os termos "nó pai" e "nó filho" expressam a relação de hierarquia entre os elementos, isto é, que elemento está contido em qual. Assim, no exemplo acima, os elementos cNF e serie são "nós filhos" de infNFe. Por sua vez, NFe é o "nó pai" de infNFe.

Nó raiz ou Root Node
A hierarquia de um documento XML sempre possui um nó de nível mais alto que, direta ou indiretamente, é "nó pai" de todos os outros. Esse ponto de entrada para navegação no documento XML é chamado "nó raiz" e no exemplo acima é o nó enviNFe

XML Namespace
Com o uso crescente de XML para troca de informações, muitos ramos de negócio, empresas e entidades governamentais construiram conjuntos de tags (elementos) que acabaram por se tornar padrões. São, portanto, bem estabelecidos e há softwares capazes de reconhecê-los e tratá-los. Se for necessário incluir informações de mais de um desses padrões num mesmo documento XML, é possível que haja choque entre as diferentes semânticas (nomes e significados).
Para permitir que uma aplicação reconheça qual conjunto de tags deve ser usado para tratar um determinado ponto do XML foi criado o conceito de namespace. São atributos especiais que são incluídos num elemento do XML de forma que uma aplicação com o conhecimento apropriado saberá que estrutura esperar ao trabalhar com os "nós filhos" desse elemento.
O nome do atributo que indica o namespace é xmlns.
No exemplo da Nota Fiscal Eletrônica, a Receita Federal estruturou as informações sob o namespace http://www.portalfiscal.inf.br/nfe e ele deve constar dos documentos XML a serem enviados.

No próximo post, incluirei exemplo C# de como construir o XML mostrado aqui.

Nenhum comentário :

Postar um comentário

OBS: Os comentários enviados a este Blog são submetidos a moderação. Por isso, eles serão publicados somente após aprovação.

Observação: somente um membro deste blog pode postar um comentário.