YAML (YAML Ain't Markup Language / Yet Another Markup Language)

Was ist YAML? 🤔

YAML (ein rekursives Akronym, das ursprünglich für ""Yet Another Markup Language"" stand, später aber zu ""YAML Ain't Markup Language"" umgedeutet wurde, um den Fokus auf Daten statt auf Dokumenten-Markup zu legen) ist ein menschenlesbares Datenformat zur Datenserialisierung. Es wird häufig für Konfigurationsdateien, aber auch für den Datenaustausch zwischen verschiedenen Programmiersprachen oder für die Speicherung von Objekten verwendet.

Das Hauptdesignziel von YAML ist die Optimierung für menschliche Lesbarkeit und Editierbarkeit. Es versucht, eine möglichst klare und intuitive Syntax zu bieten, die sich eng an gängigen Datenstrukturen wie Listen (Sequenzen) und assoziativen Arrays (Mappings oder Dictionaries) orientiert. YAML gilt oft als lesbarer als JSON oder XML, insbesondere bei komplexeren oder verschachtelten Datenstrukturen.

Merkmale und Syntax

YAML zeichnet sich durch eine minimalistische Syntax aus, die stark auf Einrückungen zur Darstellung der Struktur basiert:

  • Menschenlesbarkeit: Klare, intuitive Struktur, die auch ohne tiefes technisches Wissen oft gut verständlich ist.
  • Einrückungsbasiert (Indentation): Ähnlich wie in Python wird die hierarchische Struktur von Daten durch Einrückungen (Leerzeichen, keine Tabs!) definiert. Dies macht Klammern oder spezielle Tags weitgehend überflüssig.
  • Datenstrukturen: Unterstützt die drei grundlegendsten Datenstrukturen:
    • Mappings (Dictionaries/Objekte): Schlüssel-Wert-Paare, dargestellt durch `Schlüssel: Wert`.
    • Sequenzen (Listen/Arrays): Geordnete Listen von Elementen, oft dargestellt durch einen Bindestrich und ein Leerzeichen (`- Element`) am Anfang jeder Zeile.
    • Skalare: Einfache Werte wie Strings (Zeichenketten, oft ohne Anführungszeichen schreibbar), Zahlen (Integer, Float), Booleans (`true`/`false`, `yes`/`no`, `on`/`off`).
  • Kommentare: Kommentare werden mit einem Rautezeichen (`#`) eingeleitet und gelten bis zum Zeilenende.
  • Unterstützung für komplexe Daten:** Kann auch mehrzeilige Strings, binäre Daten (Base64-kodiert) und explizite Datentypen (über Tags wie `!!str`, `!!int`) darstellen.

Anker und Aliase:** Ermöglichen es, Datenstrukturen einmal zu definieren (mit einem Anker wie `&anchor_name`) und an anderer Stelle darauf zu verweisen (mit einem Alias wie `*anchor_name`), um Redundanzen zu vermeiden (DRY-Prinzip).

YAML ist ein Superset von JSON, was bedeutet, dass die meisten gültigen JSON-Dokumente auch gültige YAML-Dokumente sind (aber nicht umgekehrt).

Anwendungsbereiche

YAML hat sich aufgrund seiner Lesbarkeit besonders in bestimmten Bereichen etabliert:

  • Konfigurationsdateien: Dies ist der häufigste Anwendungsfall. Viele moderne Entwicklungs- und DevOps-Werkzeuge verwenden YAML für ihre Konfiguration, z.B.:
    • Docker Compose (`docker-compose.yml`)
    • Kubernetes Manifeste (`*.yaml`)
    • CI/CD-Pipeline-Definitionen (z.B. GitHub Actions Workflows, GitLab CI/CD (`.gitlab-ci.yml`))
    • Server- und Anwendungskonfigurationen (z.B. für Frameworks wie Symfony, Serverless Framework).
    • Konfiguration für Infrastructure as Code Tools (z.B. Ansible Playbooks).
  • Datenaustausch: Als Alternative zu JSON oder XML für den Austausch von Daten zwischen verschiedenen Anwendungen oder Diensten, insbesondere wenn die Lesbarkeit für Menschen wichtig ist.
  • Objektserialisierung: Speichern und Laden des Zustands von Objekten in oder aus Dateien.
  • Internationalisierung (i18n): Speicherung von Übersetzungsstrings für Anwendungen.

Vorteile, Nachteile und Vergleich

Vorteile von YAML:

  • Hervorragende Lesbarkeit: Die minimalistische, einrückungsbasierte Syntax ist für Menschen sehr gut zu lesen und zu verstehen.
  • * **Einfachheit beim Schreiben:** Besonders für Konfigurationen oft intuitiver und weniger fehleranfällig zu schreiben als z.B. XML oder JSON mit vielen Klammern und Kommas. * **Unterstützung für Kommentare:** Erleichtert die Dokumentation direkt in der Datei. * **Mächtige Features:** Unterstützt komplexe Datentypen, mehrzeilige Strings und Mechanismen zur Datenwiederverwendung (Anker/Aliase). * **Superset von JSON:** Kann JSON-Daten oft direkt verarbeiten.

Nachteile von YAML:

  • * **Einrückungs-Sensitivität:** Die Abhängigkeit von korrekter Einrückung kann eine häufige Fehlerquelle sein (ähnlich wie bei Python). Falsche Einrückungen können die Struktur komplett verändern oder zu Parse-Fehlern führen. * **Komplexität beim Parsen:** Das Parsen von YAML kann aufgrund der flexiblen Syntax und Features wie Ankern/Aliasen komplexer sein als das Parsen von JSON. * **Weniger strikt als JSON/XML:** Die Flexibilität kann manchmal zu Ambiguitäten führen oder erfordert sorgfältigere Validierung. * **Sicherheitsrisiken:** Einige YAML-Parser erlaubten früher das Ausführen von Code über spezielle Tags, was ein Sicherheitsrisiko darstellte (moderne Parser sind hier meist sicherer konfiguriert - `safe_load`).

Im Vergleich zu JSON ist YAML deutlich lesbarer und besser für von Hand geschriebene Konfigurationen geeignet, während JSON oft bevorzugt wird, wenn es primär um den reinen Datenaustausch zwischen Maschinen geht, da es einfacher zu parsen und weniger fehleranfällig bezüglich der Syntax ist. XML ist nochmals strukturierter (durch Schemavalidierung) und besser für Dokumenten-Markup geeignet, aber auch am geschwätzigsten.

Zurück

Wie können wir Ihnen helfen?

Die Potenziale digitaler Möglichkeiten sind riesig. Das Allermeiste, was Sie sich vorstellen können, können wir für Sie entwickeln. Glauben Sie nicht? Dann sollten wir reden. Sonst natürlich auch gerne.

Mathias Münzner

Geschäftsführer

06221-1878440

Kontakt

cortona GmbH

Margot-Becke-Ring 8

69124 Heidelberg

T: +49 (0) 6221 18 78 440

E: info@cortona.de