プロファイルの選択--YAMLはなぜ使用しますか?

2588 ワード

开宗明義:YAMLは良いフォーマットです!
コンフィギュレーションファイルとして、YAMLは人の目の読み取りと編集に最も友好的であるべきで、もちろん拡張性は、JSONより少し悪くて、XMLに及ばないが、捨てられるかどうか、一般的には十分だ.
メリット
直接例を挙げて、比較効果を見ればわかります.
JSON
同じセットの配置は、JSONでこのように書かれています.
{
  "id": 100,
  "name": "    ",
  "version": "3.1",
  "steps": [
    {
      "id": 18,
      "action": "Prepare",
      "expects": [
        {
          "id": 238,
          "result": "GOOD"
        },
        {
          "id": 239,
          "result": "PERFECT"
        }
      ]
    }
  ]
}

フォーマットしても読みやすさはいいですが、編集するのに苦労します.これはまだ3層のネストにすぎず、括弧の位置合わせはちょっと怖いです.
XML
XMLで表すと、もっと複雑になります.次のように、文法がハイライトされていない場合、読むのは人にとって苦痛です.


    100: 100
        
    3.1
    
        
            18,
            Prepare,
            
                
                    238
                    GOOD
                
                
                    239
                    PERFECT
                
            
        
    

このコードを手で叩くには、さまざまなラベルが閉じられていない、ネストされたレベルが混乱しているなど、エラーが発生しやすいです.(リモートでサーバにログインし、VIMやNanoで開く様子を想像してみてください).
YAML
YAMLが来ると、世界は一気に爽やかになりました.
id: 100
name: "    "
version: "3.1"
steps:
  - id: 18
    action: "Prepare"
    expects:
      - id: 238,
        result: GOOD
      - id: 239,
        result: PERFECT

この上なく簡潔ではないでしょうか.文字数だけでも、JSONはYAMLより75%も多く、XMLは320%も多い!その理由は、主にYAMLが人に優しいreturnとtabをデータ区切り記号として直接使用しているため、編集はMarkdownドキュメントとほとんど差がなく、プログラマー福祉と言えるでしょう.
欠点
もちろん世の中には銀弾はなく、YAMLにも固有の欠点がある.
  • は最初に述べたように、拡張性が悪い--この点でXMLの優位性は明らかで、各ラベルにはattributeがあり、例のdatatypeのように「メタデータ」を任意に定義することができ、これはYAMLとJSONの共通の弱点である.必要であれば、メタデータもデータ・アイテムに格納し、特殊な文字接頭辞で識別するしかありません(Pythonオブジェクトの__dict_)
  • 次にフォーマットに対する要求が厳しく、「コンパクト」な形で表現できません.例えば、人が読む必要がないときは、JSON列を1行に圧縮して、できるだけすべてのスペースを除去することができます.このYAMLは明らかにできません.
  • また、さまざまな言語では、YAMLのサポートが未熟であり、特にシーケンス化/逆シーケンス化部分では、既存のライブラリが不便です.

  • 結論
    サードパーティの拡張性の要件が強い場合、YAMLはプロファイルの最適なオプションです.もちろん、そのための代価は、最初から手書きで少しずつシーケンス化/逆シーケンス化コードを書く必要があることです.