YAML

YAML (Reime mit dem Kamel) ist ein menschlich-lesbares Datenanordnungsformat, das Konzepte aus Programmiersprachen wie C, Perl, und Pythonschlange und Ideen von XML und dem Datenformat der elektronischen Post (RFC 2822) nimmt. YAML wurde zuerst von Clark Evans 2001 vorgeschlagen, der ihn zusammen mit dem Netz von Ingy döt und Oren Ben-Kiki entworfen hat. Es ist für mehrere Programmiersprachen verfügbar.

YAML ist ein rekursives Akronym für "YAML Ist nicht Preiserhöhungssprache". Früh in seiner Entwicklung, wie man sagte, hat YAML "und doch eine Andere Preiserhöhungssprache" bedeutet, aber war retronymed, um seinen Zweck als datenorientiert, aber nicht Dokumentenpreiserhöhung zu unterscheiden.

Eigenschaften

YAML Syntax wurde entworfen, um zu für die meisten höheren Programmiersprachen üblichen Datentypen leicht kartografisch dargestellt zu werden:

Liste, assoziative Reihe und Skalar. Sein vertrauter ausgezackter Umriss und mageres Äußeres machen es hat besonders für Aufgaben gepasst, wo Menschen wahrscheinlich ansehen oder Datenstrukturen wie Konfigurationsdateien editieren werden, während des Beseitigens und der Dokumentenkopfbälle abladend (z.B, sind die auf den meisten E-Mails gefundenen Kopfbälle sehr YAML nah). Obwohl gut passend, für die hierarchische Datendarstellung hat es auch eine Kompaktsyntax für Verwandtschaftsdaten ebenso. Seine Linie und whitespace Begrenzungszeichen machen es freundlich zu grep/Python/Perl/Ruby Ad-Hoc-Operationen. Ein Hauptteil seiner Zugänglichkeit kommt das Enthalten des Gebrauches von Einschließungen wie Anführungszeichen, Klammern, geschweifte Klammern und open/close-tags her, der für das menschliche Auge hart sein kann, in verschachtelten Hierarchien zu balancieren.

Beispiele

Beispieldokument

Datenstruktur-Hierarchie wird durch die Umriss-Einrückung aufrechterhalten.

Einnahme: Kauf-Rechnung der Unze-Waren

Datum: Am 2007-08-06

Kunde:

gegeben: Dorothy

Familie: Sturm

Sachen:

- part_no: A4786

descrip: Wassereimer (Gefüllter)

Preis: 1.47

Menge: 4

- part_no: E1628

descrip: Hoch Finanzstarke "Rubinrote" Hausschuhe

Größe: 8

Preis: 100.27

Menge: 1

Rechnung - zu:

&id001

Straße: |

123 Tornado-Allee

Gefolge 16

Stadt: Osten Centerville

Staat: KS

Schiff - zu: *id001

specialDelivery:>

Folgen Sie dem gelben Ziegel

Straße zur smaragdgrünen Stadt.

Schenken Sie keine Aufmerksamkeit dem

Mann hinter dem Vorhang.

... </syntaxhighlight>

Bemerken Sie, dass Schnuren Einschließung in Zitaten nicht verlangen. Die spezifische Zahl von Räumen in der Einrückung ist unwichtig, so lange parallele Elemente dieselbe linke Rechtfertigung haben und die hierarchisch verschachtelten Elemente weiter eingedrückt werden. Dieses Beispieldokument definiert eine assoziative Reihe mit 7 Spitzenniveau-Schlüsseln: Einer der Schlüssel, "Sachen", enthält eine 2 Element-Reihe (oder "Liste"), dessen jedes Element selbst eine assoziative Reihe mit sich unterscheidenden Schlüsseln ist. Verwandtschaftsdaten und Überfülle-Eliminierung werden gezeigt: Das "Schiff - zum" assoziativen Reihe-Inhalt wird aus der "Rechnung - zum" Inhalt der assoziativen Reihe, wie angezeigt, durch den Anker (&) und Verweisung (*) Etiketten kopiert. Fakultative leere Linien können für die Lesbarkeit hinzugefügt werden. Vielfache Dokumente können in einer einzelnen Datei/Strom bestehen und werden durch "" getrennt. Ein fakultativer "" kann am Ende einer Datei (nützlich verwendet werden, für einem Ende in verströmten Kommunikationen Zeichen zu geben, ohne die Pfeife zu schließen).

Sprachelemente

Grundlegende Bestandteile von YAML

YAML bietet sowohl einen ausgezackten als auch einen "Reihen"-Stil an, um assoziative Reihe und Listen anzuzeigen. Hier ist ein Probierer der Bestandteile.

Listen

Herkömmliches Block-Format verwendet einen hyphen+space, um einen neuen Artikel in der Liste zu beginnen.

---# Lieblingskino

- Casablanca

- Norden durch den Nordwesten

- Der Mann, der nicht dort war

</syntaxhighlight>

Fakultatives Reihenformat wird durch comma+space abgegrenzt und in Klammern (ähnlich JSON) eingeschlossen.

---# Einkaufsliste

[Milch, Kürbis-Kuchen, Eier, Saft]

</syntaxhighlight>

Assoziative Reihe

Schlüssel werden von Werten durch einen colon+space getrennt.

---# verwenden Ausgezackte Blöcke, die in YAML Datendateien üblich sind, Einrückung und neue Linien, um den Schlüssel zu trennen: Schätzen Sie Paare

Name: John Smith

Alter: 33

---# verwenden Reihenblöcke, die in YAML Datenströmen üblich sind, Kommas, um den Schlüssel zu trennen: Schätzen Sie Paare zwischen geschweiften Klammern

{Name: John Smith, Alter: 33 }\

</syntaxhighlight>

Block-Druckfehler

Schnuren verlangen Kostenvoranschlag nicht.

Newlines bewahrt

---|

Es gab einmal einen Mann von Darjeeling

Wer in einen Bus eingestiegen ist, der für Ealing gebunden ist

Es hat auf der Tür gesagt

"Spucken Sie bitte auf dem Fußboden" nicht

So hat er sorgfältig auf der Decke gespuckt

</syntaxhighlight>

Standardmäßig wird der Haupteinzug (der ersten Linie) und das Schleppen des Leerraums abgezogen, obwohl anderes Verhalten ausführlich angegeben werden kann.

Newlines hat sich gefaltet

--->

Gewickelter Text

wird gefaltet

in einen einzelnen

Paragraf

Leere Linien zeigen an

Paragraf bricht

</syntaxhighlight>

Gefalteter Text wandelt newlines zu Räumen um und entfernt Führung whitespace.

Hierarchische Kombinationen von Elementen

Listen der assoziativen Reihe

- {Name: John Smith, Alter: 33 }\

- Name: Mary Smith

Alter: 27

</syntaxhighlight>
Assoziative Reihe von Listen

Männer: [John Smith, Bill Jones]

Frauen:

- Mary Smith

- Susan Williams

</syntaxhighlight>

Fortgeschrittene Bestandteile von YAML

Zwei Eigenschaften, die YAML von den Fähigkeiten zu anderen Datenanordnungssprachen unterscheiden, sind das Verwandtschaftsbaum- und Datenschreiben.

Verwandtschaftsbäume

Für die Klarheit, die Kompaktheit und das Vermeiden von Datenzugang-Fehlern, stellt YAML Knotenanker (&) und Verweisungen (*) zur Verfügung. Bezugszweig der Baum zum Anker und der Arbeit für alle Datentypen (sieh das Schiff - zur Verweisung im Beispiel oben).

Unten ist ein Beispiel einer Warteschlange in einer Instrument-Ablaufsteuerung, in der zwei Schritte wiederholt wiederverwendet werden, ohne jedes Mal völlig beschrieben zu werden.

- -

- Schritt: &id001 # definiert Ankeretikett

&id001

Instrument: Lasik 2000

pulseEnergy: 5.4

pulseDuration: 12

Wiederholung: 1000

spotSize: 1 Mm

- Schritt:

&id002 Instrument: Lasik 2000

pulseEnergy: 5.0

pulseDuration: 10

Wiederholung: 500

spotSize: 2 Mm

- Schritt: *id001 # bezieht sich auf den ersten Schritt (mit dem Anker &id001)

- Schritt: *id002 # bezieht sich auf den zweiten Schritt

- Schritt: *id001

- Schritt: *id002

</syntaxhighlight>

Datentypen

Das ausführliche Datenschreiben wird selten in der Mehrheit von YAML Dokumenten gesehen, da YAML einfache Typen autoentdeckt. Datentypen können in drei Kategorien geteilt werden: Kern, definiert und benutzerbestimmt. Kern ist, die angenommen sind, in jedem parser (z.B Hin- und Herbewegungen, ints, Schnuren, Listen, Karten...) zu bestehen. Viele fortgeschrittenere Datentypen, wie binäre Daten, werden in der YAML Spezifizierung definiert, aber in allen Durchführungen nicht unterstützt. Schließlich definiert YAML eine Weise, die Datentyp-Definitionen lokal zu erweitern, um benutzerbestimmte Klassen, Strukturen oder Primitive (z.B Viererkabelpräzisionshin- und Herbewegungen) anzupassen.

Gussteil von Datentypen

YAML autoentdeckt den datatype der Entität. Manchmal will man den datatype ausführlich werfen. Die allgemeinste Situation ist eine einzelne Wortschnur, die wie eine Zahl, boolean aussieht oder Anhängsel Begriffserklärung durch die Umgebung davon mit Notierungen oder Gebrauch eines ausführlichen datatype Anhängsels brauchen kann.

a: 123 # eine ganze Zahl

b: "123" # eine Schnur, die durch Notierungen disambiguiert ist

c: 123.0 # eine Hin- und Herbewegung

d:!! schwimmen Sie 123 # auch eine Hin- und Herbewegung über den ausführlichen Datentyp, der dadurch vorbefestigt ist (!!)

e:!! str 123 # eine Schnur, die durch den ausführlichen Typ disambiguiert ist

f:!! str Ja # eine Schnur über den ausführlichen Typ

g: Ja # ein boolean Wahrer

h: Ja haben wir Keine Bananen # eine Schnur, "Ja" und durch den Zusammenhang disambiguierter "Nein". </syntaxhighlight>

Andere angegebene Datentypen

Nicht jede Durchführung von YAML hat jeden Spezifizierungsdefinierten Datentyp. Diese eingebauten Typen verwenden einen doppelten Ausruf sigil Präfix . Besonders interessante nicht gezeigt hier sind Sätze, bestellte Karten, Zeitstempel und hexadecimal. Hier ist ein Beispiel von verschlüsselten binären Daten von base64.

- -

Bild:!! binär |

R0lGODlhDAAMAIQAAP//9/X

17unp5WZmZgAAAOfn515eXv

Pz7Y6OjuDg4J+fn5OTk6enp

56enmleECcgggoBADs=mZmE

</syntaxhighlight>
Erweiterung für benutzerbestimmte Datentypen

Viele Durchführungen von YAML können benutzerbestimmte Datentypen unterstützen. Das ist eine gute Weise, einen Gegenstand in Fortsetzungen zu veröffentlichen. Lokale Datentypen sind nicht universale Datentypen, aber werden in der Anwendung mit dem YAML parser Bibliothek definiert. Lokale Datentypen verwenden ein einzelnes Ausrufungszeichen .

- -

myObject:! myClass {Name: Joe, Alter: 15 }\

</syntaxhighlight>

Syntax

Ein Kompaktpfuschzettel (wirklich geschrieben in YAML) sowie eine volle Spezifizierung ist an der YAML Website verfügbar. Der folgende ist eine Synopse der Grundelemente.

  • YAML Ströme werden mit dem Satz von druckfähigen Charakteren von Unicode, entweder in UTF-8 oder in UTF-16 verschlüsselt.
  • Einrückung von Whitespace wird verwendet, um Struktur anzuzeigen; jedoch wird Etikett-Charakteren als Einrückung nie erlaubt.
  • Anmerkungen beginnen mit dem Zahl-Zeichen (#), können überall auf einer Linie anfangen, und bis zum Ende der Linie weitergehen.
  • Listenmitglieder werden durch einen Hauptbindestrich mit einem Mitglied pro Linie angezeigt, oder in eckigen Klammern eingeschlossen und durch den Komma-Raum getrennt.
  • Assoziative Reihe wird mit dem Doppelpunkt-Raum im Form-Schlüssel vertreten: Wert, entweder ein pro Linie oder eingeschlossen in lockigen geschweiften Klammern und getrennt durch den Komma-Raum.
  • Ein assoziativer Reihe-Schlüssel kann mit einem Fragezeichen (?) vorbefestigt werden, um liberale Mehrwortschlüssel zu berücksichtigen, eindeutig vertreten zu werden.
  • Schnuren (Skalare) sind normalerweise nicht zitiert, aber können in Anführungszeichen ("), oder einzelne Notierungen (') eingeschlossen werden.
  • Innerhalb von Anführungszeichen können spezielle Charaktere mit C-Style-Flucht-Folgen vertreten werden, die mit einem umgekehrten Schrägstrich (\) anfangen. Gemäß der Dokumentation ist die einzige unterstützte Oktalflucht.
  • Block-Skalare werden mit der Einrückung mit fakultativen Modifikatoren abgegrenzt um oder Falte (>) newlines zu bewahren.
  • Vielfache Dokumente innerhalb eines einzelnen Stroms werden durch drei Bindestriche getrennt.
  • drei Perioden beenden fakultativ eine Datei innerhalb eines Stroms.
  • Wiederholte Knoten werden durch ein Und-Zeichen am Anfang angezeigt (&) und danach mit einem Sternchen (*) Verweise angebracht.
  • Knoten können mit einem Typ oder Anhängsel mit dem Ausrufezeichen gefolgt von einer Schnur etikettiert werden, die in einen URI ausgebreitet werden kann.
  • YAML Dokumenten in einem Strom kann durch Direktiven vorangegangen werden, die aus einem Prozent-Zeichen von einem Namen gefolgter (%) zusammengesetzt sind, und Raum hat Rahmen abgegrenzt. Zwei Direktiven werden in YAML 1.1 definiert:
  • Die %YAML Direktive wird verwendet, um die Version von YAML in einem gegebenen Dokument zu identifizieren.
  • Die %TAG Direktive wird als eine Abkürzung für URI Präfixe verwendet. Diese Abkürzungen können dann in Knotentyp-Anhängseln verwendet werden.

YAML verlangt, dass Doppelpunkten und als Listenseparatoren verwendeten Kommas von einem Raum gefolgt wird, so dass Skalarwerte, die eingebettete Zeichensetzung (solcher als 5,280 oder http://www.wikipedia.org) enthalten, allgemein vertreten werden können, ohne in Notierungen eingeschlossen werden zu müssen.

Zwei zusätzliche sigil Charaktere werden in YAML für die mögliche zukünftige Standardisierung vorbestellt: am Zeichen und Akzent-Grab (`).

Der Vergleich zu anderer Datenstruktur formatiert Sprachen

Während YAML Ähnlichkeiten mit JSON, XML und SDL teilt, hat es auch Eigenschaften, die im Vergleich mit vielen anderen ähnlichen Format-Sprachen einzigartig sind.

JSON

JSON Syntax ist eine Teilmenge der YAML Version 1.2, die mit dem ausdrücklichen Zweck veröffentlicht wurde, YAML "in den Gehorsam von JSON als eine offizielle Teilmenge zu bringen." Obwohl vorherige Versionen von YAML nicht ausschließlich vereinbar waren, waren die Diskrepanzen selten bemerkenswert, und die meisten JSON Dokumente können durch YAML parsers grammatisch analysiert werden. Das ist, weil die semantische Struktur von JSON zum fakultativen "reihenartigen" davon gleichwertig ist, YAML zu schreiben. Während verlängerte Hierarchien im reihenartigen wie JSON geschrieben werden können, ist das nicht ein empfohlener YAML Stil außer, wenn er Klarheit hilft.

YAML hat viele zusätzliche Eigenschaften, die in JSON, einschließlich ausziehbarer Datentypen, Verwandtschaftsanker, Schnuren ohne Anführungszeichen fehlen, und Typen kartografisch darstellen, die Schlüsselordnung bewahren.

XML und SDL

YAML hat am Begriff von Anhängsel-Attributen Mangel, die in XML und SDL (Einfache Aussagesprache) gefunden werden. Für die Datenstruktur-Anordnung sind Anhängsel-Attribute, wohl, eine Eigenschaft des zweifelhaften Dienstprogrammes, da die Trennung von Daten und Meta-Daten Kompliziertheit, wenn vertreten, durch die natürlichen Datenstrukturen (assoziative Reihe, Listen) auf gemeinsamen Sprachen hinzufügt. Stattdessen hat YAML ausziehbare Typ-Behauptungen (einschließlich Klassentypen für Gegenstände).

YAML selbst hat die sprachdefinierten Dokumentendiagramm-Deskriptoren von XML nicht, die zum Beispiel erlauben, ein Dokument zu selbst machen gültig. Jedoch gibt es mehrere äußerlich definierte Diagramm-Deskriptor-Sprachen für YAML (z.B Doktrin, Kwalify und Rx), die diese Rolle erfüllen. Außerdem entspannt die Semantik, die durch die sprachdefinierten Typ-Behauptungen von YAML im YAML Dokument selbst oft zur Verfügung gestellt ist, das Bedürfnis nach einem validator in einfachen, allgemeinen Situationen. Zusätzlich erlaubt YAXML, der YAML Datenstrukturen in XML vertritt, XML Diagramm-Einfuhrhändlern und Produktionsmechanismen wie XSLT, auf YAML angewandt zu werden.

Das ausgezackte Abgrenzen

Weil sich YAML in erster Linie auf die Umriss-Einrückung für die Struktur verlässt, ist es gegen die Begrenzungszeichen-Kollision besonders widerstandsfähig. Die Gefühllosigkeit von YAML zu Notierungen und geschweiften Klammern in Skalarwerten bedeutet, dass man XML, SDL, JSON oder sogar YAML Dokumente innerhalb eines YAML Dokumentes einbetten kann, indem man sie einfach in einem wörtlichen Block eindrückt:

Beispiel:>

HTML tritt in YAML modifikationsfreien ein

Nachricht: |

zwei, sogar für große Werte von zwei" </i>

</p> </Schriftart>

Datum: Am 2007-06-01 </syntaxhighlight>

YAML kann in JSON und SDL durch den Bezug und das Entgehen allen Innennotierungen gelegt werden. YAML kann in XML durch das Entgehen vorbestellten Charakteren gelegt werden


Trevor Pinnock / Jeolla
Impressum & Datenschutz