xhtml 1.0 strict en emacs con nxml-mode


El modo por defecto que utiliza el editor emacs para trabajar con ficheros html se denomina html-mode, pero me resulta más cómodo utilizar el modo genérico nxml para trabajar con ficheros xml (en este caso será con xhtml). En esta breve entrada explicaremos los pasos que hay que dar para utilizar nxml adecuadamente con ficheros html, seleccionando el esquema concreto que queramos utilizar.

Modo nxml para ficheros html

En primer lugar hay que decirle a emacs que cuando se abra un fichero con extensión .html, no debe activar el modo html, sino que en su lugar debe activar el modo nxml. Para ello editamos el fichero de configuración de nuestro usuario (por ejemplo ~/.emacs) e incluimos la línea (aprovechamos e incluimos en este modo también los ficheros con extensión .xml, .xsl y .xhtml):

(setq auto-mode-alist
      (cons '("\\.\\(xml\\|xsl\\|xhtml\\|html\\)\\'" . nxml-mode)
            auto-mode-alist)

De esta manera cada vez que abramos un fichero de extensión .html o .xhtml se activará el modo nxml.

Seleccionar un esquema concreto

Hay más de un esquema en XHTML 1.0 para validar los documentos, más concretamente los dos más habituales son XHTML 1.0 Transitional y XHTML 1.0 Strict (¿y XHTML 1.0 Frameset? Ejem. pasapalabra). Emacs en modo nxml utiliza por defecto XHTML 1.0 transitional, que es más tolerante que el modo Strict. Sin embargo, es mucho más adecuado para aprender HTML utilizar el modo estricto, por lo que vamos a cambiar el comportamiento de emacs para que cargue el esquema de XHTML 1.0 Strict por defecto.

Añadimos la siguiente línea a nuestro fichero de configuración de Emacs (~/.emacs por ejemplo):

(eval-after-load 'rng-loc '(add-to-list 'rng-schema-locating-files "~/.schemas/schemas.xml"))

Para que se busquen los esquemas de los diferentes dialectos en el directorio ~/.schemas, de acuerdo a lo especificado en el fichero schemas.xml, por lo que el siguiente paso es crear el directorio ~/.schemas y ubicar allí el fichero schemas.xml con el siguiente contenido:

<locatingRules xmlns="http://thaiopensource.com/ns/locating-rules/1.0">
    <namespace ns="http://www.w3.org/1999/xhtml" typeId="XHTML"/>
    <typeId id="XHTML" typeId="XHTML Strict"/>
    <typeId id="XHTML Strict" uri="xhtml-strict.rnc"/>
    <typeId id="XHTML Transitional" uri="xhtml-transitional.rnc"/>
</locatingRules>

Ahora tenemos que ubicar dentro del directorio ~/.schemas los ficheros con los esquemas de XHTML 1.0 Strict y XHMTML 1.0 Transitional en formato Relax NG Compact que utiliza Emacs. En primer lugar instalamos los paquetes xhtml-relaxng y trang. El primero incluye los esquemas de XHTML, pero en formato rng, no rnc y trang es una aplicación que permite transformar uno en otro.

Copiamos el directorio con los esquemas de XHTML en formato rng a un directorio temporal:

$ cp -a /usr/share/xml/xhtml-relaxng /tmp/esquemas/

Utilizamos trang para transformar los ficheros .rng a .rnc:

$ cd /tmp/esquemas
$ trang -I rng -O rnc xhtml.rng xhtml-transitional.rnc
$ trang -I rng -O rnc xhtml-strict.rng xhtml-strict.rnc

Por último movemos todos los ficheros en formato .rnc al directorio ~/.schemas:

$ mv *.rnc ~/.schemas

Ahora podremos decidir el esquema a utilizar a través del menú “XML > Set Schema > For Document Type”

, ,

  1. #1 por aldobelus el 27-03-13 - 11:03 am

    Gracias, ando loco buscando esta información. Me he puesto a estudiar desarrollo con emacs y me cuesta arrancar por eso, falta de info. En inglés hay pero no me aclaro con términos técnicos. Me refiero a información sobre desarrollo, que abunda menos.
    Has sido muy claro en tu explicación, gracias

    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: