Un document XML est dit bien formé lorsque le document est correct sans toutefois possèder une DTD.

Le prologue du document ne contient pas de Définition de Type de Document (DTD) et la structure arborescente du document respecte les standards XML (nom des balises et attributs, imbrication des marqueurs XML,...).

<?xml version="1.0" standalone="yes"?>
<magasin>
  <service>
    <produit>
      Vaisselle
    </produit>
  </service>
</magasin>

Un document XML est dit valide lorsque le document est bien formé et possède une DTD.

Le prologue du document contient une Définition de Type de Document (DTD) et l'arborescence des éléments XML respecte strictement, la structure définie par la DTD.

<?xml version="1.0" standalone="yes"?>
<!DOCTYPE magasin [
  <!ELEMENT magasin (service)>
  <!ELEMENT service (produit)>
  <!ELEMENT produit (#PCDATA)>
]>
<magasin>
  <service>
    <produit>
      Vaisselle
    </produit>
  </service>
</magasin>

Un document XML bien formé doit obéir aux règles suivantes :

  • Le document doit commencer par une déclaration XML.
  • <?version="1.0" standalone="yes" encoding="iso-8859-1"?>
  • Le document doit utiliser une DTD (Document Type Definition).
  • <!DOCTYPE élément_racine [Définitions...]>
  • Le document doit contenir un seul et unique élément racine, déclaré dans l'instruction DOCTYPE, dont les marqueurs encadrent une ou plusieurs autres balises.
  • <!DOCTYPE élément_racine [Déclarations...]>
    <élément_racine>
    <balise>donnée</balise>
    ...
    </élément_racine>
  • Le document doit contenir un ou plusieurs éléments. Si le document contient un seul élément, alors ce document sera composé du seul élément racine.
  • Les valeurs d'attribut doivent être impérativement encadrées par des guillemets simples (') ou doubles (").
  • <balise attribut="valeur" attribut2='valeur'>
  • Une balise contenant des données doit impérativement être fermée.
  • <balise>donnée</balise>
  • Une balise vide (ne contenant pas de données à l'instar de la balise IMG dans le HTML) doit également contenir un marqueur de fermeture.
  • <balise></balise>
    <balise/>
  • Les balises doivent être correctement imbriquées, ainsi la ou les balises fils doivent être encadrées par une balise parente de départ et une de fin.
  • <balise parent>
    <balise fils>donnée</balise fils>
    <balise fils/>
    </balise parent>
  • Les noms d'éléments et d'attributs ne peuvent être composés que de lettres, y compris les lettres accentuées, de chiffres, de soulignés(_), de tirets (-), de points (.) et de deux points (:).
  • Les noms d'éléments et d'attributs doivent commencer par une lettre ou un souligné.
  • <_balise attribut9='valeur'/>
  • Les noms d'éléments dans les balises d'ouvertures ou de fermetures devront respecter une casse rigoureusement identique.
  • <baLiSe>Donnée</baLiSe>
  • Les noms d'attributs doivent également conserver une casse rigoureusement identique.
  • <balise AttribuT="valeur">donnée<balise>
    <balise2 AttribuT="valeur">donnée<balise2>
  • Le caractère inférieur à (<) sert uniquement à ouvrir une balise.
  • <élément/>
  • Le caractère esperluette (&) est utilisé essentiellement pour faire appel à une référence d'entité soit prédéfinie, soit générale, déclarée au préalable dans la DTD.
  • &amp;
    
    &entité_générale;
  • Les caractères inférieur à (<), l'esperluette (&) ou la séquence ]]> doivent être remplacés respectivement par les références d'entité &lt;, &amp; ou ]]&gt;.
  • Les attributs des documents XML bien formés sans DTD seront considérés de type CDATA, d'ailleurs considéré comme type par défaut.