1.1. Introducción

1.1.1. Concepto

Un lenguaje de marcas o lenguaje de marcado es un lenguaje que mediante marcas incorporadas al texto de un documento permite informar de la estructura del propio texto, su significado o su presentación visual.

Por ejemplo, supongamos lo siguiente:

{\titulo Libro interesantísimo}
{\parrafo Desgraciadamente he olvidado las ideas que me animaron a escribirlo}

Está claro que hemos introducido una serie de marcas que nos informan de cuál es el título del documento y de que tiene un párrafo. Cada lenguaje dispone de unas etiquetas propias (su vocabulario) que se combinan mediante unas determinadas reglas (la sintaxis).

Dentro de los lenguajes de marcas existen los lenguajes de marcas ligeros, que son aquellos diseñados para que sean fáciles de escribir usando un simple editor de textos, e incluso fáciles de leer en crudo.

Es tremendamente importante notar que el concepto de lenguaje de marcas surge por la necesidad de marcar el texto de un documento (de ahí, que esta expresión se escribiera en cursiva en su definición), no un conjunto de datos que no constituye un texto. Por ejemplo, un lenguaje de marcas sería apropiado para dotar de marcas al texto que constituye mi diario personal, pero no tanto para marcar mi lista de la compra que es una mera enumeración de artículos que necesito, o sea, un conjunto de datos sin una estructura narrativa[1]. Entonces, ¿qué sería más apropiado para enumerar datos? He aquí la respuesta:

Un lenguaje de serialización de datos es un lenguaje especialmente diseñado para serializar datos, esto es, para transmitir un conjunto de datos o almacenarlos temporalmente. El lenguaje, en principio no tiene por qué producir documentos legibles, pero nosotros nos centraremos en los textuales, esto es, en los que generan flujos de datos directamente leíbles por un humano, ya que los lenguajes de marcas definidos anteriormente se caracterizan por ser textuales.

La confusión entre ambos tipos de lenguajes deriva de que ha sido y es muy común usar lenguajes de marcas (en especial dialectos XML como trataremos más adelante) para serializar datos. Profundizaremos en ello.

Prudencia

A pesar del uso común de la palabra «lenguaje», ni los lenguajes de marcas ni los lenguajes de serialización de datos son lenguajes de programación, sin perjuicio, eso sí, de que podamos definir lenguajes de programación cuya sintaxis se ajuste a un lenguaje de marcas. Por ejemplo, XSLT es un lenguaje de programación con sintaxis XML.

Terminología

Antes de empezar, es conveniente aclarar algunos de los conceptos con los que nos encontraremos en este texto:

Texto plano

Es el archivo digital que contiene únicamente caracteres legibles por los humanos.

Editor de texto

Es la aplicación que permite escribir documentos de texto sin formato, o sea, lo que vulgarmente se conoce como archivos de texto plano.

Procesador de texto

Es la aplicación que permite escribir documentos de texto con formato tipográfico (distintos tipos de letra, negritas, cursivas, etc.)

Procesador (a secas)

Es la aplicación que permite procesar un texto de entrada a fin de obtener otro de salida. Por ejemplo, en este sentido un navegador es un procesador ya que permite convertir un texto plano (ya veremos que los archivos «web»[2] lo son) en un documento con formato agradable a la vista.

1.1.2. Marcas[3]

Este epígrafe está dedicado a exponer dos aspectos de las marcas:

1.1.2.1. Tipos

En el marcado se pueden distinguir cinco tipos distintos:

Marcado de puntuación

Es el sistema de marcas que proporciona, fundamentalmente, información sintáctica sobre el texto. Los puntos o las comas en un texto manuscrito, por ejemplo, son marcado de puntuación. El problema de este marcado es que no es inequívoco y, además, está sujeto a variaciones en el estilo. Todos hemos dudado a la hora de poner una coma y, aún más, hasta entre reputados expertos podría haber disputa sobre si se debe escribir o no. O bien, ¿qué significa un punto? Porque a veces indica el final de una frase y a veces marca el final de una abreviatura.

Marcado de presentación

Es el marcado que se realiza sobre entidades de nivel superior[4] para que la presentación sea más clara. Dejar una línea en blanco entre párrafos o sangrar su primera línea es marcado de este tipo. Empezar un nuevo capítulo en la siguiente página impar también lo es.

Marcado de procedimiento

Es el marcado que expresa las órdenes para formatear el texto. Por ejemplo, al acabar un párrafo y comenzar el siguiente, se incluiría una orden que indicase al procesador que hiciese un doble salto de línea. Esa orden sería un marcado de procedimiento.

Marcado descriptivo

El marcado descriptivo identifica qué significa cada elemento de texto, pero sin expresar cómo ha de procesarse. Por supuesto, es necesario que el marcado identifique tanto el comienzo como el final de ese elemento de texto. El ejemplo con el que abrió la explicación es un ejemplo de marcado descriptivo:

{\titulo Libro interesantísimo}

La marca identifica «Libro interesantísimo» como un título, pero no expresa cómo debe representarse.

Marcado referencial

Son marcas que refieren entidades externas y que durante el procesamiento deben ser reemplazadas por estas. Por ejemplo, durante la escritura de este documento se usa la marca referencial |XML| que el procesador acaba sustituyendo por un acrónimo que incluye su significado.

Metamarcado

Es marcado que permiten controlar la interpretación del propio marcado o ampliar el vocabulario con nuevas marcas. Por ejemplo, la definición de una marca que define una macro equivalente a la inclusión de varias marcas, es un metamarcado.

1.1.2.2. Estrategias de marcado

Atendiendo a la estrategia que siga un lenguaje al marcar, podemos distinguir:

Marcado de presentación

Es aquel en que se informa del formato del texto. Se usan para maquetar el texto, pero por lo general no precisan cuál es su estructura, por lo que es muy complicado mediante un procedimiento automático deducir cuál es ésta. Los procesadores de textos WYSIWYG suelen usar este tipo de marcado.

Ejemplo:

El Quijote comienza con este célebre fragmento:

   En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho
   que vivía un hidalgo de los de lanza en astillero, adarga antigua, rocín
   flaco y galgo corredor.

El Buscón, en cambio, ...

En este caso, hemos marcado una cita sangrando un poco el párrafo.

Marcado procedimental

Son aquellas marcas que proveen instrucciones para que el sistema informático procese el texto, por lo general, para su presentación.

Ejemplo:

El Quijote comienza con este célebre fragmento:
.sk 2 a;.in +10 -10;.ls 0;.cp 2
En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho que
vivía un hidalgo de los de lanza en astillero, adarga antigua, rocín flaco y
galgo corredor.
.sk 2 a;.in -10 +10;.cp 2;.ls 1
El Buscón, en cambio, ...

Las marcas incluidas indican al procesador hacer lo siguiente:

  1. Saltar dos líneas.

  2. Empezar en la columna 10 y acabar 10 columnas antes.

  3. Forzar el interlineado sencillo.

  4. Saltar de página en caso de que falten menos de dos líneas para acabar la página.

Marcado descriptivo (o semántico)

Son marcas que definen qué significa cada fragmento del texto, pero por lo general, sin proporcionar información de cómo debe ser procesado.

Ejemplo (HTML):

<p>El Quijote comienza con este célebre fragmento:
<blockquote>
En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho
que vivía un hidalgo de los de lanza en astillero, adarga antigua, rocín
flaco y galgo corredor.
</blockquote>
<p>El Buscón, en cambio, ...

A su vez, dependiendo de la función descriptiva de las etiquetas, podemos distinguir entre:

Marcado descriptivo orientado al documento

Las marcas describen cuál es la función semántica de cada parte del documento: éste es el título, esto es un párrafo, esto otro es una cita, etc… como en el ejemplo superior. HTML es un típico ejemplo de lenguaje de este tipo de marcado. Incluiremos su estudio en la parte del módulo dedicada a las tecnologías web.

Un aspecto muy importante de esta estrategia es cómo procesar luego el documento para obtener un texto cómodamente legible. Hay dos vías para ello:

  1. Definir cómo debe representarse cada componente de la estructura del texto mediante hojas de estilo como:

    • DSSSL para documentos SGML.

    • CSS para documentos XML (y HTML)

  2. Transformarlo en otro documento que sí tenga representación. Para obrar la transformación es preciso utilizar un procesador. Por ejemplo:

    • Sphinx, si el documento está escrito en formato reST, que es capaz de generar un HTML o un PDF. Es la herramienta que usa este manual para obtener la página que ahora mismo está leyendo.

    • En documentos XML, XSLT que permite transformar a otro tipo de documento como HTML, legible con navegador, o XSL-FO, que a su vez ya tiene definidas transformaciones para PDF o PostScript.

    • Crear nosotros mismos el procesador con un lenguaje de propósito general. Si el formato original es XML, prácticamente todos los lenguajes tienen librerías para su manipulación.

Marcado descriptivo orientado al dato

En archivos que contienen datos, las marcas identifican el significado de cada dato y los estructuran. Más adelante veremos un ejemplo de documento con este tipo de marcado.

Nota

Los lenguajes de marcas, propiamente, son aptos para esta primera estrategia descriptiva, ya que existe un texto narrativo que marcar. La segunda estrategia, en cambio, es la propia de los lenguajes de serialización de datos.

En el módulo, dedicaremos el primer tramo del curso a estudiar unos y otros lenguajes para el marcado descriptivo orientado al dato. En cambio, el segundo, que aborda la tecnología web, trata HTML, que es un lenguaje de marcado descriptivo orientado al documento.

Los lenguajes de marcas suelen ensayar preferentemente una estrategia de marcado, aunque puede tener marcas de alguna estrategia distinta. Por ejemplo, HTML dispone, por lo general, de marcas descriptivas (como <p> o <h1>), pero también de algunas marcas procedimentales (como <b> o <br>).

1.1.3. Validez

Como iremos descubriendo más adelante, todos estos lenguajes no son lenguajes independientes, sino que por lo general existen definidas unas reglas generales que deben cumplir todos los lenguajes basados en un determinado tipo; y, luego, cada lenguaje en particular tiene un vocabulario propio que deben recoger todos los documentos que se escriban con él. Por ejemplo, ya hemos citado XML, YAML o JSON. Estos tres no son lenguajes particulares, sino un conjunto de reglas que deben cumplir los lenguajes que se ajusten a ellos. HTML, el lenguaje para escribir páginas web, en cambio, es XML[5]; y, por tanto, además de cumplir las reglas generales tiene una gramática concreta con un vocabulario concreto (<p> introduce un párrafo, <ol>, una lista numerada, etc.). Aclarado esto podemos introducir dos conceptos:

  • Se dice que un documento está bien formado cuando tal documento cumple con las reglas generales del tipo al que pertenece.

  • Se dice que un documento es válido cuando, además de bien formado, cumple con las reglas gramaticales particulares que se han definido para el lenguaje.

Por ejemplo, como en HTML marcar un párrafo se hace con <p> cada vez que queramos introducir un párrafo deberemos usar esa marca. ¿Qué pasa si en vez de ella usamos la marca <parrafo>? El documento seguirá siendo bien formado, puesto que esta nueva marca es una etiqueta válida para XML. Sin embargo, la marca no está definida dentro del vocabulario de HTML, por lo que el documento no será válido.

1.1.4. Lenguajes habituales

Bajo el próximo epígrafe analizaremos los lenguajes que más deben atraer nuestro interés, pero existe otros muchos ampliamente utilizados:

Lenguajes de serialización de datos
  • CSV, que es un lenguaje para la representación de datos en forma de tabla.

  • TOML, que es una extensión estandarizada del formato INI inicialmente típica de los archivos de configuración del Windows de Microsoft.

  • JSON, que nació para la representación en texto de objetos de Javascript, pero que amplió su uso y es ahora usado en muchos otros ámbitos.

  • YAML, que es otro de los lenguajes de serialización de datos más utilizado, sobre todo en configuración de aplicaciones.

Lenguajes de marcas

Dentro de ellos distinguiremos dos grupos:

Procedimentales
  • TeX, es un sistema tipográfico desarrollado por Donald Knuth a finales de los setenta y es el estándar de facto en el mundo académico sobre todo a través de lenguajes de macros desarrollados a partir de él como LaTeX, AMS-TeX o ConTeXt.

  • RTF, desarrollado por Microsoft a mediados de los años 80. La mayor parte de los procesadores de texto modernos son capaces de leer y escribir este formato.

  • Postscript, usado para la descripción de páginas de impresión. Muchas impresoras son capaces de interpretarlo y es en este formato en el que se le debe proporcionar el documento de impresión.

  • PDF, que se basa en el anterior y es un estándar de facto para la representación digital de documentos.

  • troff y su evolución nroff, que es un sistema tipográfico al que relegó la aparición de TeX, pero que se sigue usando en la maquetación de las páginas de manual en los sistemas UNIX.

Descriptivos
  • reStructured Text (denominado también simplemente como reST) es un lenguaje de marcas ligero diseñado originariamente para la documentación técnica de programas escritos en Python, pero se ha extendido su uso a otros ámbitos de la documentación. Github, por ejemplo, permite su uso; y desde 2016, Linux usa este formato para generar la documentación sobre el kernel. Este curso está escrito usando este lenguaje de marcas y puede pulsar en la barra lateral en la leyenda «Mostrar el código» para comprobar el aspecto que tiene el código fuente original de esta página.

  • Markdown es un lenguaje de marcas ligero, concebido para escribir con un editor de forma simple y cómoda texto que pueda ser luego traducido a HTML.

  • Wiki Text (o Wiki markup) es un lenguaje de marcado ligero usado para escribir el contenido de las páginas de la Wikipedia.

  • Los lenguajes de macros desarrollados a partir de un lenguaje procedimental como LaTeX, AMS-TeX o ConTeXt, derivados los tres de TeX

  • SGML, XML y derivados, que se tratarán en este curso. También lo es HTML, que originariamente derivó de ellos.

Notas al pie