YAML (YAML Ain’t Markup Language) ist ein menschenlesbares Daten-Serialisierungsformat, das sich besonders für Konfigurationsdateien etabliert hat. Im Gegensatz zu XML und JSON setzt YAML auf eine minimalistische Syntax mit Einrückungen statt Klammern oder Tags. Das macht YAML-Dateien übersichtlich und leicht verständlich – sowohl für Menschen als auch für Maschinen.

Geschichte und Entwicklung von YAML

YAML wurde 2001 von Clark Evans vorgeschlagen, der gemeinsam mit Ingy döt Net und Oren Ben-Kiki an der Spezifikation arbeitete. Der ursprüngliche Name stand für “Yet Another Markup Language”, wurde aber später in “YAML Ain’t Markup Language” geändert – ein rekursives Akronym, das betont, dass YAML primär der Datenserialisierung dient und keine Auszeichnungssprache ist.

Wichtige Versionen

Die Entwicklung von YAML verlief über mehrere Versionen, die jeweils wichtige Verbesserungen brachten:

  • YAML 1.0 (Januar 2004): Erste offizielle Spezifikation nach drei Jahren Entwicklungsarbeit
  • YAML 1.1 (Januar 2005): Einführung von Tags zur expliziten Typisierung
  • YAML 1.2 (Oktober 2009): YAML wird zum strikten Superset von JSON – jedes valide JSON-Dokument ist auch valides YAML
  • YAML 1.2.2 (Oktober 2021): Aktuelle Version mit verbesserten Definitionen

Die Entscheidung, YAML zu einem JSON-Superset zu machen, war strategisch wichtig: Entwickler können JSON-Daten direkt in YAML-Dateien einbetten, ohne sie konvertieren zu müssen.

Syntax und Struktur

Die YAML-Syntax basiert auf Einrückungen mit Leerzeichen (keine Tabs!) und verzichtet weitgehend auf Klammern und Anführungszeichen. Das macht YAML-Dateien kompakt und gut lesbar. Die Einrückungstiefe definiert die Hierarchie der Daten – ähnlich wie in Python.

Schlüssel-Wert-Paare

Die grundlegendste Struktur in YAML sind Schlüssel-Wert-Paare, getrennt durch einen Doppelpunkt und ein Leerzeichen:

name: Max Mustermann
alter: 25
beruf: Fachinformatiker
aktiv: true

Listen und Arrays

Listen werden in YAML durch Bindestriche eingeleitet. Jeder Listeneintrag beginnt mit einem Bindestrich und einem Leerzeichen:

programmiersprachen:
  - Python
  - JavaScript
  - Java
  - PHP

Verschachtelte Strukturen

Durch Einrückung lassen sich beliebig tiefe Hierarchien abbilden. Das folgende Beispiel zeigt eine typische Konfiguration mit mehreren Ebenen:

datenbank:
  host: localhost
  port: 5432
  name: produktionsdb
  zugangsdaten:
    benutzer: admin
    passwort: ${DB_PASSWORD}

Mehrzeilige Texte

YAML bietet zwei Möglichkeiten für mehrzeilige Strings: Das Pipe-Zeichen (|) erhält Zeilenumbrüche, das Größer-als-Zeichen (>) fasst Text zu einer Zeile zusammen:

# Zeilenumbrüche werden erhalten
beschreibung: |
  Dies ist die erste Zeile.
  Dies ist die zweite Zeile.
  Und hier die dritte.
 
# Text wird zu einer Zeile zusammengefasst
kurzbeschreibung: >
  Diese Zeilen werden
  zu einer einzigen Zeile
  zusammengefügt.

Datentypen in YAML

YAML erkennt Datentypen automatisch anhand des Werts. Du kannst Strings, Zahlen, Booleans, Null-Werte und Datumsangaben verwenden, ohne sie explizit deklarieren zu müssen:

DatentypBeispielBeschreibung
Stringname: Hallo WeltText, Anführungszeichen optional
Integeranzahl: 42Ganzzahlen
Floatpreis: 19.99Gleitkommazahlen
Booleanaktiv: truetrue/false, yes/no, on/off
Nullwert: nullLeerer Wert, auch ~ möglich
Datumdatum: 2024-01-15ISO 8601 Format

Bei Bedarf kannst du den Datentyp mit Tags explizit festlegen, etwa !!str 123 um die Zahl 123 als String zu behandeln.

YAML vs. JSON vs. XML

YAML, JSON und XML sind alle Formate zur Datenserialisierung, unterscheiden sich aber in Syntax und typischen Einsatzgebieten. Die folgende Tabelle zeigt die wichtigsten Unterschiede:

AspektYAMLJSONXML
LesbarkeitSehr gutGutMäßig
KommentareJa (#)NeinJa ( )
SyntaxEinrückungKlammern {} []Tags <>
DatentypenAutomatisch erkanntBegrenztSchema-definiert
DateigrößeKompaktKompaktVerbose
HaupteinsatzKonfigurationAPI-KommunikationDokumentenaustausch

YAML eignet sich besonders dort, wo Menschen Dateien regelmäßig lesen und bearbeiten müssen. JSON ist Standard für APIs und Webkommunikation. XML findet man noch häufig in Enterprise-Anwendungen und bei komplexen Dokumentstrukturen mit Schema-Validierung.

Einsatzgebiete von YAML

YAML hat sich als Standardformat für Konfigurationsdateien in der modernen Softwareentwicklung etabliert. Die wichtigsten Anwendungsbereiche sind:

Docker Compose

Docker Compose nutzt YAML-Dateien zur Definition von Multi-Container-Anwendungen. In einer docker-compose.yml beschreibst du Services, Netzwerke und Volumes:

services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - database
 
  database:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: geheim
      POSTGRES_DB: webapp
    volumes:
      - db-data:/var/lib/postgresql/data
 
volumes:
  db-data:

Kubernetes

Kubernetes verwendet YAML-Manifeste zur Beschreibung von Cluster-Ressourcen. Deployments, Services und ConfigMaps werden alle in YAML definiert:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webserver
  labels:
    app: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.25
        ports:
        - containerPort: 80

CI/CD-Pipelines

Continuous Integration und Continuous Deployment Systeme wie GitHub Actions, GitLab CI und Azure DevOps nutzen YAML zur Definition von Build- und Deployment-Pipelines:

# .github/workflows/ci.yml (GitHub Actions)
name: CI Pipeline
 
on:
  push:
    branches: [main]
  pull_request:
    branches: [main]
 
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm install
      - run: npm test

Ansible

Ansible verwendet YAML für Playbooks zur Automatisierung von IT-Infrastruktur. Die deklarative Syntax beschreibt den gewünschten Zustand von Systemen:

# playbook.yml
- name: Webserver konfigurieren
  hosts: webservers
  become: true
  tasks:
    - name: Nginx installieren
      apt:
        name: nginx
        state: present
 
    - name: Nginx starten
      service:
        name: nginx
        state: started
        enabled: true

Best Practices für YAML

Um lesbare und wartbare YAML-Dateien zu erstellen, solltest du einige bewährte Praktiken beachten:

  • Einheitliche Einrückung: Verwende immer 2 Leerzeichen pro Ebene (keine Tabs!)
  • Kommentare nutzen: Erkläre komplexe Konfigurationen mit #-Kommentaren
  • Strings quotieren bei Sonderzeichen: Nutze Anführungszeichen bei Strings mit Doppelpunkten oder anderen Sonderzeichen
  • Anker und Aliase: Verwende & und * für wiederverwendbare Konfigurationsblöcke
  • Validierung: Prüfe YAML-Dateien vor dem Deployment mit Linting-Tools

Anker und Aliase

Mit Ankern (&) und Aliasen (*) kannst du Konfigurationsblöcke wiederverwenden und Redundanz vermeiden:

# Definition eines Ankers
standard-logging: &logging
  level: info
  format: json
  output: /var/log/app.log
 
services:
  api:
    logging: *logging  # Referenziert den Anker
  worker:
    logging: *logging  # Gleiche Konfiguration

Häufige Fehler vermeiden

YAML ist syntaktisch streng – kleine Fehler können zu schwer nachvollziehbaren Problemen führen. Die häufigsten Stolperfallen sind:

FehlerProblemLösung
Tabs statt LeerzeichenYAML erlaubt keine TabsEditor auf Spaces konfigurieren
Inkonsistente EinrückungParsing-FehlerImmer gleiche Anzahl Leerzeichen
Fehlende Anführungszeichenja wird als Boolean true interpretiert"ja" für Strings verwenden
Doppelpunkt in WertenWird als neues Key-Value-Paar interpretiertString in Anführungszeichen setzen

Ein häufiger Fehler bei deutschsprachigen Werten: Das Wort “ja” wird von YAML automatisch als Boolean true interpretiert. Um es als Text zu verwenden, musst du es in Anführungszeichen setzen: "ja".

YAML in der IT-Praxis

YAML-Kenntnisse gehören heute zum Standardrepertoire in der IT. Wer als Fachinformatiker für Anwendungsentwicklung oder Fachinformatiker für Systemintegration arbeitet, wird regelmäßig mit YAML-Konfigurationen in Kontakt kommen.

Im DevOps-Bereich ist YAML allgegenwärtig: Docker Compose, Kubernetes, CI/CD-Pipelines und Infrastructure-as-Code-Tools wie Ansible setzen alle auf YAML. Auch viele Frameworks und Anwendungen nutzen YAML für ihre Konfiguration – von Spring Boot bis Hugo.