Was ist das YAML-Dateiformat?
.yaml ist ein Textdateiformat zum Austausch von Daten zwischen verschiedenen Anwendungen. YAML - kurz für *YAML Ain't Markup Language* - ist ein Standard zur Organisation von Informationen in einem menschenlesbaren, plattformunabhängigen Format mit einrückungsbasierten key: value-Paaren in UTF-8-Kodierung. Das Parsen von .yaml-Dateien erfordert eine installierte YAML-Bibliothek; verbreitete Bibliotheken sind PyYAML (Python), js-yaml (JavaScript) und SnakeYAML (Java). .yaml-Dateien werden manchmal mit der Erweiterung .yml gespeichert, die funktional identisch ist. Neben dem Datenaustausch werden .yaml-Dateien typischerweise zur Datenserialisierung und für Konfigurationsdateien in Werkzeugen wie Docker Compose, Kubernetes und GitHub Actions verwendet.
Serialisierung
Serialisierung ist ein Begriff aus der Informatik. Er bezeichnet den Prozess der Umwandlung von Daten oder Objekten in ein Format, das gespeichert, übertragen und später rekonstruiert werden kann. Wenn zum Beispiel zwei Institutionen Daten in einem standardisierten Format über verschiedene Anwendungen austauschen, müssen sie diese Daten vor dem Versand serialisieren. Serialisierte Daten können auch in einer Datei gespeichert werden - .yaml, .xml, .json, .toml usw. - und dann an die Empfänger gesendet werden.
Ein .yaml-Dokument kann optional mit dem ----Dokumentstart-Marker beginnen und mit ... enden; dies ermöglicht auch mehrere Dokumente in einer einzigen Datei. Seit YAML 1.2 (2009, überarbeitet 2021) ist jede gültige JSON-Datei auch gültiges YAML.
Sicherheit
RISIKO: MEDIUMEine YAML-Datei ist reiner Text und wird nicht von selbst ausgeführt, daher ist das Lesen sicher. Zwei reale Risiken: (1) Konfigurations-YAML (CI-Pipelines, Compose, K8s, Ansible) enthält häufig Geheimnisse - Tokens, Passwörter, Schlüssel - also fügen Sie es nicht in nicht vertrauenswürdige Online-Validatoren ein oder committen Sie es öffentlich. (2) Programmatische Gefahr: Das Laden von nicht vertrauenswürdigem YAML mit einem unsicheren Parser (z. B. PyYAMLs yaml.load statt yaml.safe_load) kann beliebige Objekte/Code ausführen - verwenden Sie immer den sicheren Loader für nicht vertrauenswürdige Dateien. Bearbeitungsrisiko: Ein Tabulator oder ein falsch ausgerichtetes Leerzeichen ändert stillschweigend die Bedeutung, also nach dem Bearbeiten validieren.
Formatdetails
kurz gefasstProgramme zum Öffnen von YAML-Dateien
Technische Details
technische Spezifikation| Dateiendung | .yaml (auch .yml) |
| MIME-Typ | application/yaml |
| Kodierung | UTF-8-Klartext; kein binärer Header oder Magic Bytes |
| Struktur | Einrückungsbasierte Schlüssel: Wert-Paare; Einrückung verwendet nur Leerzeichen - Tabulatoren sind gemäß der Spezifikation verboten |
| Dokument-Marker | --- markiert den Dokumentstart, ... markiert das Dokumentende; mehrere Dokumente können in einer Datei koexistieren |
| Native Datentypen | Zeichenketten, Ganzzahlen, Gleitkommazahlen, Boolesche Werte, Null, Sequenzen (Listen), Mappings (Wörterbücher), Zeitstempel |
| Spezifikationsversion | YAML 1.2 (2009, überarbeitet 2021); ersetzt YAML 1.1 (2005) und YAML 1.0 (2001) |
| JSON-Kompatibilität | Seit YAML 1.2 ist jedes gültige JSON-Dokument auch gültiges YAML - JSON ist eine strikte Teilmenge |
| Kommentare | Einzeilige Kommentare, eingeleitet durch # ; können in einer eigenen Zeile oder inline nach einem Wert stehen |
| Mehrzeilige Zeichenketten | Literaler Block-Skalar (|) erhält Zeilenumbrüche; gefalteter Skalar (>) wandelt Zeilenumbrüche in Leerzeichen um |
| Anker und Aliasse | & definiert einen benannten Anker und * verweist (als Alias) darauf, was die Wiederverwendung von Werten ohne Duplizierung ermöglicht |
| Entwickler | Clark Evans, Ingy döt Net, Oren Ben-Kiki |
| Häufige Anwendungsfälle | Konfigurationsdateien (Kubernetes, Docker Compose, GitHub Actions, Ansible), Datenserialisierung, OpenAPI-Definitionen |
| Anführungszeichen | Unzitiert, einfach zitiert ('...') und doppelt zitiert ("...") werden alle unterstützt; doppelt zitiert erlaubt Escape-Sequenzen |
| Veröffentlicht | 2001 (YAML 1.0); YAML 1.1 (2005); current YAML 1.2 (2009, revised 2021) |
| Offener Standard | Ja · lizenzgebührenfrei |
| Spezifikation | yaml.org |