EMZETT.
Login

YAML

Kurz: Ein menschenlesbares Datenformat für Konfigurationsdateien, bei dem die Struktur durch Einrückung entsteht.

Genauer: YAML (das Akronym wird meist als „YAML Ain’t Markup Language“ erklärt) wird für Konfigurationen von Docker Compose, Kubernetes, GitHub Actions und vielen anderen Werkzeugen genutzt. Es kann dieselben Daten ausdrücken wie JSON, ist aber für Menschen angenehmer zu lesen und zu schreiben, erlaubt Kommentare und kommt mit weniger Klammern aus.

Im Detail

Grundbausteine

# Kommentar
name: Emzett
aktiv: true
version: 1.5
tags:
  - wiki
  - lernen
datenbank:
  host: localhost
  port: 5432

Schlüssel und Wert stehen mit Doppelpunkt und Leerzeichen dahinter. Listen beginnen mit - . Verschachtelte Strukturen entstehen durch Einrückung mit Leerzeichen, Tabulatoren sind nicht erlaubt.

Typen

YAML erkennt Zahlen, Wahrheitswerte (true, false), null und Text selbst. Das ist bequem, aber eine Fehlerquelle: In älteren YAML-Fassungen wurde no als false gelesen (das „Norwegen-Problem“ bei Ländercodes), und 1.10 wird zur Zahl 1,1. Im Zweifel Texte in Anführungszeichen setzen: land: "no".

Mehrzeilige Texte

beschreibung: |
  Erste Zeile
  Zweite Zeile (Zeilenumbrüche bleiben)
kurz: >
  Dieser Text wird
  zu einer Zeile gefaltet.

Anker und Wiederverwendung

Mit &name markiert man einen Block, mit *name verwendet man ihn erneut, um Wiederholungen zu vermeiden. Das spart Schreibarbeit, macht Dateien aber schwerer lesbar, wenn man es übertreibt.

Fehler vermeiden

Die häufigsten Fehler sind falsche Einrückung (ein Leerzeichen zu viel oder zu wenig verändert die Struktur) und vergessene Anführungszeichen bei Sonderzeichen wie : oder # im Text. Ein Prüfwerkzeug („Linter“) oder der Editor mit Einrückungslinien hilft. Beim Umwandeln zwischen YAML, JSON und CSV gilt: JSON kennt keine Kommentare, die gehen dabei verloren.

Sicherheit

Manche YAML-Bibliotheken können beim Laden beliebige Objekte erzeugen und damit Code ausführen. Daten aus unbekannter Quelle immer mit dem „sicheren“ Lader einlesen (safe_load in Python).

Siehe auch: JSON, XML, CSV