理由—(3つのダッシュ/ハイフン)yamlファイル内?


116

それで、私はより読みやすいので、YAML代わりにファイルを使い始めましたapplication.propertiesYAML彼らがで始まるファイルを見る---。私はググって、以下の説明を見つけました。

YAMLは3つのダッシュ(「---」)を使用して、ディレクティブをドキュメントコンテンツから分離します。これは、ディレクティブが存在しない場合にドキュメントの開始を通知するのにも役立ちます。

また、サンプルを使用せずに試してみました---が、必須ではないことを理解しました。

私は私がの明確な理解を持っていないと思うdirectivedocument。誰でも簡単な例で説明できますか?


3
YAML仕様を確認しましたか?ディレクティブまたはドキュメントが何であるかをほとんど説明します。申し訳ありませんが、これは私の本のidownvotedbecau.se/noresearchに該当します。
lexicore

19
@lexicore例を試す前にドキュメントを確認しました。しかし、明確な理解は得られなかったので、誰かが説明すればもっとよく理解できると思いました。それが非常に基本的に表示された場合は申し訳ありませんが、参考までに、私は初心者です。
Andy

回答:


66

ご存知の---とおり、3つのダッシュはドキュメントの開始示すために使用されます

  1. 文書の開始を通知するためのディレクティブの後、すなわち、%YAMLまたは%TAG現在の仕様に応じたライン。例えば:

    %YAML 1.2
    %TAG !foo! !foo-types/
    ---
    myKey: myValue
    
  2. yamlファイルなど、同じストリーム複数のyamlドキュメントがある場合にドキュメントの開始を通知するには:

    doc 1
    ---
    doc 2
    

    doc 2に先行するディレクティブがいくつかある場合...は、3つのドットを使用して、doc 1の終わり(およびdoc 2に先行する潜在的なディレクティブの始まり)をパーサーに示す必要があります。例えば:

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

仕様は、yamlパーサーの実装者に適しています。ただし、この記事はユーザーの観点から読む方が簡単だと思います。


YAML 1.2仕様のプロダクションルール211を読んで、次のドキュメントにディレクティブがあってもdocument-end-indicatorを必要としないようにします。その場合に必要なのは、end- of-directivesインジケーター(の先頭l-explicit-document)。
Anthon

3つのドットの使用に関する私の理解は、仕様のこの文に基づいています。「ドキュメントがドキュメントの終了マーカー行で終了しない場合、次のドキュメントはディレクティブの終了マーカー行で開始する必要があります。」 ドキュメントの開始を要求するディレクティブの終了マーカー---は、そのドキュメントにディレクティブを許可しないことを意味します。したがって、ドキュメント2にディレクティブがある場合、ドキュメント1はドキュメントの終了マーカーで終了する必要があります...
Yi Ou

実際、l-explicit-document定義は、そのためのディレクティブを禁止しています。「明示的なドキュメントは、明示的なディレクティブで始まり、マーカー行は終わりますが、ディレクティブはありません。」
Yi Ou

ルール211はl-explicit-documentの外部にディレクティブを明示的に持っています、そしてあなたのテキストの引用がそれとさえ矛盾するかどうかはわかりません。いずれの場合でも、Python YAMLパーサーはその方法で実装します(つまり、次のドキュメントディレクティブの前に明示的なドキュメント終了インジケーターを必要としません)。
Anthon 2018

ルール211で先行するディレクティブが許可されていないようl-explicit-documentです。式にl-document-prefix*ディレクティブが含まれていません。私はPython Yamlパーサーに精通していませんが、興味深い質問は、ディレクティブの前にドットが付いていない場合、ディレクティブが黙ってスキップされるかどうかです。
Yi Ou

55

YAMLディレクティブで始めない場合は必須ではありません。その場合は、それらを使用する必要があります。

ドキュメントを見てみましょう

3.2.3.4。ディレクティブ

各ドキュメントは一連のディレクティブに関連付けることができます。ディレクティブには、名前とオプションのパラメーターのシーケンスがあります。ディレクティブはYAMLプロセッサへの指示であり、他のすべてのプレゼンテーションの詳細と同様に、YAMLシリアル化ツリーまたは表現グラフには反映されません。このバージョンのYAMLでは、「YAML」と「TAG」という2つのディレクティブが定義されています。他のすべてのディレクティブは、YAMLの将来のバージョン用に予約されています。

この1つの例は、ディレクティブのドキュメントにも記載されています。YAML

%YAML 1.2 # Attempt parsing
           # with a warning
---
"foo"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.