La râlante du jour (dans le fil de la quête envisagée hier) :
Le W3C standardise
en XML l'usage de l'attribut xml:lang
pour
indiquer la langue du contenu d'un élément (la langue est
implicitement héritée par tous les descendants de la balise). J'en
fais un usage systématique[#]
quand je tape du texte en n'importe quelle variante
de XML (par exemple, si je dois
citer The Lord of the Rings dans ce blog,
j'écris : <cite xml:lang="en">The Lord of the
Rings</cite>
(et mon moteur de blog ajoutera
un lang="en"
en plus
du xml:lang="en"
pour
compatibilité HTML, mais peu importe ici). Très
bien.
Le W3C standardise un modèle d'objets (DOM) pour accéder à un document XML. Énormément de bibliothèques se basent dessus pour les manipulations, et il n'est pas trop déplaisant à utiliser. Tant mieux.
Mais ce DOM ignore complètement les
spécificités de l'attribut xml:lang
: aucune fonction
n'est prévue pour interroger la langue d'un élément
du DOM, ni pour copier/déplacer/supprimer un
élément en préservant sa langue et celle de tous les descendants
(c'est-à-dire en ajoutant un attribut xml:lang
si
nécessaire, ou en le retirant s'il est devenu superflu au nouvel
emplacement). Il faut tout faire à la main. Moins bien. Beaucoup
moins bien.
La façon évidente de procéder consiste en début de traitement à
propager systématiquement l'attribut xml:lang
à tous les
descendants de n'importe quel nœud, à manipuler le document
ainsi transformé, et à expurger les attributs xml:lang
inutiles à la fin du traitement. Malheureusement, cette façon
évidente est lente, très lente. Pas bien du tout, ça.
Alors, à chaque déplacement d'une balise, il faut se farcir une
réflexion pénible : Est-ce que je suis en train de casser
potentiellement un héritage de
xml:lang
, là ?
Bref, des petites crottes de ragondin, comme aime le dire mon ami David Monniaux.
[#] Dans le fol espoir, par exemple, qu'un jour il existe un correcteur orthographique en tenant compte (c'est-à-dire, capable de corriger un mélange aléatoire de français, d'anglais et de je ne sais quoi, dans n'importe quelle instance de XML, en prenant le bon dictionnaire pour chaque passage). Ou qu'un moteur de recherche sache en faire un usage intelligent. Je sais, je suis naïf, c'est touchant.