En fait, cette notation fait tout simplement partie de la syntaxe XML. Elle permet de dire, au programme qui va analyser le fichier XML, de ne pas analyser / interpreter ce qu'il y a entre le <![CDATA[ et le ]]>. Attention : cela ne veut pas dire que le programme doit ignorer le contenu de la section. L'analyseur syntaxique va seulement le récupérer, sans chercher à repérer des balises, des entités ou tout autre spécificité syntaxique XML. La balise qui contient ce type de section a donc un contenu à l'identique de ce qu'il y a dans la section.

En effet, si on n'utilise pas <![CDATA[, et que le contenu a des caractères tels que le < ou le > par exemple, on est obligé de les transformer en entité &lt; ou &gt; (comme le & qui doit être &amp;). C'est plutôt galère à écrire, surtout si il s'agit de script javascript, où il faudrait donc transformer les opérateurs de comparaison "supérieur" et "inférieur" etc..

Le tag CDATA permet donc d'eviter ceci. Il est trés utile notament lorsqu'on veut indiquer un source XML dans un fichier XML. Par exemple, si on veut afficher ceci dans une page XHTML :

Voici comment afficher un menu en XUL :

 <menubar id="sample-menubar">
   <menu id="file-menu" label="Fichier">
      <menupopup id="file-popup">
        <menuitem label="Nouveau"/>
        <menuitem label="Ouvrir"/>
     </menupopup>
   </menu>
 </menubar>

En html, nous sommes obligés de transformer chaque < et > en entité. En XHTML, non. Il suffit de mettre le code source entre <![CDATA[ et le ]]>.

Mais ce n'est que de la théorie. En effet, en pratique, cela ne fonctionne pas avec IE (cela aurait été trop beau). Par contre cela fonctionne parfaitement avec Mozilla, quand la page XHTML est envoyé avec le type mime application/xhtml+xml.

On ne peut donc hélas pas utiliser les sections CDATA. Eh bien pour les scripts javascripts on n'a qu'à utiliser les commentaires <!-- et -->, me diriez vous. Oui mais non. Car en XML un commentaire est un commentaire. Son contenu doit être totalement ignoré par l'analyseur XML, il ne doit pas faire parti du contenu de la balise où il y a le commentaire. Ce qui est aisément vérifiable avec Mozilla : faites un test en lui envoyant une page XHTML avec le type mime application/xhtml+xml et une balise script comme ceci :

<script type="text/javascript"> <!--
      alert('hello');
   --></script>

Vous ne verrez jamais la petite boîte d'alerte avec le message Hello. Par contre, avec IE, vous la verrez. Mais ce n'est pas normal. Comme beaucoup de choses, Internet Explorer ne sait pas bien traiter les pages XHTML. C'est le boulet du web du début du 21ième siècle.

On pourrait enlever les balises de commentaires, mais là Mozilla s'insurge si il y a par exemple un < ou > qui traîne sans être transformé en entité. Et si on les transforme en entité, c'est IE qui n'est pas content car pour lui, une entité dans du code javascript, ce n'est pas normal (alors que Mozilla, un peu plus intelligent, interprète d'abord les entités avant d'exécuter le code).

Dans une page XHTML respectant les standards, les seules solutions comme je l'ai écrit à la fin de l'article, sont  :

  1. Mettre le script javascript dans un fichier à part, et faire un simple <script type="text/javascript" src="monscript.js"></script>
  2. Ou pour les masochistes, écrire le code entre ces deux bizarreries :
    <script type="text/javascript" >
    <!--/*--><![CDATA[//><!--
      ...
    //--><!]]>
    </script>