YAML

¿Qué es el lenguaje YAML? Cuando usarlo y para qué sirve

¿Qué es YAML?

YAML es un formato para guardar objetos de datos con estructura de árbol. Sus siglas significan YAML Ain't Markup Language (YAML no es otro lenguaje de marcado).

Este lenguaje es muy legible para las personas, más legible que JSON y sobretodo que XML.

Normalmente se utiliza para definir archivos de configuración, aunque también es posible serializar objetos, es decir, escribir la estructura de un objeto en modo cadena de texto para posteriormente poderlo recuperar. Sin embargo, para este propósito es bastante más lento que utilizar JSON.

Hay librerías para todos los lenguajes de programación, desde Ruby, PHP, Java hasta C# entre otros.

Ruby on rails por ejemplo lo utiliza mucho en sus archivos de configuración. Veamos una muestra del archivo de configuración de las bases de datos (database.yml).

development: database: mi_app_development adapter: mysql host: localhost

test: database: mi_app_test adapter: mysql host: localhost

La estructura del archivo es de tipo clave-valor. Además es importante la indentación, para definir la estructura de árbol padre-hijo.

También es común utilizar YAML en archivos de traducción. Por ejemplo:

es: errors: format: "" messages: greater_than_or_equal_to: debe ser mayor o igual a %{count} not_found: no encontrado already_confirmed: ya ha sido confirmada less_than: debe ser menor que %{count} date: formats: default: "%d/%m/%Y" short: "%d/%m" long: ""

Sintaxis alternativa

Para serializar objetos, YAML utiliza otra sintaxis para permitir escribir estructuras más complejas sin indentación. Veamos un ejemplo en Ruby:

Un hash del tipo:

{ :etiqueta1 => 1, :etiqueta2 => 2 }

en YAML quedaría así:

--- :etiqueta1: 1 :etiqueta2: 2

De archivo en formato YAML a objeto

En Ruby es muy simple cargar un archivo de configuración YAML, tan solo utilizando:

require 'yaml' YAML.load(File.open("/tmp/ejemplo.yml"))

Obtendríamos el contenido del archivo deserializado y listo para usar.

De objeto a YAML

Y para pasar el contenido de una varialbe a YAML usaríamos el método to_yaml:

{ :etiqueta1 => 1, :etiqueta2 => 2 }.to_yaml