Accueil
 chercher             Plan du site             Info (English version) 
L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.Les listes de discussions XMLfr sont à votre disposition pour réagir sur nos articles ou simplement poser une question.Si vous ètes passionnée(e) par XML, pourquoi ne pas en faire votre métier ?XMLfr n'est heureusement pas le seul site où l'on parle de XML. Découvrez les autres grâce à XMLfr et à l'ODP.Les partenaires grâce auxquels XMLfr peut se développer.Pour tout savoir sur XMLfr.XMLfr sans fil, c'est possible !Pour ceux qui veulent vraiment en savoir plus sur XML.L'index du site.
 Si vous vous posez une question, vous n'êtes peut-être pas le premier...Les traductions en français des bibles XML.Ces articles sont des références dans leur domaine.Tout ce qu'il faut savoir pour démarrer sur un sujet XML...


Édition de fichiers XML avec Emacs et nxml

Un coup d'œil rapide au dernier cadeau de James Clark

Xavier Cazin
mercredi 26 novembre 2003 (mis à jour le mardi 16 décembre 2003)

La validation en temps réel est une fonctionnalité très appréciée des auteurs de documents XML. Non seulement les erreurs dans le document ou le schéma sont immédiatement détectées, mais il devient superflu de connaître le schéma par cœur puisque l'éditeur le connaît pour vous et propose au fur et à mesure les valeurs imposées par ce schéma. Du coup, l'utilisateur peut se lancer sans crainte dans l'édition de documents qui suivent des schémas ad hoc, plus adaptés aux données que l'on souhaite organiser, et moins génériques que les sempiternels DocBook ou XHTML.

Une autre fonctionnalité importante des éditeurs XML est leur capacité à insérer des caractères qui ne se trouvent pas sur le clavier de l'utilisateur. Travailler avec une table des références Unicode est pénible, et il est dommage de ne pas profiter des glyphes correspondants s'ils sont effectivement disponibles dans les polices chargées par le système.

Enfin, on aimerait que les éditeurs XML sachent récupérer automatiquement le schéma habituellement associé au document en cours d'édition. Cela permet notamment de s'affranchir des déclarations explicites via le fameux DOCTYPE, qui sent un peu trop son SGML. De même, associer manuellement le schéma au document à chaque édition impose de se souvenir du chemin d'accès ou de l'URI du schéma, et de vérifier que la version recherchée est bien disponible.

La puissance d'Emacs au service de XML

Tout cela, nxml le fait déjà, alors qu'il n'est encore qu'en version ϐ et que le fichier TODO promet beaucoup plus. Il s'agit d'un nouveau « mode » Emacs (autrement dit, un environnement d'édition spécifique à une classe de fichiers) que vient d'écrire James Clark, et qui a laissé Tim Braysans voix. Le but de Clark est d'encourager les auteurs de documents XML à quitter les DTD pour passer à RELAX NG. Pour ce qui me concerne, c'est réussi :-) Je n'ai pas encore converti toutes mes DTD, mais depuis fin septembre 2003, tous mes nouveaux schémas sont écrits en RNC (la syntaxe non-XML de RELAX NG, beaucoup plus compacte et facile à écrire que l'autre).

Une documentation reste à écrire sur l'utilisation d'Emacs limitée à l'édition d'une seule classe de fichiers. Cela aiderait les non-utilisateurs d'Emacs à le lancer en tant que « simple » éditeur XML. En attendant, je suis obligé de considérer dans la suite que le lecteur s'est déjà un peu frotté à Emacs (sous Windows, MacOS X, Unix, peu importe).

Si vous travaillez avec la distribution Debian, vous ne serez pas étonné d'apprendre qu'il existe déjà un paquet nxml-mode dans « unstable ». Vous pouvez aussi récupérer la dernière version en date du comprimat et de la désarchiver dans un endroit pertinent du système de fichiers ; il suffit alors d'ajouter ces quelques lignes à son fichier Emacs :

(add-to-list 'load-path "/usr/local/lib/elisp/nxml-mode") 
 (add-to-list 'auto-mode-alist '("\\.xml$" . nxml-mode))
 (add-to-list 'auto-mode-alist '("\\.xsl$" . nxml-mode))
 (load "rng-auto")
 (setq nxml-auto-insert-xml-declaration-flag t)
 (setq nxml-slash-auto-complete-flag t)
 (add-hook 'nxml-mode-hook 'turn-on-auto-fill)

Cela permet à Emacs de localiser les sources du package (n'oubliez pas de remplacer le chemin par celui correspondant à votre installation), d'associer a priori le mode nxml aux fichiers se terminant par .xml et .xsl, et d'initialiser les variables indispensables. J'ai aussi ajouté trois lignes de « personnalisation », qui me permettent d'insérer automatiquement la déclaration xml en tête des nouveaux fichiers, de fermer un élément en tapant simplement </, et de passer à la ligne automatiquement quand le texte dépasse la marge droite.

Éditer des documents « standard ».

nxml reconnaît nativement quelques schémas bien connus. À l'heure où j'écris ces lignes, on peut directement éditer avec nxml des documents de type :

  • DocBook
  • XHTML
  • XSLT
  • RELAX NG
  • RDF

Si on « visite » un fichier correspondant à l'un de ces schémas, nxml démarre la colorisation, lance la validation et souligne (par défaut en rouge) les endroits où le schéma n'est pas respecté. Quand plus aucune erreur n'est détectée, un rassurant Valid s'affiche sur la ligne d'état d'Emacs.

À partir de là, on peut éditer le document à loisir. Pour insérer un nouvel élément, il suffit de taper < suivi de C-Return pour voir s'afficher les noms des éléments autorisés (avec préfixe d'espace de nom s'il est défini). Une fois l'élément choisi, la balise correspondante s'écrit à l'endroit du curseur, et on peut continuer avec les attributs : un nouveau C-Return affiche la liste des attributs autorisés. Une fois l'attribut choisi, on peut encore demander la complétion des valeurs possibles (toujours par C-Return) si le motif défini dans le schéma pour cet attribut le permet.

Schémas moins courants ou cousus-main

Pour éditer des fichiers XML de type moins courant, il suffit d'indiquer explicitement à nxml où se trouve le schéma correspondant. Attention, ce schéma doit respecter la syntaxe compacte de RELAX NG. Si vous disposez d'une DTD, d'un schéma W3C, ou d'un schéma RELAX NG en syntaxe XML, commencez par le convertir en .rnc, avec trang ou le RELAX NG Converter de Sun.

Lorsqu'on associe explicitement un schéma à un document XML, nxml en profite pour demander si l'on souhaite sauvegarder l'association. Si oui, une entrée sera ajoutée dans le fichier de localisation par défaut. La prochaine fois que vous ouvrirez ce même document XML, le même schéma sera chargé. Ces fichiers de localisation de schémas mettent en œuvre une proposition toute récente de James Clark, qui généralise les catalogues XML. Il s'agit d'un ensemble de règles qui permettent d'associer de façon très souple un schéma à une famille de documents. Rien n'empêche donc d'enrichir ce fichier en y ajoutant vous-même les règles qui associeront vos documents à leur schéma.

Quand on a goûté une fois à RELAX NG, on est rapidement démangé par l'envie d'écrire des schémas adaptés à ses propres applications. Un jeu d'enfants sous Emacs. Pour l'édition de schémas proprement dite, ce n'est plus nxml qui entre en jeu, mais un simple mode de colorisation et d'indentation, rnc-mode, que l'on peut récupérer ici. Quand le document XML et son schéma sont chargés simultanément dans Emacs, nxml peut malgré tout servir de validateur pour le schéma lui-même. En cas d'erreur dans le schéma, il ouvre une fenêtre sur le tampon du schéma, fait un petit commentaire, et positionne le curseur à l'endroit de l'erreur (en général ; c'est moins précis quand le schéma est modulaire).

Entités, DOCTYPE, et références Unicode

L'abandon par RELAX NG de la notion d'entité caractère peut se révéler déstabilisant pour ceux qui avaient l'habitude d'accéder aux caractères Unicode par des mnémoniques du style &oelig; ou &thinsp;. Idem pour ceux qui s'étaient constitué une petite bibliothèque de raccourcis du genre &signature;.

Ici encore, la transition entre l'univers des DTD et celui des schémas RELAX NG est facilitée par nxml.

  • D'une part, nxml reconnaît les déclarations <!DOCTYPE>, y compris lorsqu'elle contiennent des déclarations <!ENTITY>. D'ailleurs, les entités caractères ainsi déclarées au début du document sont reconnues par la suite par le validateur. En revanche, James Clark déconseille fortement de faire appel à des DTD externes par ce moyen, pour préserver l'autonomie du document XML. La modularisation se fera via le quasi-standard XInclude quand il sera implémenté incessamment. Il n'y a pas de raison de penser que les sous-documents ne pourront pas eux aussi contenir de déclaration <!DOCTYPE>.
  • Cela dit, si les raccourcis font partie intégrante du schéma, pourquoi ne pas les ajouter au schéma lui-même, sous forme d'éléments vides (par exemple <signature/>).
  • D'autre part, les références de caractères Unicode sont directement insérables dans le document à partir de leur dénomination standard : en tapant C-c C-u, on se voit proposer une liste (personnalisable) de noms Unicode, qui se réduit à mesure que l'utilisateur frappe les premières lettres (mécanisme de complétion d'Emacs). Lorsqu'il ne reste plus qu'un nom, par exemple « ALMOST EQUAL OR EQUAL TO », on obtient la référence Unicode (&#x224A;). Pour aider la relecture, le glyphe correspondant (≊) s'affiche aussi pour peu qu'il soit disponible dans une police accessible pour Emacs. Si l'on souhaite insérer le glyphe et non la référence, c'est aussi prévu ☺ (euh je voulais dire :-).

À vous de jouer !

Le couple Emacs / nxml constitue donc dès aujourd'hui un éditeur XML de très haut niveau. Rappelons que les outils basés sur l'impressionnante bibliothèque libxml2 (comme xmllint ou les nombreuses API pour Python, Perl, OCaml...) sont capables d'effectuer des validations à partir de schémas RELAX NG. Nous voilà donc dotés d'une chaîne d'édition et de transformation XML complète, Open Source, multi-plates-formes, confortable, rapide, élégante, bref, prête à affronter le 21e siècle.

Pour en savoir plus

Autres articles :


 

Mots clés.



L'histoire de XML s'écrit en ce moment même. XMLfr vous aide à la suivre et à en dégager les tendances.


Les documents publiés sur ce site le sont sous licence "Open Content"
Conception graphique
  l.henriot  

Conception, réalisation et hébergement
Questions ou commentaires
  redacteurs@xmlfr.org