YAML

De Astillas.net

YAML es un lenguaje de serialización de datos empleable en cualquier lenguaje de programación.

Enlaces y referencias

Conceptos

Las siguientes secciones hablan de conceptos YAML íntimamente relacionados con el módulo Perl YAML por lo que en otros lenguajes pueden existir diferencias.

flujo (stream)

Un flujo YAML es la secuencia compleata de caracters unicode que un analizador puede leer o un generador YAML puede emitir. Puede contener varios documentos YAML separados por cabeceras (---):

 ---
 a: mapping
 foo: bar
 ---
 - a
 - sequence

documento

Un documento YAML (document) es una representación de una estructura de datos independiente dentro de un flujo. Cada documento debe comenzar con una cabecera YAML aunque puede omitirse en el primer documento del flujo:

---
This: top level mapping
is:
   - a
   - YAML
   - document

cabecera

Una cabecera YAML (header) es una línea que da comienzo a un documento YAML. Está compuesta de tres guiones medios y tal vez alguna información más tal como etiquetas de alto nivel e información de anclaje:

 --- !recursive-sequence &001
 - * 001
 - * 001

nodo

Un nodo YAML (node) es la representación de una estructura de datos en particular que a su vez puede contener a otros nodos.

etiqueta

La etiqueta (tag) es similar a un tipo. Indica cómo un nodo YAML particular debería ser transferido hacia o desde la memoria. Por ejemplo un objeto de clase Foo::Bar debería emplear la etiqueta perl/Foo:Bar:

 - !perl/Foo::Bar
    foo: 42
    bar: stool

colección

Una colección (colecction) es el término genérico para una agrupación de datos. YAML tiene dos tipos de colecciones: mapas y secuencias (similares en Perl a hashes y arrays).

mapa

Un mapa es una colección YAML (una agrupación de datos) definida por una lista no ordenada de pares clave única/valor. En Perl se suelen cargar en memoria como hashes:

un mapa:
   clave1: pepe
   clave2: pater utativus

secuencia

Una secuencia (sequence) es una colección YAML definida por una lista ordenada de elementos. En Perl se suelen cargar en memoria como arrays:

 una secuencia:
    - un elefante 
    - dos elefantes
    - tres elefantes

escalar

Se llama escalar (scalar) a un nodo YAML que tiene un sólo valor en un momento dado y como contrapuesto a las colecciones de datos.

una variable escalar: un valor escalar

El lenguaje YAML tiene varios estilos para representar valores escalares debido a la variedad de datos y requerimientos de formato que pueden existir para conservar un punto óptimo de legilibilidad humana.

escalar plano

El tipo de escalar plano no lleva entrecomillado alguno y su etiquetado, su tipo puede deducirse automáticamente examinando su contenido. Se emplean normalmente para textos planos, números enteros, punto flotante, fechas, horas y valores monetarios:

- un texto plano y pelado 
- -42
- 3.1415
- 12:34
- 123 esto es un error

escalar con entrecomillado sencillo

Un escalar entre comillas simples implica que su contenido debe tomarse literalmente excepto las comillas simples adyacentes, de uso similar a las comillas simples en lenguaje Perl.

 - 'Cuando digo ''\n'' quiero decir "barra invertida ene"'

escalar con entrecomillado doble

Los escalares entre comillas dobles permiten el uso de caracteres especiales (como el salto de línea \n o la emisión de un aviso sonoro \a) empleando la barra inclinada hacia atrás delante de ellos.

 - "Este valor escalar\ntiene dos líneas y un campanilleo -->\a"

escalar plegado

Es un tipo de valor escalar que se extiende sobre varias líneas, se señala con el carácter mayor que y se comienza realmente en la siguiente línea. Su contenido es literal como en los escalares con entrecomillado sencillo y las líneas se pliegan automáticamente:

 - >
   Este es un valor escalar 
   que comienza en la línea siguiente 
   a símbolo 'mayor que' y que se
   extiende durante varias más. 

escalar en bloque

Esta forma de valor escalar también es multilínea como el tipo anterior con la diferencia de que su contenido es literal y no hay plegado automático de líneas.

Se señala con una barra vertical en una línea individual:

 - |
   QTY  DESC          PRICE  TOTAL
   ---  ----          -----  -----
     1  Foo Fighters  $19.95 $19.95
     2  Bar Belles    $29.95 $59.90