Je me suis toujours demandé (et j'en profite pour créer un topic parceque je me fais chier) quelles étaient les raisons qui avaient conduit à la syntaxe du XML, et plus précisément celle des balises fermantes.
Un fichier XML valide s'écrit de la façon suivante :
<pwic>
<plop attr="kikoo">
<plup>texte</plup>
</plop>
</pwic>
Pourquoi donc faut-il préciser à nouveau le nom de la balise qu'on ferme, puisque de toutes façons croiser les balises est interdit ? Par exemple j'aurais trouvé une syntaxe comme celle-ci plus logique :
<pwic>
<plop attr="kikoo">
<plup>texte</>
</>
</>
(en plus ça rend la syntaxe des balises auto-fermantes, <balise />, bien plus logique puisque pour le coup il s'agit bien de la concaténation d'une balise ouvrante et d'une balise fermante sans contenu)
De toutes façons quand on ferme une balise, on ne choisit pas laquelle : c'est forcément la dernière qui a été ouverte. Le fait de re-préciser son nom fait double emploi et introduit même un risque d'erreur qui n'existerait pas si un simple </> était suffisant. Par ailleurs, ça augmente sensiblement la taille des fichiers XML (surtout ceux particulièrement structurés).
La seule réponse qui m'ait été donnée pour l'instant est : "ça apporte une sécurité supplémentaire sur le fait qu'on ne puisse pas croiser les balises". Autrement dit, ça permet de balancer une erreur si on parse un fichier XML et qu'on trouve une séquence de type "<a><b>plop</a>". Alors oui, c'est sûr, mais à ce titre on peut introduire toute une panoplie d'autres contrôles qui vont alourdir le fichier et contribuer à sa robustesse (je sais pas moi, répéter les attributs dans les balises fermantes, ajouter un checksum du contenu de chaque balise, on peut imaginer plein d'absurdités dans le genre). Disons que ça me semble illusoire d'intégrer dans la syntaxe du fichier un moyen de contrôle aussi faible, si c'était réellement l'objectif, et de passer à coté des tonnes d'autres erreurs qu'on pourrait imaginer et qui ont tout autant de probabilités (voire bien plus) d'apparaitre.
Personnellement je ne vois que deux raisons possibles :
- Un héritage de l'HTML, indispensable pour conserver le parallèle XML/HTML/XHTML. Mais ça ne fait que décaler la question : pourquoi ce choix a-t-il été retenu pour l'HTML ?
- Une aide visuelle quand un humain lit un fichier XML, au même titre que l'indentation. Un peu comme les gens qui mettent "// if" après avoir fermé un bloc "if { ... }" dans leur code, par exemple (bien que ça me semble inutile, une bonne IDE permet de visualiser automatiquement les blocs)
Auriez-vous des hypothèses (ou des explications) à coté desquelles je serais passé ?