El sitio web de YAML dice que es «un estándar para la serialización de datos humanamente legibles para todos los lenguajes de programación».
Si bien el formato YAML puede describir complejas estructuras de datos anidadas, este capítulo sólo describe el conjunto mínimo de características necesarias para usar YAML como un formato de archivo de configuración.
YAML es un lenguaje simple que describe datos. Como PHP, que tiene una sintaxis para tipos simples, como cadenas, booleanos, números en punto flotante, o enteros. Pero a diferencia de PHP, este distingue entre arreglos (secuencias) y hashes (asignaciones).
La sintaxis para escalares es similar a la sintaxis de PHP.
Una cadena en YAML
'Una cadena entre comillas simples en YAML'
Truco
En una cadena entre comillas simples, una comilla simple ' debe ser doble:
'Una comilla simple '' en una cadena entre comillas simples'
"Una cadena entre comillas dobles en YAML\n"
Los estilos de citado son útiles cuando una cadena empieza o termina con uno o más espacios relevantes.
Truco
El estilo entre comillas dobles proporciona una manera de expresar cadenas arbitrarias, utilizando secuencias de escape \. Es muy útil cuando se necesita incrustar un \n o un carácter Unicode en una cadena.
Cuando una cadena contiene saltos de línea, puedes usar el estilo literal, indicado por la línea vertical (|), para indicar que la cadena abarcará varias líneas. En literales, se conservan los saltos de línea:
|
\/ /| |\/| |
/ / | | | |__
Alternativamente, puedes escribir cadenas con el estilo de plegado, denotado por >, en el cual cada salto de línea es sustituido por un espacio:
>
Esta es una oración muy larga
que se extiende por varias líneas en el YAML
pero que se reproduce como una cadena
sin retornos de carro.
Nota
Observa los dos espacios antes de cada línea en los ejemplos anteriores. Ellos no aparecen en las cadenas PHP resultantes.
# un entero
12
# un octal
014
# un hexadecimal
0xC
# un float
13.4
# un número exponencial
1.2e+34
# infinito
.inf
Los nulos en YAML se pueden expresar con null o ~.
Los booleanos en YAML se expresan con true y false.
YAML utiliza la norma ISO-8601 para expresar fechas:
2001-12-14t21:59:43.10-05:00
# fecha simple
2002-12-14
Rara vez se utiliza un archivo YAML para describir un simple escalar. La mayoría de las veces, describe una colección. Una colección puede ser una secuencia o una asignación de elementos. Ambas, secuencias y asignaciones se convierten en arreglos PHP.
Las secuencias usan un guión seguido por un espacio:
- PHP
- Perl
- Python
El archivo YAML anterior es equivalente al siguiente código PHP:
array('PHP', 'Perl', 'Python');
La asignación utiliza dos puntos seguidos por un espacio (: ) para marcar cada par clave/valor:
PHP: 5.2
MySQL: 5.1
Apache: 2.2.20
el cual es equivalente a este código PHP:
array('PHP' => 5.2, 'MySQL' => 5.1, 'Apache' => '2.2.20');
Nota
En una asignación, una clave puede ser cualquier escalar válido.
El número de espacios entre los dos puntos y el valor no importa:
PHP: 5.2
MySQL: 5.1
Apache: 2.2.20
YAML utiliza sangría con uno o más espacios para describir colecciones anidadas:
"symfony 1.0":
PHP: 5.0
Propel: 1.2
"symfony 1.2":
PHP: 5.2
Propel: 1.3
El YAML anterior es equivalente al siguiente código PHP:
array(
'symfony 1.0' => array(
'PHP' => 5.0,
'Propel' => 1.2,
),
'symfony 1.2' => array(
'PHP' => 5.2,
'Propel' => 1.3,
),
);
Hay una cosa importante que tienes que recordar cuando utilices sangría en un archivo YAML: La sangría se debe hacer con uno o más espacios, pero nunca con tabulaciones.
Puedes anidar secuencias y asignaciones a tu gusto:
'Chapter 1':
- Introduction
- Event Types
'Chapter 2':
- Introduction
- Helpers
YAML también puede utilizar estilos de flujo para colecciones, utilizando indicadores explícitos en lugar de sangría para denotar el alcance.
Puedes escribir una secuencia como una lista separada por comas entre corchetes ([]):
[PHP, Perl, Python]
Una asignación se puede escribir como una lista separada por comas de clave/valores dentro de llaves ({}):
{ PHP: 5.2, MySQL: 5.1, Apache: 2.2.20 }
Puedes mezclar y combinar estilos para conseguir mejor legibilidad:
'Chapter 1': [Introduction, Event Types]
'Chapter 2': [Introduction, Helpers]
"symfony 1.0": { PHP: 5.0, Propel: 1.2 }
"symfony 1.2": { PHP: 5.2, Propel: 1.3 }
En YAML puedes añadir comentarios anteponiendo una almohadilla (#):
# Comentario en una línea
"symfony 1.0": { PHP: 5.0, Propel: 1.2 } # Comentario al final de una línea
"symfony 1.2": { PHP: 5.2, Propel: 1.3 }
Nota
Los comentarios simplemente son ignorados por el analizador de YAML y no es necesario sangrarlos de acuerdo al nivel de anidamiento actual de una colección.