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
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 |
;; 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
The contents of this document, unless otherwise expressly stated, are licensed under the CC-BY-SA-2.5 license. The Gentoo Name and Logo Usage Guidelines apply.
|