# YAML

YAML [ˈjæməl] ist ein textbasiertes Dateiformat zur Datenserialisierung, das außerdem für Konfigurationsdateien verbreitet ist. Die Idee zu YAML stammt von Clark Evans von 2001, die Spezifikation wurde von ihm selbst, Brian Ingerson und Oren Ben-Kiki erstellt. YAML ist an XML (da ursprünglich als vereinfachte Auszeichnungssprache gedacht) und an die Datenstrukturen in den Sprachen Perl, Python und C sowie dem in RFC 2822 vorgestellten E-Mail-Format angelehnt.
YAML ist ein rekursives Akronym für „YAML Ain’t Markup Language“ (ursprünglich „Yet Another Markup Language“).

## Design-Ziele

Die grundsätzliche Annahme von YAML ist, dass jede beliebige Datenstruktur nur mit assoziativen Listen, Listen (Arrays) und Einzelwerten (Skalaren) dargestellt werden kann. Durch dieses einfache Konzept ist YAML wesentlich leichter von Menschen zu lesen und zu schreiben als beispielsweise XML, außerdem vereinfacht es die Weiterverarbeitung der Daten, da die meisten Sprachen solche Konstrukte bereits integriert haben.

## Beispiele

Hinweis:
* Das Zeichen # leitet einzeilige Kommentare ein, --- markiert den Beginn eines neuen Abschnitts.
* Ein Kommentar in der gleichen Zeile wie --- kann zwar Probleme beim Einlesen der YAML-Datei hervorrufen – aus Übersichtsgründen ist er im Beispiel jedoch trotzdem in der gleichen Zeile.
Listen:
Assoziative Listen:
Block-Ausdrücke mit senkrechtem Strich bewirken, dass Zeilenumbrüche beibehalten werden:
Quelle
Block-Ausdrücke mit Größer-als-Zeichen bewirken, dass einzelne Zeilenumbrüche in Leerzeichen geändert werden:
Liste von assoziativen Listen:
Assoziative Liste von Listen:

## Kritik

Insbesondere nach der weiten Verbreitung von YAML in Konfigurationen für Cloud-verwandte Systeme, beispielsweise Kubernetes und Microsoft Azure, hat das Format einige Kritik erhalten.
Die angestrebte Vereinfachung der JSON-Syntax wird nach Meinung verschiedener Kritiker nicht erreicht. Die YAML-Spezifikation ist wesentlich länger als die Spezifikationen für JSON, TOML oder selbst die als umfangreich geltende XML. YAML weist beispielsweise eine Vielzahl an Datentypen, einschließlich Datums- und Zeitformaten auf, die fast alle ohne Anführungszeichen geschrieben werden können. Da Strings nicht in Anführungszeichen geschrieben werden müssen, führt das zu komplexen Regeln bei der Typisierung von Werten, deren Ergebnisse überraschend sein können:
Hinzu kommen Schwierigkeiten wie mindestens neun Varianten für mehrzeilige Texte und die bereits erwähnten 22 Varianten für boolesche Werte, die es in der veralteten Version 1.1 gab und aus Variationen der Wörter "yes", "no", "true", "false", "on" und "off" bestehen. Alle diese Schwierigkeiten lassen sich jedoch umgehen, indem man Strings immer in Anführungszeichen schreibt.
Tolerantes Parsing, welches Fehler weitestgehend vermeiden möchte (vergleiche JavaScript), kann zu unerwarteten Resultaten führen. Beispielsweise sind abgeschnittene YAML-Dokumente, die bei unvollständiger Dateispeicherung oder einem Netzwerkfehler auftreten können, meist noch gültig.
YAML ist standardmäßig unsicher und erlaubt beim Einlesen die Ausführung beliebigen Programmcodes in einer Vielzahl von Implementierungen. Obwohl die meisten Implementierungen eine sichere Alternative anbieten und teilweise die unsichere Einlesefunktion als veraltet markiert haben, stellen die unsicheren Funktionen den Standard dar.

## Implementierungen

YAML-Implementierungen existieren unter anderem in den Programmiersprachen C, C++, C#, JavaScript, ActionScript, Perl, PHP, Python, Java, R, Ruby, Rust sowie für die .NET-Plattformen.

## Ähnliche Techniken

Zu ähnlichen Formaten für Konfigurationsdateien siehe Konfigurationsdatei#Dateiformate.
Mit JSON existiert eine ähnliche Technik, die noch mehr am Objektmodell (DOM) orientiert ist und aus der Programmiersprache JavaScript stammt. JSON ist eine echte Untermenge von YAML: Jedes JSON-Dokument ist in Version 1.2 von YAML ein valides YAML-Dokument. Aus der Clojure-Welt stammt das EDN-Format, welches eine an JSON angelehnte, erweiterbare Syntax verwendet.
Auch für die grafische Notationssprache UML (Version 2) existiert eine textbasierte Alternative, die auf leichte Lesbarkeit für Menschen hin ausgelegt ist – die Human-Usable Textual Notation (HUTN). Das Metamodell von UML und HUTN ist jeweils MOF, sodass HUTN jedes UML-Diagramm als leicht lesbaren Text darstellen kann. Die leichte Lesbarkeit unterscheidet HUTN vom XMI-Format, das für den Datenaustausch zwischen UML-Applikationen vorgesehen ist.