Einführung in YAML für Anfänger

In der Welt der Softwareentwicklung, insbesondere bei der Erstellung von APIs, ist YAML ein Format, das Entwicklern häufig begegnet, selbst wenn JSON das bevorzugte Serialisierungswerkzeug ist.

YAML zeichnet sich durch seine leicht verständliche Syntax aus und stellt eine wertvolle Ergänzung zum Repertoire eines jeden Entwicklers dar.

Dieser Artikel führt Sie in die grundlegenden Konzepte von YAML ein.

Daten-Serialisierung

Wenn Datenstrukturen oder Objekte über Netzwerke, wie das Internet, übertragen werden sollen, ist eine Umwandlung in ein spezielles Format notwendig, um sie korrekt lesen und speichern zu können. Dieser Prozess wird als Serialisierung bezeichnet und ist im Web von zentraler Bedeutung. Ein gängiges Beispiel ist das Auslesen von Daten aus Datenbanken und deren Weitergabe über das Internet.

Es gibt verschiedene Serialisierungsformate, darunter JSON, YAML und XML.

Im Fokus dieses Artikels steht YAML. Am Ende werden Sie ein solides Verständnis von YAML haben und damit arbeiten können.

Was genau ist YAML und welche Vorteile bietet es?

YAML ist ein Daten-Serialisierungsformat, wobei die Abkürzung für „YAML Ain’t Markup Language“ steht.

Der größte Vorteil von YAML ist seine ausgezeichnete Lesbarkeit und die einfache Erstellung. Besonders bei Konfigurationsdateien, die leicht von Menschen lesbar sein sollen, empfiehlt sich YAML. Es ist zwar kein vollständiger Ersatz für JSON, da auch JSON und XML ihre Anwendungsbereiche haben, aber YAML zu beherrschen, ist dennoch vorteilhaft.

Ein weiterer Pluspunkt von YAML ist die Unterstützung verschiedener Datentypen wie Fälle, Arrays, Wörterbücher, Listen und Skalare. Zudem ist die Unterstützung für populäre Programmiersprachen wie JavaScript, Python, Ruby und Java sehr gut.

YAML arbeitet ausschließlich mit Leerzeichen und unterscheidet zwischen Groß- und Kleinschreibung sowie der Anzahl der Leerzeichen. Tabulatoren sind nicht überall erlaubt. YAML-Dateien werden üblicherweise mit der Erweiterung .yaml gespeichert.

Grundlegende YAML-Syntax

Jede YAML-Datei beginnt mit —, was den Start der Datei markiert.

Besonders relevant für die API-Entwicklung ist die Mapping-Funktion von YAML.

Hier sind Beispiele für die Mapping-Syntax in YAML:

---
name: James
boy: yes
GPA: 3.41

Die Mapping-Syntax folgt dem Schema Schlüssel: Wert. Beachten Sie die Wichtigkeit der Leerzeichen in YAML, im Gegensatz zu JSON oder XML.

YAML unterstützt verschiedene Datentypen, darunter Zeichen, Strings, Ganzzahlen, Fließkommawerte und Sammlungen wie Arrays und Listen, die aus den grundlegenden Datentypen zusammengesetzt sind.

Datentypen in YAML

Hier ist ein Beispiel für eine YAML-Datei:

---

MALE: FALSE

GPA: 3.61

ISSUES: NULL

NAME: “BIGYAN”

AGE: 16

Der erste Datentyp ist ein boolescher Wert, der entweder wahr oder falsch sein kann. Der GPA-Wert ist ein Fließkommawert. YAML unterstützt auch den Null-Datentyp, wie im Fall von „ISSUES“. Der Wert von „Name“ ist ein String, der in doppelten oder einfachen Anführungszeichen stehen muss. YAML ermöglicht auch mehrzeilige Strings zur besseren Lesbarkeit.

Mehrzeilige und einzeilige Strings

---

About: >

 Hello this is Ryan

 From Alabama and I like to

 Play soccer.

Mit dem Symbol > können Sie einen String über mehrere Zeilen schreiben. Der gesamte Text wird jedoch als eine einzige Zeile interpretiert.

Mit dem Symbol | können Sie auch mehrzeilige Strings definieren:

About: |

 This is a multiline string

 And will be printed line wise.

Listen

Listen sind in YAML ein wichtiges Element.

Hier ist ein Beispiel für eine Liste:

---

- apple

- banana

- mango

Die Zuordnung von Skalaren zu Listen ist oft in Konfigurationsdateien zu finden, wie das folgende Beispiel zeigt:

---

Fruits:

 Apples

 Banana

 Guava 

Verschachtelung ist wichtig, um Skalare Listen zuzuordnen. Mehrere verschachtelte Listen sind auch möglich:

Automobiles:

 Car:

     Hyundai

     Volkswagen

     Ford

Hier ist „Car“ in „Automobiles“ verschachtelt, und die Automarken sind wiederum in „Car“ verschachtelt. Dieses Beispiel zeigt eine Mehrfachverschachtelung, die beliebig oft wiederholt werden kann.

Subjects:

     Engineering:

       Mechanical engineering:

         Design and manufacture

         Automobile

         Control and Design

       Civil engineering:

         Structural engineering

         Hydropower

       Arts:

         Medieval

         Modern

         Painting

YAML verwendet auch die Symbole & und * als Anker und Referenzen, um Duplikate zu vermeiden. Diese sind in Konfigurationsdateien von Frameworks wie Ruby on Rails von zentraler Bedeutung, um die YAML-Dateien kompakter zu halten.

Hier ist ein Beispiel:

details: &details
    name: "John"
    age: 18
profession: engineer

<< : * details

Dies ist äquivalent zu:

profession: engineer

name: "John"

age: 18

YAML in Python

Python bietet volle YAML-Unterstützung, inklusive der Module ruamel und pyyaml. Beginnen wir mit der Installation von pyyaml:

pip install pyyaml

Für das folgende Tutorial erstellen wir eine Datei namens details.yaml mit folgendem Inhalt:

name: "john"

age:18

gender: male

Erstellen wir eine weitere Datei namens feed.yaml mit diesem Inhalt:

sports:

 football
 basketball
 cricket
 baseball

---
countries:
 Brazil
 Lithuania
 Australia
 USA

Beginnen wir mit dem Auslesen der details.yaml-Datei:

import yaml

with open('details.yaml') as f:
    
    data = yaml.load(f, Loader=yaml.FullLoader)
    print(data)

Nach dem Ausführen der details.py-Datei erhalten wir die folgende Ausgabe:

 $ python details.py
{'name': "john", 'age': 18, 'gender': male}
import yaml

with open(r'feed.yaml') as file:
    # The FullLoader parameter handles the conversion from YAML
    # scalar values to Python the dictionary format
    fruits_list = yaml.load(file, Loader=yaml.FullLoader)

    print(fruits_list)

YAML-Dateien mit Python erstellen

import yaml

dict_file = [{'sports' : ['hockey', 'rugby', 'tennis', 'ping pong', 'football', 'badminton']},
{'countries' : ['Jamaica', 'England', 'Nepal', 'Netherlands', 'South Africa', 'Bolivia', 'Portugal']}]

with open(r'E:data.yaml', 'w') as file: #create a new yaml file 
    data = yaml.dump(dict_file, file)

YAML in Node.js

Node.js ist eine serverseitige Sprache, und die Daten-Serialisierung ist auch hier im Entwicklungsprozess sehr wichtig.

Für unser Tutorial erstellen wir eine Datei namens example.yaml mit dem folgenden Inhalt:

name:John

age:18

Hobbies:

 Hobby1:Football

 Hobby2:BasketBall

 Hobby3:Hockey

Job:

-System administrator

-Programmer

Es gibt eine npm-Bibliothek namens js-yaml. Beginnen wir mit der Installation:

npm install js-yaml

Jetzt können wir das js-yaml-Modul in unserer Datei verwenden:

const yaml = require('js-yaml'); //initialize js-yaml
const fs   = require('fs'); //initialize filestream

try {
  const result = yaml.load(fs.readFileSync('example.yml', 'utf8'));
  console.log(result);
} catch (e) {
  console.log(e); //catch exception
}

Fazit

YAML gewinnt in modernen Programmier-Frameworks und Anwendungen zunehmend an Bedeutung, insbesondere in Konfigurationsdateien. YAML adressiert ähnliche Kommunikationsanwendungen wie XML, unterscheidet sich jedoch durch eine bewusst minimale Syntax.

YAML-Dateien können mithilfe von Druckbefehlen für feste Datenstrukturen erstellt werden. Für komplexere hierarchische Datenstrukturen empfiehlt sich jedoch ein dedizierter YAML-Emitter. Einfache YAML-Dateien (wie Schlüssel-Wert-Paare) lassen sich mit regulären Ausdrücken gut parsen.