Related link: http://groups.yahoo.com/group/emacs-nxml-mode/
Long-time XML pioneer James Clark last month unveiled the alpha of nXML-mode, a new XML-editing major mode for Emacs. (Apparently no homepage yet, but it has a discussion group and a download site.) I’ve been using it for about a week, and it feels quite robust and featureful despite its early status. More importantly, it seems much more lightweight and “clean” than PSGML-mode, heretofore one of the best options for XML editing in Emacs, but one that carries the weight of years behind it, treating XML more as a variant of SGML than a markup language unto itself.
I feel that nXML’s winningest feature is on-the-fly validation; feed it a schema, and the Emacs status bar will inform you whether or not the document is valid, and continuously update this information while you work. If it’s invalid, the troublemaking characters get underlined in red, and the mode offers keystrokes to quickly browse through all the errorsome parts, with a description of each error appearing in the minibuffer as a tooltip. (If you don’t load a schema, then the mode instead uses a built-in “vacuous schema” that simply checks for well-formedness.)
Loading a schema also gives you a context-sensitive auto-completion key binding. Like every other auto-completion tool in Emacs, one tap fills in as much as it can, and (if things are still ambiguous) two taps brings a Completion buffer containing every word that’s legal at this point. Performing the latter action after typing “<” will give you a list of every legal element at the cursor’s position. Very handy!
Interestingly, it validates only against RelaxNG schemas, and not DTDs. This sounds like it should be a deal-breaker (have you ever worked with anything other than DTDs before? Oh… well, I haven’t), but the mode’s README directs the user to trang, a Java-based conversion engine (and another Clark invention) that can easily turn DTD files into RelaxNG schema files. I’ve confirmed that it works great in the Mac OS X terminal, so it meets my needs, at least. I find this a very interesting and subversive way to draw people away from the crusty DTD spec (”Namespaces? What are those?”) for document validation. (On the other hand, the mode already ships with RelaxNG files for both DocBook and XHTML, which is exactly I wanted to use it for.)
(Clark is best known to me as the developer of expat, the venerable XML-parsing library, nearly as old as XML itself but still quite popular; it’s the core of the XML::Parser Perl module, for one thing. For more thoughts on XML::Parser, consult the green monkeys.)
Hacked XML with GNU lately?