Bah ce dont tu ne tiens pas compte pour le DTD/XSD, c'est juste qu'en réalité le XML n'est qu'un format générique qui n'a aucune signification, une sémantique très basique, et une seule aide à la vérification des erreurs, qui est cette redondance. Certains DTD, et en réalité la majorité des DTD (même "implicites") qui te serviront à représenter des données de manière non arborescente, font que tu ne pourras jamais avoir un cas où "<a><a></a></a>" est valide. Même pour ce qui est du XHTML, la règle générique est que tu peux tout mettre dans un bloc, et tu ne peux mettre dans un élément en-ligne que d'autres éléments en ligne, mais si tu suis bien le DTD (et tu es obligé pour être valide XHTML 1.0 ^^), en fin de compte tu ne peux quasiment avoir d'imbrication successives de la même balise que pour les div et les span (y'en a quelques autres mais je garde jamais ça en tête), ce qui réduit énormément le besoin de faire mieux niveau redondance, et fait que très souvent ça sera suffisant (mais pas toujours).
En fait là où ça ne sera pas suffisant, c'est là où tu vas exprimer une intention (i.e. pour du HTML, ou des règles en xml comme on en trouve avec fontconfig et hal sous linux) où dans une grande majorité des cas tu auras simplement fait une erreur de logique (i.e. tu as bien exprimé ce que tu voulais mais il ce trouve que tu voulais un truc mauvais, ou que tu n'as pas compris comment l'exprimer correctement), et parfois une erreur d'inattention. L'erreur de logique qui respecte la sémantique quoi qu'il en soit n'est jamais détectable qul que soit le langage, et tu peux rencontrer ce type de choses en XML que parce que le XML est vraiment très(trop) générique. (Merde j'aurai quand même fini par l'écrire T_T)
Et en fait pour les attributs rapport au DTD (et quand je dis DTD, ça pourrait être d'autres règles en plus où à la place d'un DTD comme en XAML par exemple ^^), en XHTML par exemple:
- class="toto", class est clairement de la sémantique, et "toto" a priori bien contenu (on a aucune idée de ce que peux valoir class)
- lang="fr", le tout est considérable comme de la sémantique (les valeurs autorisées sont spécifiées quelque part)
- checked="checked", le tout est plutôt du contenu que de la sémantique (l'attribut n'a qu'une seule valeur autorisée [+ absence de valeur], il ne contient rien, il "est" son contenu)
Et pour les erreurs, garde à l'esprit "possible d'être écrit par un humain", on ne va clairement pas demander à un humain de calculer la somme de contrôle de ses données, c'est pas son boulot
sinon je suis entièrement d'accord sur le fait que pour un document totalement valide (avec des fermetures balises explicites donc redondance), spécifier le nom de la balise fermée ou non, ne change strictement rien. Mais dans d'autre cas, un document sera considéré valide avec des </> (à juste titre ou non, ça pourrait laisser passer des erreurs de manière "positive" comme "négative") alors que rédigé avec redondance on détecterait une ou des erreurs.
Un autre truc qui me tient plus à coeur, c'est une erreur conne que tu pourrais sans trop de problèmes faire: <tag att1="toto" att2="titi" /><!-- Tiens j'ai pas dormi, à cause de ça je vais oublier que je viens de fermer cette balise --></tag>. Avec la version redondante l'erreur est identifiée tôt, directement, et clairement. (Tiens oui, voilà un argument: la redondance permet de détecter les erreurs tôt, quand tu lis (a priori toujours) le xml de manière linéaire

) Avec la version sans redondance heuuu <tag [...]/></> ben dans le meilleur des cas tu auras un mauvais nombre de balises, et le DTD pourra *peut-être* t'apporter des informations complémentaires sur la validité/à(avant) quel endroit à peu près se situe l'erreur. Après ce n'est un gros problème que dans le cas où tu échanges des données. (Si c'est pour exporter un webservice par exemple, ça va faire un bug bête et méchant quand tu vas essayer de te connecter, rien de très grave, mais si c'est pour échanger la liste des utilisateurs de "truc" les conséquences peuvent être plus ou moins graves (tu pourrais révéler des mdp ou leur md5...))
Bon voilà un beau bloc de texte (c'est malin tiens

)