Um documento XML é considerado bem-formado quando respeita o conjunto de regras de sintaxe estabelecidas na especificação da linguagem. É importante conhecer essas regras, pois a maioria das bibliotecas utilizadas para consulta e atualização de documentos XML requer a utilização de documentos bem-formados.

No site da W3C (órgão responsável pela definição da linguagem XML e pela padronização de outras iniciativas ligadas à Web), existe um documento que contendo toda essa especificação. Porém, como quase sempre acontece com as especificações da W3C, o documento é extremamente grande e de leitura bastante “pesada”. Para facilitar a nossa vida, a seguir apresentamos uma lista contendo as mais importantes regras de sintaxe da XML:

  1. Um documento XML deve possuir raiz única.
  2. Todas as tags devem ser fechadas (elementos devem possuir tag inicial e tag final)
  3. Os nomes de elementos (tags) e atributos são sensíveis à caracteres maiúsculos e minúsculos.
  4. Os elementos devem ser bem-aninhados (tags fecham em ordem oposta a que foram abertas).
  5. Atributos não se repetem em um mesmo elemento.
  6. Todo atributo deve possuir algum valor e este valor deve ser especificado entre aspas.
  7. Alguns caracteres especiais, como “ < ”, “ & ” e “ > ” devem ser especificados com o uso de entidades pré-definidas (no caso & lt; , & amp; e & gt; , respectivamente).
  8. Nomes de tags não podem conter espaços em branco nem os caracteres !"#$%&'()*+,/;<=>?@[\]^`{|}~. Além disso, não podem começar com um número, “ . ” (ponto) ou “ - " (traço).

Exemplos

A seguir temos exemplos práticos envolvendo as regras recém-apresentadas. Para cada regra, primeiro apresentamos um documento contendo um erro de sintaxe e depois a correção do mesmo.

Regra 1: Um Documento XML deve possuir raiz única

<?xml version="1.0"?>
<pais>
  <nome>Brasil</nome>
  <moeda>Real</moeda>
</pais>
<pais>
  <nome>Argentina</nome>
  <moeda>Peso argentino</moeda>
</pais>
Listagem 1. Documento com erro - não possui raiz única
<?xml version="1.0"?>
<nacoes>
  <pais>
  <nome>Brasil</nome>
  <moeda>Real</moeda>
  </pais>
  <pais>
  <nome>Argentina</nome>
  <moeda>Peso argentino</moeda>
  </pais>
</nacoes> 
Listagem 2. Documento correto - possui “nacoes” como raiz única

Regra 2: Todas as tags devem ser fechadas

<?xml version="1.0"?>
<pais>
<nome>Brasil
<populacao>196.655.014
</pais>
 
Listagem 3. Documento com erro - as tags “nome” e “populacao” não foram fechadas
<?xml version="1.0"?>
<pais>
<nome>Brasil</nome>
<populacao>196.655.014</populacao>
</pais>
 
Listagem 4. Documento correto - todas as tags foram fechadas

Regra 3: Nomes de elementos e atributos são sensíveis à caracteres maiúsculos e minúsculos

<?xml version="1.0"?>
<pais>
<nome>Uruguai</Nome>
</pais>
 
Listagem 5. Documento com erro - a tag “nome” é diferente de “Nome”
<?xml version="1.0"?>
<pais>
<nome>Uruguai</nome>
</pais>
 
Listagem 6. Documento corrigido

Regra 4: Os elementos devem ser bem-aninhados (tags fecham em ordem oposta a que foram abertas)

<?xml version="1.0"?>
<informacao>
   <texto>A capital do <pais>Chile eh <capital>Santiago</texto></capital></pais>
</informacao>
 
Listagem 7. Documento com erro - tags fechadas na ordem errada
<?xml version="1.0"?>
<informacao>
   <texto>A capital do <pais>Chile</pais> eh <capital>Santiago</capital></texto>
</informacao>
 
Listagem 8.Documento corrigido

Regra 5: Atributos não se repetem em um mesmo elemento

<?xml version="1.0"?>
<pais cidade="Rio de Janeiro" cidade="Brasília">
   Brasil
</pais>
Listagem 9. Documento com erro - dois atributos chamados “cidade”
<?xml version="1.0"?>
<pais cidade="Rio de Janeiro" capital="Brasília">
   Brasil
</pais>
 
Listagem 10. Documento corrigido - um dos atributos foi mudado para “capital”

Regra 6: Todo atributo deve possuir algum valor e este deve ser especificado entre aspas

<?xml version="1.0"?>
<pais mercosul>
   Brasil
</pais>
Listagem 11. Documento com erro - o atributo “mercosul” não tem valor
<?xml version="1.0"?>
<pais mercosul="SIM">
   Brasil
</pais>
 
Listagem 12. Documento corrigido - “mercosul” tem valor igual a “SIM”

Regra 7: Alguns caracteres, como “ < ” e “ & ” devem ser especificados com o uso de entidades pré-definidas (no caso, & lt; e & amp;);

<?xml version="1.0"?>
<regra_7>
   Brasil & Chile 
</regra_7>
Listagem 13. Documento com erro - contém o sinal
<?xml version="1.0"?>
<regra_7>
   Brasil & amp; Chile 
</regra_7>
 
Listagem 14. Documento corrigido - usa entidade pré-definida

Regra 8: Nomes de tags não podem conter espaços em branco nem os caracteres !"#$%&'()*+,/;<=>?@[\]^`{|}~. Além disso, não podem começar com um número, “ . ” (ponto) ou “ - " (traço).

<?xml version="1.0"?>
<1_pais>
   Brasil 
<1_pais>
Listagem 15. Documento com erro - nome da tag começa com número
<?xml version="1.0"?>
<pais_1>
   Brasil 
</pais_1>
 
Listagem 16. Documento corrigido - nome da tag começa com letra

Assim finalizamos o artigo. Não apresentamos todas as regras de sintaxe da XML, porém mostramos as mais importantes, ou seja, aquelas que precisam ser conhecidas por qualquer desenvolvedor!

Confira também