Sie sind hier:
Wissen
Telefon (Mo-Fr 9 bis 16 Uhr):
0201/649590-0
|
Kontaktformular
Buy me a coffee
MENU
Medien
Übersicht
Lexikon/Glossar
Spickzettel
Weblog
Konferenzvorträge
Fachbücher
Fachartikel
Leserportal
Autoren gesucht!
Literaturtipps
Praxisnahe Fallbeispiele
Downloads
Newsletter
.NET
Startseite
.NET 8.0
.NET 7.0
.NET 6.0
.NET 5.0
.NET Core
.NET 4.0/4.5.x/4.6.x
.NET 3.0/3.5
.NET 2.0
.NET-Lexikon
Entwicklerwerkzeuge
Klassenreferenz
Softwarekomponenten
Windows Runtime
World Wide Wings-Demo
Versionsgeschichte
Codebeispiele
ASP.NET
Artikel
Bücher
Schulung & Beratung
Konferenzen/Events
ASP.NET
Startseite
Lexikon
Sicherheit
Konfiguration
Global.asax
Tracing
Technische Beiträge
Klassenreferenz
Entwicklerwerkzeuge
Softwarekomponenten
Forum
Schulung & Beratung
PowerShell
Startseite
Commandlet-Referenz
Codebeispiele
Commandlet Extensions
Versionsgeschichte
Schulungen+Beratung
Windows
Startseite
Windows Runtime (WinRT)
Windows PowerShell
Windows Scripting
Windows-Schulungen
Windows-Lexikon
Windows-Forum
Scripting
Startseite
Lexikon
FAQ
Bücher
Architektur
Skriptsprachen
Scripting-Hosts
Scripting-Komponenten
COM/DCOM/COM+
ADSI
WMI
WMI-Klassenreferenz
Scripting-Tools
WSH-Editoren
Codebeispiele
.NET-Scripting
Forum
Schulung & Beratung
Nutzer
Anmeldung/Login
Buchleser-Registrierung
Gast-Registrierung
Hilfe
Website-FAQ
Technischer Support
Site Map
Tag Cloud
Suche
Kontakt
Erklärung des Begriffs: YAML Ain't Markup Language (YAML)
Begriff
YAML Ain't Markup Language
Abkürzung
YAML
Eintrag zuletzt aktualisiert am
12.06.2019
Zur Stichwortliste unseres Lexikons
Was ist
YAML Ain't Markup Language
?
YAML ist ein textbasiertes
Datenformat
in Form einer Auszeichnungssprache. Eine Auszeichnungssprache (englisch Markup Language) ist laut [
https://de.wikipedia.org/wiki/Auszeichnungssprache
] eine maschinenlesbare Sprache für die Gliederung und Formatierung von Texten und anderen Daten. Bekanntere Auszeichnungssprachen sind HTML,
XML
und
JSON
. YAML zeichnet sich gegenüber HTML,
XML
und
JSON
dadurch aus, dass es kompakter und übersichtlicher ist; daher ist es nicht nur für Maschinen, sondern auch für Menschen gut lesbar.
Einsatzgebiete von YAML
YAML wird inzwischen an einigen Stellen als Konfigurationsformat eingesetzt, z.B. in
Docker
,
Kubernetes
und seit 2019 auch in
Azure DevOps
-
Pipeline
s zur Definition von Continous Integration- und Continous Delivery-
Prozesse
n. Grundsätzlich kann YAML aber nicht nur für
Konfigurationsdatei
en, sondern als beliebiges
Datenformat
eingesetzt werden, auch als Ersatz für
XML
und
JSON
.
Es gibt zahlreiche
Softwarekomponente
n zur Serialisierung von
Objekt
modellen in YAML bzw. der
Deserialisierung
von YAML in
Objekt
modellen in zahlreichen
Programmiersprache
n und Frameworks, z.B. C, C++,
Ruby
,
Python
, Java,
Perl
, .NET,
PHP
,
Dart
,
JavaScript
(siehe [
https://yaml.org/
]).
Name YAML
Die Abkürzung YAML stand ursprünglich für "Yet Another Markup Language". Mittlerweile verwendet man YAML als rekursive Abkürzung für "YAML Ain’t Markup Language".
Versionen
Die erste Version der YAML-Sepzifikation von Oren Ben-Kiki, Clark Evans und Brian Ingerson stammt bereits vom 29.2.2004 [
https://yaml.org/spec/1.0/
]
Version 1.1: 18.1.2005 [
https://yaml.org/spec/1.1/
]
Version 1.2: 10.1.2009 [
https://yaml.org/spec/1.2/spec.html
]
Website
https://yaml.org
YAML-Parser für .NET
https://github.com/aaubry/YamlDotNet
Microsoft selbst liefert in
.NET Framework
und
.NET Core
noch keine YAML-Bibliothek mit. Diese Lücke füllt das Github-Projekt YamlDotNet [
https://github.com/aaubry/YamlDotNet
]. Die kompilierte Bibliothek gibt es auf Nuget [
https://www.nuget.org/packages/YamlDotNet/
]. Die erste dort veröffentlichte Version war 2013, seitdem sind zahlreiche Versionen erschienen. Die aktuelle Version zum Zeitpunkt der Erstellung des Beitrags ist 6.1.1 vom 4.6.2019. YamlDotNet basiert auf
.NET Standard
1.3, läuft daher in
.NET Core
ab Version 1.0 und
.NET Framework
ab Version 4.5 sowie
Mono
und
Unity
. Die Installation in einem Projekt erfolgt mit Install-Package YamlDotNet.
Bestandteile
Die wichtigsten Elemente in YAML sind:
Leerzeichen zur Einrückung als Strukturierungselement
Einfachen
Liste
n (alias Arrays);
Liste
nelemente beginnen mit einem Minuszeichen
Assoziativen
Liste
n (alias
Hash
es, Maps, Dictionary) in der Form Name : Wert
Einzelwerten (Skalare): diese können, müssen aber nicht in einfachen oder doppelten Anführungszeichen stehen
Sprungmarken (Anker) und Verweise (Referenzen): die Sprungmarke beginnt mit dem kaufmännischen &, der Verweis darauf mit einem Stern *
Kommentaren (beginnen mit #)
Abschnitten (---), die ein Datei in mehrere Dokumente teilen können
Einsatzgebiete
YAML hat erst Mitte der 2010er-Jahre größere Bedeutung erhalten als es von
Docker
als Konfigurationsformat für Deployment und
Debugging
-Einstellungenverwendet wurde.
Microsoft verwendet YAML seit 2019 in
Azure DevOps
.
Beispiel
Listing 1 zeigt ein
Objekt
modell mit verschiedenen Datentypen (inkl.
Nullable Value Type
s),
Liste
n, einem Aufzählungstyp und einer zirkulären Referenzen. Der Programmcode ist eine komplexere Form eines Beispiels auf Github [
https://github.com/aaubry/YamlDotNet/blob/master/YamlDotNet.Samples/SerializeObjectGraph.cs
]. Listing 2 zeigt die Serialisierung und
Deserialisierung
mit YamlDotNet. Listing 3 zeigt das Ergebnisdokument.
Listing 1: Ein
Objekt
modell in C# mit zirkulären Referenzen
using System;
using
System.Collections
.
Generic
;
namespace ITVisions.Demo.BO
{
public enum Title
{
None, Dr, Prof, ProfDr
}
public class Address
{
public string Street { get; set; }
public string City { get; set; }
public string State { get; set; }
}
public class Order
{
public Guid Receipt
GUID
{ get; set; }
public DateTime Date { get; set; }
public Customer Customer { get; set; }
public List<Item> Items { get; set; }
public Address Bill_To { get; set; }
public Address Ship_To { get; set; }
public string SpecialDelivery { get; set; }
}
public class Customer
{
public string Name { get; set; }
public Employee Employee { get; set; }
}
public class Employee
{
public Title Title { get; set; }
public string Givenname { get; set; }
public string Surname { get; set; }
public DateTime? Birthday { get; set; }
public List<Receipt> Receipts { get; set; } = new List<Receipt>();
}
public class Item
{
public short Part_No { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public int Quantity { get; set; }
public int? Weight { get; set; }
}
}
Listing 2: Erzeugen eines
Objekt
modells und Serialisierung sowie
Deserialisierung
in YAML
using ITVisions.Demo.BO;
using System;
using System.Linq;
using YamlDotNet.Serialization;
using YamlDotNet.Serialization.NamingConventions;
namespace ITVisions
{
public class YAMLDemo
{
public void Run()
{
Console.WriteLine("--- Creating Business Objects...");
var receipt = CreateBusinessObjects();
Console.WriteLine("--- Serializing...");
var serializer = new SerializerBuilder()
.WithNamingConvention(new PascalCaseNamingConvention())
.Build();
var yaml = serializer.Serialize(receipt);
Console.WriteLine("--- Result:");
Console.WriteLine(yaml);
Console.WriteLine("--- Deserializing...");
var deserializer = new DeserializerBuilder()
.WithNamingConvention(new PascalCaseNamingConvention())
.Build();
var receipt2 = deserializer.Deserialize<Order>(yaml);
Console.WriteLine("--- Result:");
ObjectDumper.Write(receipt2);
}
private static Order CreateBusinessObjects()
{
var address = new Address
{
Street = "De-La-Chevallerie-Straße 42,\nEtage 2",
City = "45894 Gelsenkirchen",
State = "NRW"
};
var receipt = new Order
{
Receipt
GUID
= Guid.NewGuid(),
Date = DateTime.Now,
Customer = new Customer
{
Name = "5Minds IT Solutions Gmbh & Co KG",
Employee = new Employee
{
Title = Title.Dr,
Givenname = "Dr. Holger",
Surname = "Schwichtenberg"
}
},
Items = (new Item[]
{
new Item
{
Part_No = 123,
Description = "C# 7.3 Crashkurs",
Price = 14.99M,
Quantity = 40
},
new Item
{
Part_No = 456,
Description = "Moderne Datenzugriffslösungen mit \"Entity ramework Core 2.1/2.2
Ruby
\"",
Price = 49.00M,
Quantity = 1
}
}).ToList(),
Bill_To = address,
Ship_To = address,
SpecialDelivery = "Bitte zusammen anliefern\n" +
"Wareneingang 2. Etage.\n" +
"Bitte am Empfang melden"
};
// recursion
receipt.Customer.Employee.Receipts.Add(receipt);
return receipt;
}
}
}
Listing 3: YAML-Dokument für das
Objekt
modell in Listing 1
&o0
Receipt
GUID
: d5549070-102a-4768-8b65-03501b76af24
Date: 2019-06-12T20:16:55.2529275+02:00
Customer:
Name: 5Minds IT-Solutions Gmbh & Co KG
Employee:
Title: Dr
Givenname: Dr. Holger
Surname: Schwichtenberg
Receipts:
*o0
Items:
PartNo: 123
Description: C# 7.3 Crashkurs
Price: 14.99
Quantity: 40
PartNo: 456
Description: Moderne Datenzugriffslösungen mit "
Entity Framework Core 2.1
/2.2
Ruby
"
Price: 49.00
Quantity: 1
BillTo: &o1
Street: >-
De-La-Chevallerie-Straße 42,
Etage 2
City: 45894 Gelsenkirchen
State: NRW
ShipTo: *o1
SpecialDelivery: >-
Bitte zusammen anliefern
Wareneingang 2. Etage.
Bitte am Empfang melden
Querverweise zu anderen Begriffen im Lexikon
siehe
https://yaml.org
Entity Framework Core 2.1
Nullable Value Type
Konfigurationsdatei
Programmiersprache
Softwarekomponente
System.Collections
Deserialisierung
.NET Framework
.NET Standard
Azure DevOps (ADO)
Datenformat
Kubernetes
JavaScript (JS)
.NET Core
Debugging
Prozesse
Pipeline
Generic
Objekt
Python
Docker
Unity
Liste
Perl
Hash
Mono
Dart
Ruby
Global Unique Identifier (GUID)
JavaScript Object Notation (JSON)
Personal Home Page Tools (PHP)
Extensible Markup Language (XML)
Beratung & Support
Anfrage für Beratung/Consulting zu YAML Ain' t Markup Language YAML
Gesamter Beratungsthemenkatalog
Technischer Support zum YAML Ain' t Markup Language YAML
Schulungen zu diesem Thema
Visual Studio 2017 (Visual Studio 15.x) Update - Die Neuerungen gegenüber Visual Studio 2015
DevOps / Continuous Integration (CI)/Continuous Delivery (CD) mit Pipelines in Azure DevOps Server / Azure DevOps Services (ADO) - Build- und Releasemanagement
Kubernetes (K8s)
DevOps / Continuous Integration (CI) / Continuous Delivery (CD) mit Ansible
Azure DevOps Server / Azure DevOps Services (ADO) im Überblick
Anfrage für eine individuelle Schulung zum Thema YAML Ain' t Markup Language YAML
Gesamter Schulungsthemenkatalog
Bücher zu diesem Thema
Alle unsere aktuellen Fachbücher
E-Book-Abo für ab 99 Euro im Jahr