Um eine strukturierte und kodierte Darstellung von Daten zu ermöglichen, ist eine Auszeichnungssprache wie YAML besonders gut geeignet. In Anlehnung an die Urform XML und die häufig anzutreffenden JSON-Notationen steht mit YAML ein nochmals einfacheres und textbasiertes Datenformat für die Beschreibung von Objekten und Variablen zur Verfügung. YAML muss sich gegenüber XML dabei auch nicht an die strikte Kompatibilität von SGML halten, was einen deutlichen Vorteil und Performancegewinn entspricht. Die Zielsetzung von YAML war von Beginn an eine leichte menschen- und maschinenlesbare Form von Daten- und Objektstrukturen bereitstellen zu können.
Ein weiterer wesentlicher Vorteil von YAML ist das genial einfache Konzept der Serialisierung von Daten. Dies ermöglicht eine Schritt-für-Schritt Bearbeitung der Datenstrukturen und damit einen aufbauenden Programmablauf abzubilden. Um hierarchische Strukturen korrekt darstellen zu können, verwendet YAML beispielsweise einfache Einrückungen. Die Leichtgewichtigkeit wird unter anderem durch den Wegfall von Anführungszeichen, Klammern und Tags sichergestellt. Um jedoch eine möglichst hohe Kompatibilität mit beispielsweise JSON sicherzustellen, können in der Datenauszeichnung optional auch Klammern verwendet werden.
Struktur und Datentypen in YAML
Ähnlich wie bei verwandten Auszeichnungssprachen wie XML oder JSON existieren in YAML unterschiedliche Datentypen zur korrekten Beschreibung der enthaltenen Informationen. Um eine möglichst hohe Kompatibilität mit anderen Auszeichnungs- oder Scriptsprachen garantieren zu können, verfügt die Typen-Implementierung über ein sehr breites Spektrum. Datenstrukturen beschreibt YAML grundsätzlich mit assoziativen Listen, Array-Listen und Skalaren zur Darstellung von Einzelwerten. Hierzu ein einfaches erklärendes Beispiel:
-
Einfache Liste mit Werten
-
Hamburg
-
Berlin
-
München
-
-
Assoziative Liste mit Orten und Vorwahlen
-
Hamburg: 040
-
Berlin: 030
-
München: 089
-
Nach der Verarbeitung durch einen PHP-Parser würden hieraus beispielsweise die folgenden Anweisungen entstehen:
-
Einfache Liste als Array
<?php array(‘Hamburg‘, ‘Berlin‘, ‘München‘); ?> -
Assoziative Liste als Array
<?php array(‘Hamburg‘ ⇒ 040, ‘Berlin‘ ⇒ 030, ‘München‘ ⇒ 089); ?>
Als Datentypen sind in YAML die folgenden grundlegenden Typen vorgesehen:
-
Strings
Zeichenketten können ohne, mit einfachen oder auch mit doppelten Anführungszeichen verwendet werden. Werden Steuerzeichen wie beispielsweise Zeilenumbrüche benötigt, so müssen die Zeichenketten in doppelten Anführungszeichen stehen und mit den entsprechenden Steuerzeichen wie Pipes ausgezeichnet werden. -
Zahlen
Bei den Zahlenformaten sind alle aus PHP bekannten Typen verwendbar. Integer werden als normale Zahlenfolgen wie 125 beschrieben, Oktal wird beispielsweise zu 014 und Hexadezimal als 0xCF ausgezeichnet. Ein Floatwert stellt sich als 13.4 dar und ein exponentieller Wert wird in YAML mit 1.2e 34 beschrieben. -
Null
Ein typischer Nullwert wird mit dem Bezeichner null oder der geschweiften Tilde ~ beschrieben. -
Boolean-Werte stellen sich auch in YAML mit den Bezeichnern true oder false dar.
-
Binärwerte
Ein spezieller Datentyp ist der Binärwert, der häufig für Sicherheitsschlüssel oder auch Grafikdatei-Inhalte verwendet wird und direkt in YAML eingebunden werden kann. Hierfür dient die Anweisung !!binary | gefolgt von den Binärwerten. -
Datumswerte
Ein Datum kann entweder im ISO-8601-Standard mit 2018-12-08t13:26:00 oder als SimpleDate mit 2018-12-08 beschrieben werden.
YAML Einsatzbereiche
In der Praxis wird YAML einerseits zum Übertragen von Daten zwischen Computersystemen in unterschiedlichster Form eingesetzt. Dabei lassen sich auch komplexe und verschachtelte Datenkonstrukte und Strukturen ideal abbilden. Weit häufiger jedoch wird eine YAML-Auszeichnung als Konfigurationsdatei von Serversystemen eingesetzt. Hier kommt die serialisierte Abarbeitung der Datei als klarer Vorteil zum Vorschein.
Hiermit kann beispielsweise ein Server über mehrere aufeinanderfolgende Programmläufe stufenweise konfiguriert werden. Der grundlegende Aufbau einer solchen YAML-Konfigurationsdatei (z.B. sqlsettings.yml) und einem darin enthaltenen Konfigurationssatz für einen Datenbankserver wird im Folgenden beispielhaft aufgezeigt:
# Kommentarzeile in YAML
# Serverkonfiguration SQL
mysql:
driver: pdo_mysql
dbname: database_name
server:
host: localhost
port: 8080
user: root
password: password
locale: de_DE.UTF-8
charset: utf8
# Security-Token base64-codiert
hash-code: !!binary |
R0lGODlhDAAMAIQAAP//9/X17unp5WZmZgAAAOfn515eXvPz7Y6OjuDg4J fn5
OTk6enp56enmlpaWNjY6Ojo4SEhP/ f/ f/ f/ f/ f/ f/ f/ f/
f/ f/ f/ f/ f/ SH Dk1hZGUgd2l0aCBHSU1QACwAAAAADAAMAAAFLC
AgjoEwnuNAFOhpEMTRiggcz4BNJHrv/zCFcLiwMWYNG84BwwEeECcgggoBADs=
# Ende Serverkonfiguration SQL
Fazit
Aufgrund seiner einfachen Struktur und der leichtgewichtigen Syntax wird YAML bevorzugt für Datentransfers in Konfigurationsdateien von beispielsweise Server-Setups eingesetzt. Die hohe Kompatibilität zu anderen Auszeichnungssprachen wie XML oder JSON macht dieses Format zum idealen Lösungsansatz für einfach lesbare und hoch performante Anwendungsgebiete. Einst auch für den reinen Datenaustausch unter PC-Systemen gedacht, kommt es heute eher als Konfigurationswerkzeug im Datenbank- und Serverbereich zum Einsatz.
Gegenüber XML und JSON stellt YAML eine nochmalige Vereinfachung der Notation dar und garantiert dabei eine maximal mögliche Kompatibilität bezüglich Strukturen und Datentypen. In eine YAML-Datei kann zudem ohne weiteres auch JSON-Code als gültig implementiert werden. Weitere und oftmals wichtige zusätzliche Funktionen von YAML sind die Aliasverwendung und die Typenkonvertierung. In komplexeren Strukturen ist ein YAML-Code gegenüber einer JSON- oder XML-Notation auch wesentlich besser und einfacher lesbar.