Ambïguïté de l'interprétation des sections CDATA des documents XML
Bonsoir,
Un détail me tracasse avec les sections CDATA, qui m'inspirent de plus en plus de les écarter autant que possible (pour leur préférer l'échappement standard par les entités de caractères).
Un exemple tout fait m'est venu pendant que je faisais mumuse avec ces fameux fichiers d'archive des MP de Developpez.net
Ces archives encapsulent les corps des messages dans des sections CDATA. Ces messages qui sont à l'origine du BBCode, sont destinés à subir un traitement des espaces identique à celui qui se fait en HTML (à l'exception des balises « code » - j'y viens plus loin, à la fin). Mais d'un autre coté, le CDATA peut (ou est souvent) utilisé pour représenter du code (dans n'importe quel langage), et dans ce dernier cas, les espaces sont à traiter comme des espaces inscécables.
Trés bien, mais si par exemple je traite les espaces des CDATA des archives de MP comme des espaces inscécables, il pourrait y avoir des surprise aprés traitement et affichage : de longues séries de blancs pourraient ne plus être compactées ; comme elles le devraient.
Bref, le CDATA, c'est ambigü, et le mieux est encore d'employer des entités de caractères, qui elles, sont bien plus explicites. Par exemple les archives de Developpez.net pourraient mettre des espaces inscécables dans les balises « code », soit-codé en entités, soit-en caractères Unicode, et les messages seraient encodés eux aussi normalement, en caractères et en entités.
Parce qu'en plus là on voit jusqu'où peut-aller l'ambiguïté : une même section CDATA peut avoir des espaces devant tantôt être traités comme inscécables, tantôt non-inscécables.
C'est ennuyeux ... les sections CDATA.
C'est décidé, je les bannis. D'ailleur j'ai décidé pour mon truc fait maison, que les sections CDATA lues, seraient enregistrées sans CDATA. Mais voilà : comment les lire ??! Par défaut, en considérant tous les espaces comme inscécables, ce qui est loin d'être idéal comme nous l'avons vu précédement, mais qui a au moins l'avantage d'être la moins pire des solutions (traiter tous les espaces comme scecables serait encore pire)
Oilà, c'était le coup de gueule du week-end :)
solution: l'attribut « space »
Finalement je persiste dans l'idée de me débarasser des sections CDATA (l'application peut lire le CDATA, mais n'enregistre jamais avec des CDATA). Et pour interpréter les espaces même en dehors de tout doctype, alors je pense à l'utilisation là où c'est nécéssaire de l'attribut space.
space peut prendre la valeur default ou preserve. Pour ne rien alourdir, il suffit de ne pas écrire l'attribut quand les espaces doivent être compactés (space="default").
Voir l'attribut xml:space
L'attribut pourrait être fixé à l'enregistrement en fonction de l'interprétation du doctype s'il est connu et reconnu, et ignoré à la lecture si le doctype est connu et reconnu, car cette caractéristique peut être inférrée alors du doctype qui me semble prioritaire sur l'attribut (mais est-ce légal de l'ignorer ici ? je veux dire d'ignorer un attribut comme ça.....), ou éventuellement si en lecture un attribut space apparait en contradiction avec le doctype, alors une erreur pourrait être signalée.
Dans le cas de documents sans doctype ou alors dont le doctype n'est pas reconnu, alors il suffirait de préserver à l'enregistrement les attributs space tel qu'ils ont été trouvés en lecture (en ommettant éventuellement d'écrire les attributs space dont la valeur est default)
Je met le tag Résolu ? .... mmmhg, oui, peut-être ;)
Pour ceux/celles qui auraient encore des doutes . . .
Pour ceux/celles qui auraient encore des doutes . . .
Ici Londre, c'est le W3C qui vous parle :fleche: XML Canonical form (version 1.0 - TR/xml-c14n) (il existe un jeu de teste qui en dérive, avec lequel je valide d'ailleur mon application)
Excusez moi... j'insiste une fois de plus, mais transmettre et stoquer du XML dans l'ignorance de ces règles d'équivalences serait une énorme erreur.
Ce que je retiens de certains propos tenus dans ce fil : il y a des applications qui n'ont de qualificatif XML que le nom, et qui sont trop dépendantes de choses envers lesquelles elles ne devraient absolument pas être dépendantes (à l'exemple des codes de programme qui dépendent de caractérisitiques dont ils ne devraient pas dépendre).
Ah .... au passage, je répond à autre chose : c'est pas parce qu'on vient du monde du Web qu'on n'est pas capable de comprendre XML - et franchement, je ne vois absolument pas ce qui fonde de tels propos (j'ai assez épluché la dernière spécification, et d'ailleur depuis que je les connais, j'ai toujours préféré XML a HTML - même si je préfère HTML à XHTML, mais c'est une autre histoire - ceux/celles qui font du web ne sont pas des personnes plus bêtes que les autres). Zut alors... c'est à préserver les données :mrgreen: C'est vrai quoi :D Qu'est-ce qu'on deviendrait si elles ne voulaient plus rien dire : dans le mot « informatique », ne retrouve t-on pas la même racine que dans le mot « information » ? ;)
Bon, allez.... bonne nuit.... besoin de repos pour tout le monde