UT01 - Introducción a los Lenguajes de Marcas

Conexión legislativa

En esta Unidad de Trabajo nos centraremos en:


Introducción

Los lenguajes de marcas surgieron para cubrir una necesidad muy concreta: la comunicación en la interconexión de sistemas. La mejor manera de justificar su necesidad es con un ejemplo práctico.

La torre de Babel

Eres el dueño de un concesionario y quieres mostrar en tu página web datos sobre los coches que tus clientes pueden comprar o alquilar. Trabajas con varias marcas: Seat, Fiat, Renault, etc.

Sin embargo, cada fabricante te envía el catálogo de sus coches en un archivo con un formato propio y completamente distinto.

  • Cada vez que te envían el catálogo actualizado tienes que hacer un esfuerzo por adaptar sus datos a tu sistema.
  • Te pasa lo mismo cuando quieres incorporar a tu negocio los coches de un nuevo fabricante.

¿Y si nos pusiéramos de acuerdo en utilizar todos el mismo formato? Ahí radica la solución: definir un lenguaje común.


Concepto y características de los Lenguajes de Marcas

Un lenguaje de marcas (o markup language) es un sistema para codificar documentos de texto de manera que, junto con los datos que contiene, se pueda especificar información adicional sobre su estructura o su representación visual haciendo uso de etiquetas (o marcas).

Pero... ¿qué son las etiquetas?

Son palabras clave encerradas entre caracteres de control (generalmente < y >), que indican el inicio y fin de un elemento o una parte del documento. Además, pueden tener atributos que proporcionen información adicional.

El ejemplo más común de lenguaje de marcas es HTML (HyperText Markup Language - lenguaje de marcas de hipertexto). Las etiquetas empleadas en un documento HTML le indican al navegador web cómo debe representar la información. Es decir, que, junto con la información que se quiere representar también se incluye cómo debe representarse. Por ejemplo:

<h1>Esto es un título</h1>
<p>Esto es un párrafo</p>

Queda representado de la siguiente manera en un navegador:
ut01-ej01.png

Las etiquetas le indican al navegador que el texto "Esto es un título" debe representarse con el formato correspondiente con la etiqueta h1, mientras que el texto "Esto es un párrafo" debe representarse con el formato corrrespondiente a la etiqueta p

Características de los Lenguajes de Marcas

Todos los lenguajes de marcas cumplen las siguientes características:

Es muy importante diferenciarlos de los lenguajes de programación. Los lenguajes de marcas no son lenguajes de programación, ya que no cuentan con instrucciones ni estructuras de control, sólo contienen texto con información y cómo se organiza o representa.

ut01-htmlcovid.jpg500
Fuente: Digitalogy en X

Criterio Lenguajes de Marcas Lenguajes de Programación
Propósito principal Estructurar, describir o dar formato a la información Expresar lógica, algoritmos y procesar datos
Lógica y control No tienen Tienen
Ejecución Se interpretan/renderizan (ej. un navegador dibuja el HTML) Se compilan o ejecutan para realizar cálculos o tareas (ej. Java, Python, C++)
Ejemplos HTML, XML, JSON, Markdown Java, Python, C++, JavaScript, PHP

Clasificación de los Lenguajes de Marcas

Según la finalidad para la que fueron diseñadas sus marcas o etiquetas, podemos clasificarlos en tres categorías:

  1. Lenguajes de presentación: su objetivo principal es especificar la apariencia visual del texto (fuentes, colores, márgenes, tamaños)
    • Ejemplos: HTML, Markdown, LATEX.
  2. Lenguajes descriptivos o semánticos: describen el significado y la estructura de los datos, de forma completamente independiente a cómo se vayan a mostrar en pantalla. Separan estrictamente el qué es del cómo se ve.
    • Ejemplos: XML (eXtensible Markup Language).
  3. Lenguajes específicos: diseñados para dominios concretos y tipos específicos de información.
    • Ejemplos: SVG (Scalable Vector Graphics) para gráficos vectoriales o MathML para notación matemática.

Origen de los Lenguajes de Marcas

GML (años 60)

A finales de los años 60, un grupo de investigadores de IBM diseñó lo que se considera el precursor de los lenguajes de marcas modernos: GML (Generalized Markup Language, aunque estas iniciales también coinciden con las de sus apellidos: Goldfarb, Mosher y Lorie).

Surgió para resolver un problema que tenían gestionando grandes volúmenes de documentos legales y técnicos en IBM. GML se diseñó para utilizarse en editores de texto. Las marcas están precedidas de 2 puntos : y seguidas de 1 .. Siguiendo el ejemplo anterior de HTML, esta sería su representación en GML:

:h1.Esto es un título
:p.Esto es un párrafo

Sin embargo, conviene destacar que GML no era un lenguaje presentacional, sino semántico, por lo que el código anterior no generaba un documento con un formato visual concreto de forma directa. En su lugar, las marcas :h1. y :p. servían para indicar el significado y la función del texto dentro del documento (un encabezado de nivel 1 y un párrafo).

SGML (1986)

Debido al éxito y la utilidad de GML, la ISO (International Organization for Standardization) estandarizó en 1986 este trabajo bajo la norma ISO 8879, dando lugar a SGML (Standard Generalized Markup Language).

SGML, como tal, no es un lenguaje de marcas, sino un lenguaje diseñado específicamente para definir otros lenguajes de marcas mediante DTD (Document Type Definition). Tanto HTML como XML están basados directamente en SGML, aunque las versiones modernas de HTML ya no se consideran aplicaciones directas de SGML, sino que se definen bajo su propio estándar vivo (HTML Living Standard de la WHATWG).

A pesar de su enorme flexibilidad, SGML resulta excesivamente complejo para ser procesado eficientemente en ordenadores personales, por lo que surgen las simplificaciones de HTML para representación y XML para almacenamiento, comunicación y estructuración de datos.

HTML (1991)

El Internet de los años 80 era muy rudimentario. Prácticamente consistía en conectarse a servidores mediante terminales de comantos (como telnet o ftp) para transferir ficheros de texto sin formato visual ni enlaces.

En 1989, Tim Berners-Lee propuso un lenguaje de marcas específico para mejorar la experiencia en la navegación por Internet. Él había trabajado bastante con SGML y lo tomó como base para dar lugar a la primera especificación de HTML (HyperText Markup Language) y, posteriormente, a la WWW (World Wide Web).

Las claves del éxito de HTML se pueden resumir en los siguientes puntos:

La web tiene como objetivo principal simplificar el acceso a la información, tanto desde el punto de vista formal (estructura) como funcional (acceso). Estas dos perspectivas consiguen que la información sea accesible desde cualquier sistema operativo, y la obtención de información relacionada es sencilla gracias a los hipervínculos. Tim Berners-Lee es, por tanto, el padre de la navegación en Internet tal y como la conocemos hoy en día.

XML (1998)

Cuando se masificó el uso de Internet en los años 90, las empresas empezaron a intercambiar información para extender sus servicios en red. No podían compartir directamente sus bases de datos por motivos obvios, pero sí necesitaban compartir datos en algún formato. Se encontraron con la siguiente encrucijada:

Ejemplo de SGML (DTD) VS XML

SGML (DTD)

<!DOCTYPE lista_alumnos [
  <!ELEMENT lista_alumnos - - (alumno+)>
  <!ELEMENT alumno        - O (nombre, edad, modulo)>
  <!ELEMENT nombre        - - (#PCDATA)>
  <!ELEMENT edad          - O (#PCDATA)>
  <!ELEMENT modulo        O O (#PCDATA)>
]>
<lista_alumnos>
<alumno>
<nombre>Ignacio Mascarell</nombre>
<edad>34
Lenguajes de Marcas
</lista_alumnos>

XML

<?xml version="1.0" encoding="UTF-8"?>
<lista_alumnos>
  <alumno>
    <nombre>Ignacio Mascarell</nombre>
    <edad>34</edad>
    <modulo>Lenguajes de Marcas</modulo>
  </alumno>
</lista_alumnos>

Por ello, el W3C (World Wide Web Consortium) publicó en 1998 el estándar de XML (eXtensible Markup Language). Este no es sino una simplificación de SGML, manteniendo la capacidad de crear lenguajes a medida. Su propósito no es mostrar datos en pantalla, sino almacenar, estructurar e intercambiar información de entre sistemas heterogénemos.

ut01-evolucion.png


Estructura y sintaxis de los Lenguajes de Marcas

A pesar de que existen multitud de Lenguajes de Marcas, la mayoría comparte un modelo sintáctico común basado en la idea de etiquetar el texto para darle estructura, contexto o formato. A continuación se muestra una estructura muy básica:

<coche estado="nuevo">
    <marca>Seat</marca>
    <modelo>
	    <nombre>Ibiza</nombre>
	    <anyo>2008</anyo>
    </modelo>
    
    <sin_stock/>
    
    El modelo más vendido este año.
</coche>

Nota: aunque usemos de ejemplo un código XML, nos sirve para analizar las características generales de los lenguajes derivados de SGML. Más adelante estudiaremos las particularidades de cada uno de ellos

Estructura

Etiquetas

Son los delimitadores o marcas del lenguaje. Indican dónde empieza y termina un bloque de información.

Elementos

Representa un bloque completo de información.

Error común

Es fundamental no confundir ambos términos:

  • Etiqueta: sólo el delimitador. Por ejemplo: <marca>
  • Elemento: conjunto entero con su contenido. Por ejemplo: <marca>Seat</marca>. En el caso de los elementos vacíos con sintaxis abreviada, la etiqueta con los atributos sería el elemento al completo.

Atributos

Son parejas de nombre="valor". Su función es la de proporcionar información adicional sobre el propio elemento o cómo debe procesarse.

Contenido

Es la información que se desea almacenar, estructurar o representar.

Sintaxis

La sintaxis de un lenguaje de marcas define el conjunto de reglas que establecen cómo deben combinarse los elementos, atributos y texto para construir un documento válido y procesable. Mientras que la estructura define qué piezas componen el documento, la sintaxis determina cómo deben escribirse exactamente esas piezas para que el analizador pueda interpretarlas sin ambigüedades.

Organización jerárquica

La combinación de elementos anidados unos dentro de otros genera una representación en forma de árbol (arborescente) en la que aparece un único elemento raíz que "se expande" en multitud de descendientes, conformando la estructura del documento. En esta estructura se definen las siguientes relaciones:

Regla de anidamiento LIFO

Last In, First Out. Para preservar la jerarquía, las etiquetas deben cerrarse en el orden inverso al que se abren. De otra manera se producirían solapamientos, invalidando la estructura de árbol.

  • Correcto:
    <modelo>
      <nombre>Ibiza</nombre>
    </modelo>
    
  • Incorrecto:
    <modelo>
      <nombre>Ibiza</modelo>
    </nombre>
    

Comentarios

Son anotaciones que se introducen en el documento pero que no influyen en su procesado.

<coche estado="nuevo">
    <marca>Seat</marca>
	<modelo> <!-- Icónico, ya no se hacen como antes -->
	    <nombre>Ibiza</nombre>
	    <anyo>2008</anyo>
    </modelo>
</coche>

Caracteres especiales y Entidades

Hay ciertos caracteres especiales que está reservados por la propia sintaxis. Por ejemplo, los símbolos < y >. Estos no pueden utilizarse en el contenido directamente porque el analizador del documento pensaría que estás intentando abrir o cerrar una etiqueta. Para poder incluirlos es necesario utilizar entidades.

Una entidad es una secuencia especial de caracteres que empieza con el símbolo ampersand & y termina con el punto y coma ;. Al procesar el documento, el analizador lo traduce y muestra el símbolo real.

Hay 5 entidades predefinidas en SGML/XML, aunque en HTML hay muchas más:

Carácter especial Entidad Ejemplo
< &lt; <precio>&lt;15000€</precio>
> &gt; <nota>Oferta para &gt;2 unidades</nota>
& &amp; <tienda>Holland &amp; Barrett</tienda>
" &quot; <extra nota="Modelo &quot;sport&quot;"/>
' &apos; <nombre>No Man&apos;s Sky</nombre>

Reglas sintácticas generales

Existen algunas reglas sintácticas que se aplican a los lenguajes de marcas derivados de SGML y que conviene adelantar ahora aunque estas tengan un tratamiento específico en cada uno de estos.