# Referencia Rápida de YAML

*Escalares, secuencias, mapeos, anclas, multi-línea*

> Source: YAML Specification (yaml.org) · MIT

## Sintaxis

### Reglas Básicas

| Command | Description |
|---------|-------------|
| `Indentación` | Solo espacios (sin tabulaciones), profundidad consistente |
| `#` | Comentario (hasta el final de la línea) |
| `---` | Marcador de inicio de documento |
| `...` | Marcador de fin de documento |
| `Sensible a mayúsculas` | Las claves y valores distinguen mayúsculas y minúsculas |

### Ejemplo Mínimo

```
---
name: Alice
age: 30
active: true
```

## Escalares

### Tipos de Escalar

| Command | Description |
|---------|-------------|
| `hello` | Cadena (sin comillas) |
| `"hello"` | Cadena (comillas dobles, permite escapes) |
| `'hello'` | Cadena (comillas simples, literal) |
| `42 / 3.14` | Número (entero / decimal) |
| `true / false` | Booleano |
| `null / ~` | Valor nulo |
| `2026-03-26` | Fecha (ISO 8601) |

### Reglas de Comillas

```
plain: no se necesitan comillas
special: "los dos puntos: y almohadilla # necesitan comillas"
escape: "línea\nnueva"
literal: 'sin \n escape aquí'
```

## Secuencias

### Secuencia en Bloque

```
fruits:
  - apple
  - banana
  - cherry
```

### Secuencia de Flujo (En Línea)

```
colors: [red, green, blue]
matrix: [[1, 2], [3, 4]]
```

### Secuencia de Objetos

```
users:
  - name: Alice
    role: admin
  - name: Bob
    role: user
```

## Mapeos

### Mapeo en Bloque

```
server:
  host: localhost
  port: 8080
  debug: false
```

### Mapeo de Flujo (En Línea)

```
point: {x: 10, y: 20}
```

### Claves Complejas

```
? [first, second]
: "valor de clave compuesta"
```

## Anclas y Alias

### Definir y Reutilizar

```
defaults: &defaults
  timeout: 30
  retries: 3
production:
  <<: *defaults
  timeout: 60
```

### Referencia

| Command | Description |
|---------|-------------|
| `&name` | Definir un ancla |
| `*name` | Referenciar (alias) un ancla |
| `<<` | Clave de fusión — fusionar mapeo en el actual |

## Cadenas Multi-línea

### Escalares en Bloque

| Command | Description |
|---------|-------------|
| `\| (literal)` | Conserva saltos de línea exactamente |
| `> (plegado)` | Pliega saltos de línea en espacios |
| `\|+ (conservar)` | Literal, conservar saltos de línea finales |
| `\|- (eliminar)` | Literal, eliminar saltos de línea finales |
| `>- (plegar+eliminar)` | Plegado, eliminar saltos de línea finales |

### Bloque Literal

```
script: |
  echo "line one"
  echo "line two"
```

### Bloque Plegado

```
description: >
  Este texto largo será
  plegado en una sola línea
  con espacios.
```

## Etiquetas

### Etiquetas de Tipo

| Command | Description |
|---------|-------------|
| `!!str 42` | Forzar valor a cadena "42" |
| `!!int "42"` | Forzar valor a entero 42 |
| `!!float 1` | Forzar valor a decimal 1.0 |
| `!!bool "true"` | Forzar valor a booleano |
| `!!null ""` | Forzar valor a nulo |
| `!!binary` | Datos binarios codificados en Base64 |

### Ejemplo de Etiqueta

```
port: !!str 8080
enabled: !!bool "yes"
version: !!float 3
```

## Patrones Comunes

### Docker Compose

```
services:
  web:
    image: nginx:alpine
    ports: ["80:80"]
    environment:
      NODE_ENV: production
```

### GitHub Actions

```
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
```

### Consejos

| Command | Description |
|---------|-------------|
| `yamllint` | Validar YAML en cuanto a sintaxis y estilo |
| `yq` | Procesador YAML de línea de comandos (como jq) |
| `Evitar Norway` | NO es false booleano — poner comillas a códigos de países |
| `Evitar !!python` | Nunca cargar YAML no confiable con cargadores inseguros |
