Gentoo Logo

Disclaimer : This document is a work in progress and should not be considered official yet.


Uso del modo nxml de emacs para editar documentos XML

Content:

1.  Introducción

Presuponemos que el lector tiene cierta familiaridad con el editor de textos emacs. El modo nxml, excelente producto del creador James Clark, funciona con las versiones de emacs a partir de la 21.3 (no XEmacs) y actualmente se encuentra incorporada a la base de código de las versiones emacs a partir de la 23.0, desplazando así a XmlMode como el modo predeterminado con el cual emacs abre los archivos XML.

nxml es un modo mayor que ofrece edición validada en caliente de textos marcados con código XML, motorizada por el lenguaje de descripción de esquemas relax-ng. A diferencia del otro modo mayor predominante en el mundo emacs, psgml de Lennart Staflin, u otros similares, es capaz de hacerlo incrementalmente a tiempo real.

Para que emacs sepa cuales archivos deben abrirse usando nxml, debemos agregar unas líneas al archivo de configuración ~/.emacs para asociar los archivos terminando en .xml, .xsl, .rng o .xhtml con nxml:

Code Listing 1.1: Configurando emacs para usar nxml

Escriba o corte y pegue las líneas siguientes
;; inicialización del modo nxml
(setq load-path
  (append load-path '("/usr/share/emacs/site-lisp/nxml-mode/")))

(load "/usr/share/emacs/site-lisp/nxml-mode/rng-auto.el")

;; cargar nxml para archivos xml, xsl, rng y xhtml
(setq auto-mode-alist
  (cons '("\\.\\(xml\\|xsl\\|rng\\|xhtml\\)\\'" . nxml-mode)
    auto-mode-alist))

En el árbol Portage, existe un paquete que instalará los esquemas que nos asistirán en la edición de documentos para Gentoo, entre los cuales está nuestro propio GuideXML, con el cual se marcan documentos como este:

Code Listing 1.2: Instalando esquemas de documentos Gentoo

# emerge app-emacs/nxml-gentoo-schemas

Este comando instala los siguientes esquemas en formato relax-ng compacto (.rnc), con los cuales nxml valida los documentos usados por Gentoo:

Code Listing 1.3: Archivos de esquema instalados

/usr/share/emacs/etc/nxml-gentoo-schemas/project.rnc
/usr/share/emacs/etc/nxml-gentoo-schemas/metadoc.rnc
/usr/share/emacs/etc/nxml-gentoo-schemas/metadata.rnc
/usr/share/emacs/etc/nxml-gentoo-schemas/book.rnc
/usr/share/emacs/etc/nxml-gentoo-schemas/funnychars.rnc
/usr/share/emacs/etc/nxml-gentoo-schemas/gleps.rnc
/usr/share/emacs/etc/nxml-gentoo-schemas/staffing-needs.rnc
/usr/share/emacs/etc/nxml-gentoo-schemas/common.rnc
/usr/share/emacs/etc/nxml-gentoo-schemas/schemas.xml
/usr/share/emacs/etc/nxml-gentoo-schemas/userinfo.rnc
/usr/share/emacs/etc/nxml-gentoo-schemas/guide.rnc
/usr/share/emacs/etc/nxml-gentoo-schemas/glsa.rnc

Este ebuild instala también el archivo de configuración /usr/share/emacs/site-lisp/site-gentoo.d/60nxml-gentoo.el que permite que emacs ubique de manera transparente los esquemas disponibles.

Ahora, al leer un archivo de cualquiera de los tipos especificados en ~/.emacs, estos serán abiertos automáticamente en modo nxml.

Gentoo también proporciona el ebuild app-emacs/nxml-docbook5-schemas para instalar el esquema para edición de documentos XML de DocBook y app-emacs/nxml-svg-schemas para documentos SVG.

2.  Usando nxml

Validación

La gigantesca ventaja de poder visualizar los errores de validez del documento al crear o editar documentos en XML es aparente enseguida. No es necesario ejecutar ningún proceso manual o externo. Cualquier inconsistencia o malformación en la estructura del documento será señalada inmediatamente en el mismo lugar del documento donde ocurre con un subrayado rojo y en la línea de modo.

Un recurso muy valioso para analizar la estructura XML es colocar el punto (el cursor) en cualquier lugar del documento y podremos confirmar que es válido hasta allí con una mirada a la línea de modo.

Si seguimos los pasos anteriores, nxml debe resolver el esquema adecuado automáticamente. Para confirmar el esquema cargado, el comando C-c C-s C-w reportará el esquema activo. En caso de no operar un esquema activo, nxml reportará "Using vacuous schema" en el minibuffer, pero seguirá actuando, aunque con funcionalidad reducida.

Si no corresponde al esquema deseando, podemos usar el comando C-c C-s C-f para cargar otro esquema de manera explícita. Para crear una asociación persistente entre el documento y el esquema, el comandoC-c C-s C-l grabará el archivo schema.xml en el mismo directorio con este fin.

Estando activada la validación automática, podemos constatar el estado de validez del documento en la línea de modo, que nos podría informar: nXML Valid o nXML Invalid. Si la validación no está activada, solo nos informará nXML. Podemos activar o desactivar la validación en caliente con el comando C-c C-v.

Para validar un documento de cabo a rabo, vaya al inicio y use el comando C-c C-n para buscar el siguiente error. Si nos topamos con algún error, podemos pasar el punto sobre el texto subrayado en rojo y obtendremos una breve descripción en el minibuffer acerca de la posible causa.

Completando rótulos XML

El modo nxml nos ayuda a escribir documentos XML bien formados y conformes al esquema en vigor, de manera bastante más eficiente que usando herramientas externas.

En un documento XML bien formado, es obligatorio comenzar con una declaración standard. El modo nxml nos lo proporciona, siempre igual, siempre correcta con la combinación C-c C-x.

Si necesitamos escribir repetidas veces una palabra rodeada siempre de rótulos de apertura y cierre, basta escribirla así una vez y luego solo escribimos la palabra y luego la combinación C-c C-d. nxml busca en el buffer actual el tratamiento anterior y la aplica de la misma manera a la palabra que acabamos de escribir.

Si comenzamos a escribir un determinado rótulo XML, podemos usar la combinación C-Return (en caso que estemos en una consola debemos usar M-Tab) y escoger entre los rótulos apropiados al estilo acostumbrado por los que usamos la autocompletación con la tecla TAB en bash o en emacs. Solo hace falta escribir una o dos letras y completar el rótulo al pulsar la tecla Tab.

Si uno configura la variable nxml-slash-auto-complete-flag y le asigna un valor no nulo, puede utilizar la completación automática de rótulos de cierre (electric slash mode) al escribir la combinación </. Esta configuración se puede hacer en ~/.emacs o temporalmente con M-x configure-variable <Return> nxml-slash-auto-complete-flag <Return> y seguir las instrucciones en pantalla.

nxml nos ayuda a escribir un rótulo de cierre cuando hayamos escrito el inicial, por ejemplo <title>, el texto y al cerrar, lo hacemos con C-c C-f para que nxml se encargue de insertar el rótulo de cierre </title> adecuado.

Si comenzamos a escribir un rótulo de inicio, nxml nos ahorra tiempo cerrándolo con el > y al mismo tiempo darnos dos opciones para insertar el rótulo de cierre correspondiente: con la C-c C-i para obtener el rótulo en la misma línea o C-c C-b en la línea siguiente.

Caracteres especiales

nxml también nos brinda ayuda para escribir caracteres de la póliza Unicode como entidades. Para una la letra zeta minúscula griega, comenzamos con C-c C-u y escribimos gr, pulsamos la tecla Tab para completar la palabra GREEK y aparecerá un buffer temporal con todas las letras que cumplen este patrón.

Siga escribiendo small y pulse Tab. El buffer desplegará una lista más reducida para reflejar cambio en la concordancia y podremos ver más claramente qué más debemos escribir para obtener nuestra zeta. Escriba ze y Tab. Al confirmar la descripción completa del caracter en el minibuffer, podemos pulsar Enter para insertar el código de entidad correspondiente a nuestra ζ.

Si dispone de una fuente que puede mostrar el caracter, el comando C-u C-c C-u funciona de manera similar, pero inserta el caracter de manera directa en el texto.

Desplegando el documento

El modo nxml también nos ofrece la posibilidad despliega el documento para poder estudiarlo de manera esbozada (outline). Con las mismas combinaciones del conocido outline mode, prefijados con C-c C-o en vez C-c, podemos obtener rápidamente una vista a ojo de pájaro con C-c C-o C-t y regresar a la vista completa con C-c C-o C-a.

nxml usa la variable nxml-section-element-name-regexp para programar el reconocimiento de las secuencias que identifican las secciones del documento.

Más ayuda en línea

Para obtener una ayuda breve descripción mientras trabajamos en el editor, podemos acudir a M-x describe-mode y si necesitamos algo más extenso, tenemos el manual info de nxml con M-x info.

Esperamos que esta breve guía haya abierto el apetito a este modo que pone todo el poder de emacs al servicio de la edición productiva de documentos XML.

3.  Recursos



Print

Page updated August 27, 2010

Summary: Este documento intenta dar una sencilla introducción y explicaciones sobre el uso del modo nxml en emacs para editar documentos XML en Gentoo Linux.

John Christian Stoddart
Autor

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.