Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Ève

Pas de macros en XML, hélas

Première rédaction de cet article le 9 juin 2008


Depuis des années que je fais des documents XML, je regrette l'absence d'un mécanisme de macros, permettant de mettre plusieurs éléments d'un coup.

Quelques exemples concrets pour expliquer ce qui me manque :

  • Je parle de noms de domaines dans des documents Docbook et, au lieu de <systemitem role="domainnname">fr</systemitem>, j'écrirai bien <domain>fr</domain>.
  • J'ai souvent en Docbook des énumérations qui n'ont qu'un seul paragraphe et, plutôt que de taper <listitem><para> à chaque fois, je préférai juste mettre <item>.

Les transformations XML ne résolvent pas le problème. Ce n'est pas la présentation finale que je veux changer, c'est le code XML tapé. Ainsi, si j'utilise un programme XSLT pour convertir mes « macros », comme l'éditeur XML ne les connait pas, il ne va pas pouvoir m'afficher les éléments valides (une fonction de mon éditeur XML dont je me passerais difficilement).

Les entités XML ne résolvent pas le problème parce que j'ai en général des paramètres (cf. l'exemple des noms de domaine ci-dessus). Et, de toute façon, elles ne survivent pas aux transformations XSLT.

Changer le schéma (ce qui est relativement facile avec des schémas comme Docbook) pour y introduire mes nouveaux éléments m'oblige ensuite à gérer une version locale de Docbook, et à adapter les feuilles de style alors que je veux juste définir un élément en terme d'autres éléments existants.

Les macros traditionnelles comme celles de M4 ou de cpp ne me plaisent guère car elles ne connaissent pas XML. Leur usage perturberait les éditeurs XML et, en utilisant ces macros, on risque de produire des documents invalides, voire mal formés (problème courant en C où l'usage des macros peut produire du code syntaxiquement invalide).

Je préférerai ce que les programmeurs Scheme appellent « macros hygiéniques » (« macros de transformation source à source » dans l'article de Wikipédia) mais elles ne semblent pas exister en XML ? C'est une des grosses limites de ce format. Les formats qui sont presque toujours produits par un programme comme JSON n'ont pas ce problème car ils ne cherchent pas à faciliter la vie d'un auteur humain. Mais XML est utilisé pour des textes (comme ce blog) et ce manque est donc sérieux.

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)