Syntaxe XML et espaces

Soit les trois syntaxes XML suivantes (les espaces sont symbolisés par des ~ et les retours chariot par des §) :

  1. <a>bonjour~aurevoir</a><b/>

  2. <a>bonjour~~~~aurevoir</a><b/>

  3. <a>bonjour§

    aurevoir</a>~~~~<b/>

  4. <a>bonjour~aurevoir</a>§

    <b/>

Ces trois syntaxes sont logiquement équivalentes.

Donc :

  • À l'intérieur d'un élément qui ne contient que du texte : 1 espace = N espaces = 1 retour chariot = N retours chariot

  • Entre deux éléments : 1 espace = N espaces = 1 retour chariot = N retours chariot = Rien (absence de caractère)

Dans la pratique seuls les cas de mixed content ont besoin que les espaces soient préservés. Les deux exemples ci-après ne sont pas équivalents :

  • <p>Ceci est <i>important</i></p>

  • <p>Ceci est<i>important</i></p>

Mais sans schéma il est impossible de décider a priori si le contenu d'un élément qui contient des éléments fils et des espaces est mixed ou si ces espaces servent juste à la mise en forme du XML.

Espaces conservés

Par défaut, un programme doit considérer que tous les espaces sont signifiants et doivent être conservés lors des traitements.

RemarqueÉquivalence entre séparateurs

XML considère comme équivalents les caractères de séparation :

  • Espace ' '

  • Tabulation \t

  • Retour chariot \r

  • Fin de ligne \n