Introducción a YAML

En el siempre cambiante mundo del desarrollo web nos encontramos con que aparecen herramientas, tecnologías o especificaciones que nos facilitan el trabajo diario, o amplían nuestro abanico de posibilidades. Lo que ayer era difícil y encorsetado, hoy es fácil y potente; lo que ayer era fácil hoy es más fácil y mejor.

En este panorama aparece YAML como vehículo para el establecimiento o manipulación de información y, aunque no es una herramienta de uso exclusivo del desarrollo web, es precisamente en este terreno dónde mejor demuestra su valía.

Como los que ya me conocéis sabéis que no me gusta ser críptico, por aquello de que las cosas claras y el chocolate espeso, entramos en el tema. Vamos a ello.

¿QUÉ ES YAML?

Esta es, sin duda, la primera cuestión que hay que responder. Muchas personas que empiezan a asomarse al mundo del desarrollo web no han oído aún este término o, aunque lo hayan hecho, no saben muy bien de que va. A ell@s va dedicado este primer artículo de la serie HTTP Masters. Si buscamos información acerca de YAML en la Red, encontraremos, principalmente tres definiciones:

  • Lenguaje de marcado. Algunas personas se apresuran a denominarlo así por las letras ML de su nombre. Si HTML o VRML son lenguajes de marcas, pues este también lo es. Desde luego, esto es simplita y totalmente erróneo, y el propio nombre es un acrónimo recursivo de YAML Ain’t Markup Language (YAML no es un lenguaje de marcas, en español). Así que, en este caso, las letras ML nos dicen, precisamente, lo que NO es. Anecdóticamente, YAML era, al principio, el acrónimo de Yet Another Markup Language (Otro lenguaje de marcado más) pero, cómo verás en seguida, esta acepción no era acertada en absoluto.
  • Formato de intercambio de datos. Esta segunda definición es más precisa. En cuanto te familiarices con YAML entenderás que puede perfectamente usarse para esta finalidad, del mismo modo que se emplean XML o JSON. Sin embargo, YAML es mucho más legible que los anteriores.
  • Formato de serialización de datos. Esta definición nos dice qué es, exactamente, YAML. Parecida a la anterior, la diferencia es sólo una cuestión semántica, que nos habla de su integración con lenguajes de programación como JavaScript, PHP, Python y Haskell, entre otros muchos, así como de su legibilidad por los humanos. Esta es la definición que vamos a considerar, por tanto como exacta para el resto de este artículo y los demás de esta serie.

LA SERIALIZACIÓN DE DATOS

La serialización de datos es un proceso que nos permite tomar un conjunto de datos escalares (pares nombre – valor simples) y/o arreglos (matrices, colecciones, etc) y disponerlos de un modo que sean fáciles de leer tanto por humanos como por una API, clase u otro artefacto desarrollado en cualquier lenguaje que lo permita. La disposición debe ser estructurada según las reglas sintácticas del formato de serialización, y debe poder ser reversible, de modo que se puedan recuperar como estaban en origen.

DATOS EN YAML

Vamos a ver un ejemplo muy sencillo del uso de YAML. Partiremos de algunos datos que expresaremos, inicialmente, con la sintaxis de PHP, por dos razones: la primera es que es un lenguaje con el que cualquier desarrollador web está familiarizado. La segunda es que, dado que la inmensa mayoría de los proyecto web se realizan en PHP, va a ser nuestro leal compañero durante la práctica totalidad de los artículos de la serie HTTP Masters.

No vamos a ver aquí cómo generar datos en YAML desde PHP, ni como leer un fichero YAML desde este lenguaje. Esos son puntos a los que dedicaremos la necesaria atención muy pronto en esta serie, pero no ahora.

Los datos de los que partimos son los siguientes:

Estos datos, expresados en YAML, tendrían un aspecto similar al siguiente:

Este ejemplo es muy simple, y tiene, exclusivamente, el valor de una primera aproximación visual a YAML. Como ves, la ventaja más notoria es que es muy fácilmente legible. Con sólo una mirada rápida entiendes la estructura de todos los datos. Sin embargo, tiene otras muchas ventajas, quizá no tan notorias a primera vista, pero no por ello menos importantes:

  • Es fácilmente interpretable por aplicaciones escitas en diversos lenguajes, cómo ya hemos mencionado.
  • Es más ligero que XML e, incluso, que JSON,
  • Es, como verás en los siguientes artículos, muy fácil operar con datos serializados en YAML.

SINTAXIS

Aunque ya hemos dejado claro que YAML no es un lenguaje, sino un formato de serialización de datos, tiene, al igual que otros formatos de este tipo, algunas reglas sintácticas. Son muy pocas, y fáciles de aprender pero, por supuesto, debemos tenerlas en cuenta. En este apartado vamos a mencionarlas para referencia, ahora y en el futuro. Algunas las asimilarás inmediatamente. Otras te costará un poco más entenderlas pero, si sigues leyendo estos artículos, verás la mágica simplicidad de YAML.

  • Todos los ficheros de datos en YAML se deben guardar codificados en UTF-8 (con o sin BOM, dependiendo del alojamiento; Si tu fichero se vé con caracteres extraños cuando lo cargas en el navegador, cambia la codificación) o en UTF-16. Presta especial atención a esto cuando escribas ficheros en YAML con tu editor de texto plano. Si está configurado para grabar con otras codificaciones, tendrás problemas al querer usar tus datos.
  • Los ficheros de datos en YAML pueden grabarse con la extensión .yaml, pero es mucho más universal emplear .yml. De hecho, gran cantidad de aplicaciones esperan esta extensión, pero no reconocen bien la primera.
  • La estructura de los datos se define mediante indentaciones, de modo que los datos que empiezan más a la derecha dependen, jerárquicamente, de los que empiezan más a la izquierda. Si estás familiarizado con la programación en Python, por ejemplo, esta forma de escribir no te resultará nueva. En cualquier caso, si ves el ejemplo que hemos puesto en la sección anterior y lo comparas con su contraparte en PHP, te queda clarísima la jerarquía de los datos. En todo caso, las indentaciones deben hacerse SIEMPRE con espacios en blanco. Los caracteres de tabulación están expresamente prohibidos en YAML.
  • Los datos escalares se representan como pares nombre: valor, separando el nombre del valor con dos puntos y un espacio en blanco (: ). Por ejemplo, usuario: 'username'. De este mismo modo se representan los elementos más internos de un arreglo, como, por ejemplo, lugar: 'Cine Palacios'.
  • Los valores en cada par nombre: valor pueden encerrarse entre comillas simples (') o dobles ("), o dejarse sin entrecomillar. Sin embargo, cuando el valor incluya espacios en blanco, o ciertos caracteres especiales deben entrecomillarse. Si el valor incluye comillas propias, estas deberán escaparse con un contraslash (\), como, por ejemplo frase: "El hombre dijo \"Hola\" al cruzarse con su vecino.".
    ATENCIÓN. Aunque, en principio, las comillas son opcionales tanto para las claves como para los valores, dado que estos se separan entre sí mediante el signo de dos puntos (:), si este estuviera presente en el valor (por ejemplo, un literal que incluya este signo), dicho valor deberá estar, imprescindiblemente, acotado por comillas, ya sean estas simples o dobles.
  • No hay comentarios multilínea. Cada línea de comentarios debe ir precedida del signo #.
  • Los arreglos asociativos se componen, en última instancia, de elementos que son pares nombre: valor. Estos elementos se pueden declara uno debajo de otro (como hemos hecho en el ejemplo de arriba) o en una línea, entre llaves ({ y }), precediendo la lista de un guión y un espacio (- ) y separando cada par del siguiente por una coma y un espacio en blanco (, ). Un ejemplo sería el que se ve a continuación. Sin embargo, para colecciones más grandes de datos esta notación podría ir en detrimento de la legibilidad humana.

evento_0:
- {evento: "Fiesta popular", fecha: "11/06/2018", hora: "18: 00", lugar: "Barrio de Las Flores", gratis: True}

Hasta aquí hemos descrito las reglas sintácticas más elementales, que debemos tener en cuenta en cualquier documento YAML, por simple y breve que sea. Son las que hemos empleado en el ejemplo de este artículo. A continuación tenemos una lista de reglas sintácticas de las que veremos ejemplos en artículos posteriores, según vayamos conociendo herramientas y técnicas para el uso de este formato. Aquí las mencionaremos ahora, sólo para tenerlas disponibles como referencia.

  • Los valores en los arreglos asociativos pueden precederse, según la naturaleza y complejidad del documento YAML, con un signo de interrogante cerrado (?), para desambiguar claves cuando sea necesario.
  • Pueden repetirse nodos marcándolos con un ampersand (&) y referenciarlos posteriormente con un asterisco (*), para evitar repeticiones.
  • Los valores de los nodos pueden etiquetarse mediante el signo de exclamación (!) seguido de una cadena que puede ser interpretada como una referencia al nodo en cuestión.
  • Los miembros de las listas se agrupan entre corchetes ([ y ]), separando cada uno del siguiente por una coma y un espacio en blanco (, ), o bien se preceden, uno a uno, de un guión y un espacio en blanco (- ).
  • Un documento YAML puede estar compuesto, a su vez, por varios documentos. En ese caso se separan unos de otros por tres guiones seguidos (---), y finalizando cada uno con tres puntos (...).
  • Un documento YAML se puede iniciar con directivas. Las directivas son marcas que no forman parte del flujo de datos serializados, pero que pueden usarse con fines informativos para la API encargada de leer el YAML. Las directivas se inicializan con el el signo de porcentaje (%) y, actualmente, se reconocen dos tipos:
    • %YAML x.x para indicar la especificación de YAML que estamos empleando. Actualmente (en el momento de redactar esto) es la 1.1.
    • %TAG se emplea como prefijo para URL’s incluidas en el documento.

Y con esto damos por cerrada esta breve introducción a YAML. En el próximo artículo veremos cómo trabajar con YAML desde PHP.

   

Deja un comentario