XML: bem formado, válido, XSD e namespaces

XML é o formato de praticamente todo documento fiscal eletrônico brasileiro: NF-e, NFC-e, CT-e e o NFS-e nacional. Entenda elementos, atributos, a diferença entre um XML bem formado e um XML válido contra XSD, e o papel dos namespaces.

XML

Formatos de Dados

XML (eXtensible Markup Language) representa dados através de elementos — tags abertas e fechadas, <tag>valor</tag> — que podem carregar atributos e conter outros elementos aninhados. É o formato usado por praticamente todo documento fiscal eletrônico brasileiro: NFe, NFC-e, CT-e e o NFS-e nacional.

<NFe xmlns="http://www.portalfiscal.inf.br/nfe">
  <infNFe Id="NFe35240112345678000199550010000000011000000015" versao="4.00">
    <ide>
      <cUF>35</cUF>
      <natOp>Venda de mercadoria</natOp>
    </ide>
  </infNFe>
</NFe>

Um XML é bem formado (well-formed) quando toda tag aberta é fechada e a estrutura segue a sintaxe do formato — o mínimo para qualquer parser conseguir lê-lo. Ser válido é mais exigente: significa bater contra um schema XSD publicado pelo autorizador, que define quais elementos existem, obrigatoriedade, tipo e tamanho de cada campo (ex.: cUF como código numérico de 2 dígitos). Um XML de NFe precisa ser as duas coisas antes de ser assinado e transmitido — falhar no XSD rejeita o lote sem nem chegar às regras de negócio.

XML também é case sensitive: <UF>, <uf> e <Uf> são três elementos diferentes para o parser, e o mesmo vale para nomes de atributo e para os valores de um atributo que declare um tipo enumerado no schema. É por isso que um XML de NFe fecha cada tag com exatamente a mesma caixa da abertura (<cUF>...</cUF>, nunca <cUF>...</CUF>) — divergência de caixa entre abertura e fechamento nem chega a ser "bem formado".

O atributo xmlns declara o namespace do documento — evita que uma tag como <ide> de um XML de NFe seja confundida com uma tag de mesmo nome em outro vocabulário; é comum um mesmo XML fiscal combinar mais de um namespace (o da NFe em si e o de um evento anexado, por exemplo).

Um XML fiscal nunca é só estrutura — ele também carrega:

  • Uma declaração de codificação (encoding="UTF-8") que precisa bater com os bytes reais do arquivo — veja Charset & Encoding.
  • Caracteres reservados (& < > " ') que precisam virar entities dentro do conteúdo, senão a estrutura quebra — veja Caracteres Especiais.
  • Uma assinatura digital obrigatória, calculada em cima do hash do conteúdo — veja Hash e Assinatura Digital de XML.

Use o formatador e validador de XML para conferir se a estrutura de um documento fiscal está bem formada antes de seguir para assinatura.

Aplique o conceito nas ferramentas.

As ferramentas de JSON, XML, YAML, TOON, CSV, Base64, caracteres especiais e detecção de charset rodam localmente no navegador, sem enviar o seu documento fiscal para nenhum servidor.

Conteúdo de referência gratuito — sem necessidade de login.