YAML

En palabras sencillas, YAML es un estilo de escritura para expresar información y sirve como intercambio de datos en aplicaciones. YAML es semejante a JSON pero legible para el humano, motivo por el cual tiene actualmente gran acogida en archivos de configuración.

En palabras más sofisticadas, se trata de un lenguaje de marcado (se promueve en inglés como: Yet Ain't Markup Language) con una orientación gerarquica donde los espacios cuentan y determinan si un atributo o dato corresponde a un elemento superior. A continuación podemos ver un ejemplo.

Ejemplo esencial

# Example
---
app: Awesome

data:
  name:
    first: John
    last: Doe
  age: 30

Nótese que se puede leer que data tiene el elemento name y age. A su vez name tiene el elemento first y last. Aquellos elementos con valor no expresan mas gerarquía sino el datos, y la posición por cada 2 espacios (por defecto) indica el nivel de precedencia como en un arbol o esquema gerárquico.

YAML vs JSON

Ya hemos dicho que por la legibilidad de la convención o marcado, YAML tiene acogida en el manejo de archivos de configuración, por ejemplo en herramientas para la nube o DevOps (Kubernetes, Docker, etc.), pero sigue cumpliendo el objetivo de intercambio de datos, semejante a JSON. Una manera de comprender mejor el lenguaje de marcado introducido es revisando las principales diferencias con JSON.

YAML JSON
Legible para el humano No es muy legible para el humano
La indentación indica gerarquía y es significativa Se usan llaves y elementos recursivos (arreglos y objetos)
Se pueda usar comillas simples o dobles para cadenas Atributos o elementos van entre comillas dobles, también las cadenas
El nodo raíz puede ser de algún tipo válido El nodo raíz puede ser un objeto o un arreglo (lista)
Permite comentarios con el signo # No admite comentarios
.

Tal como se ha indicado, YAML admite comentarios de línea usando almoadilla (#).

Tipos de datos esenciales

Los tipos de datos esenciales (string, integer, float, boolean) se identifican por su contenido. Veamos:

string: "Ana"
integer: 10
float: 3.1516
boolean: Yes

Nótese que las cadenas se diferencian por el uso de comillas, mientras los flotantes usan el punto decimal distinguiéndose de los enteros.

Listas

Cuando se trata de listas podemos pensar en una serie de frutas, por ejemplo, apple, orange, lemon. Veamos como se expresa esto en YAML.

fruits:
  - apple
  - orange
  - lemon

Nótese que se usa el signo - para indicar que cada uno de los elementos referidos corresonden a la lista fruits.

Sin embargo, también se admiten listas con la siguiente convención:

fruits: [apple, orange, lemon]

Nótese que se usan corchetes y se separa cada valor (en este caso son frutas) con comas.
También admite tuplas o mapas en JSON, por ejemplo: { "key": "value" }

Bloques de texto en múltiples lineas

Cuando el contenido o valor corresponde a un texto largo, se representan como bloques con dos variaciones. Una manera literal y otra continua (plegada, a modo de párrafo). Veamos cada una respectivamente.

  text: |
    This text
    break every line
    as you watch

El modo literal se indica con el caracter |

  text: >
    This text
    is wrapped
    as a paragraph

El modo plegado se indica con el caracter >

OnMind & YAML

Me permiteré contarte una pequeña experiencia con YAML y la plataforma de la que soy autor, cuyo nombre es OnMind

Observaba mis habilidades para interactuar con diversos lenguajes de programación (políglota algo quizás) entonces pensé en buscar una manera de lograr un lenguaje abstracto para el componente que se encarga de lo que ocurre en el servidor (backend), y focalizarme principalmente en uno que llegue a servir para muchos estandarizando el proyecto de un gestor de base de datos abstracta que también hice junto con la plataforma OnMind. Es así que he decidido lanzar una especificación de lenguaje que convierta código a otro lenguaje de interés, y conservar una visión que facilite el paso a más lenguajes. Así nace el lenguaje ABCode.

Efectivamente encontré ideas similares pero requería algo distinto y como he enfatizado: “abstracto”. Luego se me ocurrió combinar YAML y Python (con una sintaxis restringida), dónde cada línea comienza con un atributo (distinguido por terminar con dos puntos :) que guarda sangría cada dos espacios (según YAML), el resto de la línea podría ser código. Validé la idea de este lenguaje de programación con un gran amigo y colega, le pareció interesante, entusiasta, y en ese momento expresó que deseaba aprender e incluso colaborar. ¿Qué os parece?

.


© 2021 by César Arcila (onmind.co)