# Référence rapide YAML

*Scalaires, séquences, mappages, ancres, multi-ligne*

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

## Syntaxe

### Règles de base

| Command | Description |
|---------|-------------|
| `Indentation` | Espaces uniquement (pas de tabulations), profondeur cohérente |
| `#` | Commentaire (jusqu'à la fin de la ligne) |
| `---` | Marqueur de début de document |
| `...` | Marqueur de fin de document |
| `Sensible à la casse` | Les clés et valeurs distinguent majuscules et minuscules |

### Exemple minimal

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

## Scalaires

### Types de scalaires

| Command | Description |
|---------|-------------|
| `hello` | Chaîne (sans guillemets) |
| `"hello"` | Chaîne (guillemets doubles, permet les échappements) |
| `'hello'` | Chaîne (guillemets simples, littérale) |
| `42 / 3.14` | Nombre (entier / décimal) |
| `true / false` | Booléen |
| `null / ~` | Valeur nulle |
| `2026-03-26` | Date (ISO 8601) |

### Règles de guillemets

```
plain: aucun guillemet nécessaire
special: "les deux-points : et le dièse # nécessitent des guillemets"
escape: "nouvelle\nligne"
literal: 'pas de \n d''échappement ici'
```

## Séquences

### Séquence en bloc

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

### Séquence de flux (en ligne)

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

### Séquence d'objets

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

## Mappages

### Mappage en bloc

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

### Mappage de flux (en ligne)

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

### Clés complexes

```
? [first, second]
: "valeur de clé composée"
```

## Ancres et alias

### Définir et réutiliser

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

### Référence

| Command | Description |
|---------|-------------|
| `&name` | Définir une ancre |
| `*name` | Référencer (alias) une ancre |
| `<<` | Clé de fusion — fusionner un mappage dans l'actuel |

## Chaînes multi-lignes

### Scalaires en bloc

| Command | Description |
|---------|-------------|
| `\| (littéral)` | Préserve les sauts de ligne exactement |
| `> (replié)` | Replie les sauts de ligne en espaces |
| `\|+ (conserver)` | Littéral, conserver les sauts de ligne finaux |
| `\|- (supprimer)` | Littéral, supprimer les sauts de ligne finaux |
| `>- (replier+supprimer)` | Replié, supprimer les sauts de ligne finaux |

### Bloc littéral

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

### Bloc replié

```
description: >
  Ce long texte sera
  replié en une seule ligne
  avec des espaces.
```

## Balises

### Balises de type

| Command | Description |
|---------|-------------|
| `!!str 42` | Forcer la valeur en chaîne "42" |
| `!!int "42"` | Forcer la valeur en entier 42 |
| `!!float 1` | Forcer la valeur en décimal 1.0 |
| `!!bool "true"` | Forcer la valeur en booléen |
| `!!null ""` | Forcer la valeur en nul |
| `!!binary` | Données binaires encodées en Base64 |

### Exemple de balise

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

## Modèles courants

### 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
```

### Conseils

| Command | Description |
|---------|-------------|
| `yamllint` | Valider YAML pour la syntaxe et le style |
| `yq` | Processeur YAML en ligne de commande (comme jq) |
| `Éviter Norway` | NO est false booléen — mettre les codes pays entre guillemets |
| `Éviter !!python` | Ne jamais charger du YAML non fiable avec des chargeurs non sécurisés |
