Emacs como editor XML


Emacs es un extraordinario editor de textos que utilizo desde hace años (más de la cuenta :-) ), principalmente para algunas cosas de programación y LaTeX. Este año estoy descubriendo las posibilidades que tiene como editor XML utilzando el modo nxml.

En esta entrada se explica la configuración de emacs con el modo nxml, los pasos para transformar un esquema cualquiera al formato a rnc utilizado por emacs y cómo se demuestra la utilidad de XML con la validación al vuelo de documentos. En particular vamos a utilizar los esquemas de la api de virtualización libvirt y veremos que es mucho más sencillo así editar manualmente los ficheros de configuración para las máquinas y redes virtuales.

Esta implementación se ha realizado utilizando paquetes oficiales de la distribución de pruebas (actualmente squeeze) de Debian GNU/Linux, aunque seguramente es posible utilizarlo con pocos cambios en otras distribuciones GNU/Linux

nxml-mode en Emacs

La versión de emacs disponible en los repositorios de squeeze es la 23.2, que tiene la ventaja de que activa por defecto el modo nxml para cualquier fichero XML. Para ello basta con cargar el editor y crear un fichero nuevo con extensión XML, veremos como se configura inmediatamente el modo nxml. Si no funcionase esto de forma automática, podríamos seleccionar el modo manualmente con la instrucción de emacs (M se corresponde con la tecla Alt):


M-x nxml-mode

Emacs con el modo nXML activado

Lo primero que llama la atención es la aparición del mensaje “Invalid” en la barra inferior, que varía a medida que vayamos escribiendo el documento XML, realizando validación del documento al vuelo, inicialmente como es lógico no se puede realizar validación propiamente porque no hay ningún esquema asociado al fichero, sino que simplemente se comprueba que es documento esté bien formado desde el punto de vista de la sintaxis XML.

Utilización de esquemas en Emacs

La verdadera utilidad de emacs con XML se comprueba cuando se asocia un fichero al esquema de un determinado dialecto XML, entonces sí que realizamos correctamente la validación y además es posible utilizar el autocompletado con “Ctrl-Enter”. Emacs23 incluye algunos esquemas de los dialectos XML más usados, en particular XHTML 1.0 Transitional. En nuestro caso vamos a utilizar algo más genérico y para ello vamos a poner como ejemplo un fichero de configuración de un dominio (máquina virtual) en libvirt.

El esquema de libvirt está disponible en http://libvirt.org/schemas/ y consiste en varios ficheros en formato RELAX NG, los descargamos todos a un directorio de trabajo y ahora es necesario transformarlos al formato de esquema RELAX NG Compact utilizado por emacs. Para ello utilizamos el conversor RNG to RNC disponible en http://www.pantor.com/download.html, que consiste en ficheros de transformaciones XML (XSLT), que se pueden procesar con la aplicación xsltproc.

Una vez que tenemos en nuestro directorio de trabajo todos los ficheros en formato rnc, basta con abrir un nuevo fichero y poner el esquema domain.rnc manualmente a través del menú XML:

menu-XML

Ahora el documento se validará completamente conforme al esquema cargado, se podrán encontrar las etiquetas que faltan y el editor nos mostrará los valores posibles para los atributos, es decir un verdadero placer sobre todo cuando uno se enfrenta a ficheros de configuración nuevos, parámetros desconocidos o poca documentación.

Referencias

, ,

  1. #1 por Suso el 9-11-10 - 11:52 pm

    Hola, muchas gracias por poner un enlace en tu curso del Gonzalo Nazareno a la Visita Guiada a Emacs que tenemos en nuestra página.
    El asunto es que hemos reorganizado un poquito los contenidos y ahora la dirección real es

    http://gnu.manticore.es/paginas-replica/visita-guiada/Visita-guiada.html

    Estamos recibiendo visitas desde tu curso, pero ahora obtienen un 404

    Lo siento por dejar el comentario aquí, pero no encontré ningún modo de hacerlo en la página del instituto.

    Salud

    Me gusta

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: