warum - (3 Bindestriche / Bindestrich) in der Yaml-Datei?

116

Also habe ich gerade angefangen, YAMLDateien zu verwenden, anstatt application.propertiessie besser lesen zu können. Ich sehe in YAMLDateien, mit denen sie beginnen ---. Ich googelte und fand die folgende Erklärung.

YAML verwendet drei Bindestriche ("---"), um Anweisungen vom Dokumentinhalt zu trennen. Dies dient auch dazu, den Beginn eines Dokuments zu signalisieren, wenn keine Anweisungen vorhanden sind.

Außerdem habe ich eine Probe ohne ausprobiert ---und verstanden, dass es nicht zwingend erforderlich ist, sie zu haben.

Ich glaube, ich habe kein klares Verständnis von directiveund document. Kann jemand bitte mit einem einfachen Beispiel erklären?

Andy
quelle
3
Haben Sie die YAML-Spezifikation überprüft? Es beschreibt ziemlich genau, was eine Richtlinie oder ein Dokument ist. Entschuldigung, dies qualifiziert für idownvotedbecau.se/noresearch in meinem Buch.
Lexicore
18
@lexicore Ich habe die Dokumente überprüft, bevor ich ein Beispiel ausprobiert habe. Aber ich bekam kein klares Verständnis und dachte, ich würde es besser verstehen, wenn jemand es erklären würde. Es tut mir leid, wenn es sehr einfach erschien. Zu Ihrer Information, ich bin nur ein Anfänger.
Andy

Antworten:

65

Wie Sie bereits herausgefunden haben, werden die drei Striche ---verwendet, um den Start eines Dokuments zu signalisieren , dh:

  1. Um das Dokument zu signalisieren, starten Sie nach Anweisungen , dh %YAMLoder %TAGZeilen gemäß der aktuellen Spezifikation. Beispielsweise:

    %YAML 1.2
    %TAG !foo! !foo-types/
    ---
    myKey: myValue
    
  2. So signalisieren Sie den Start des Dokuments, wenn sich mehrere Yaml-Dokumente im selben Stream befinden , z. B. eine Yaml-Datei:

    doc 1
    ---
    doc 2
    

    Wenn Dokument 2 einige vorhergehende Anweisungen hat, müssen wir ...dem Parser drei Punkte verwenden , um das Ende von Dokument 1 (und den Beginn potenzieller Anweisungen vor Dokument 2) anzuzeigen. Beispielsweise:

    doc 1
    ...
    %TAG !bar! !bar-types/
    ---
    doc 2
    

Die Spezifikation ist gut für Yaml-Parser-Implementierer. Ich finde diesen Artikel jedoch aus Anwendersicht leichter zu lesen.

Yi Ou
quelle
Ich habe die Produktionsregel 211 in der YAML 1.2-Spezifikation so gelesen, dass Sie keinen Dokument-End-Indikator benötigen, selbst wenn Sie Anweisungen im folgenden Dokument haben. In diesem Fall ist nur erforderlich, dass Sie ein Ende haben. of-directives-Indikator (am Anfang des l-explicit-document).
Anthon
Mein Verständnis der Verwendung von drei Punkten basiert auf diesem Satz der Spezifikation : "Wenn ein Dokument nicht durch eine Dokumentendmarkierungszeile abgeschlossen wird, muss das folgende Dokument mit einer Endmarkierungszeile für Anweisungen beginnen." Zunächst muss ein Dokument erstellt werden Die Direktiven-Endmarkierung ---würde bedeuten, dass für dieses Dokument keine Direktiven zulässig sind. Wenn also Dokument 2 Anweisungen hat, muss Dokument 1 mit der Dokumentendmarkierung abgeschlossen werden ....
Yi Ou
Tatsächlich verbietet die Definition von l-explizitem Dokument Direktiven dafür: "Ein explizites Dokument beginnt mit einer expliziten Direktiven-Endmarkierungszeile, aber keinen Direktiven."
Yi Ou
Regel 211 enthält ausdrücklich die Richtlinien außerhalb des l-expliziten Dokuments, und ich bin mir nicht sicher, ob Ihr Zitat des Textes dem überhaupt widerspricht. In jedem Fall implementieren die Python YAML-Parser dies auf diese Weise (dh Sie benötigen vor den nächsten Dokumentenanweisungen keinen expliziten Indikator für das Ende des Dokuments).
Anthon
Ich sehe nicht, dass Regel 211 vorhergehende Richtlinien zulässt l-explicit-document. Der Ausdruck l-document-prefix*enthält keine Anweisungen. Ich bin mit dem Python Yaml-Parser nicht vertraut, aber eine interessante Frage wäre, ob er die Anweisungen nur stillschweigend überspringt, wenn ihnen nicht die Punkte vorangestellt sind.
Yi Ou
55

Es ist nicht obligatorisch, sie zu haben, wenn Sie nicht YAMLmit einer Richtlinie beginnen. Wenn dies der Fall ist, sollten Sie sie verwenden.

Werfen wir einen Blick auf die Dokumentation

3.2.3.4. Richtlinien

Jedes Dokument kann einer Reihe von Anweisungen zugeordnet sein. Eine Direktive hat einen Namen und eine optionale Folge von Parametern. Anweisungen sind Anweisungen an den YAML-Prozessor und werden wie alle anderen Präsentationsdetails nicht im YAML-Serialisierungsbaum oder im Darstellungsdiagramm wiedergegeben . Diese Version von YAML definiert zwei Anweisungen, "YAML" und "TAG". Alle anderen Anweisungen sind für zukünftige Versionen von YAML reserviert.

Ein Beispiel hierfür finden Sie auch in der Dokumentation zur RichtlinieYAML

%YAML 1.2 # Attempt parsing
           # with a warning
---
"foo"
Yassin Hajaj
quelle