プロファイルの選択--YAMLはなぜ使用しますか?
2588 ワード
开宗明義:YAMLは良いフォーマットです!
コンフィギュレーションファイルとして、YAMLは人の目の読み取りと編集に最も友好的であるべきで、もちろん拡張性は、JSONより少し悪くて、XMLに及ばないが、捨てられるかどうか、一般的には十分だ.
メリット
直接例を挙げて、比較効果を見ればわかります.
JSON
同じセットの配置は、JSONでこのように書かれています.
フォーマットしても読みやすさはいいですが、編集するのに苦労します.これはまだ3層のネストにすぎず、括弧の位置合わせはちょっと怖いです.
XML
XMLで表すと、もっと複雑になります.次のように、文法がハイライトされていない場合、読むのは人にとって苦痛です.
このコードを手で叩くには、さまざまなラベルが閉じられていない、ネストされたレベルが混乱しているなど、エラーが発生しやすいです.(リモートでサーバにログインし、VIMやNanoで開く様子を想像してみてください).
YAML
YAMLが来ると、世界は一気に爽やかになりました.
この上なく簡潔ではないでしょうか.文字数だけでも、JSONはYAMLより75%も多く、XMLは320%も多い!その理由は、主にYAMLが人に優しいreturnとtabをデータ区切り記号として直接使用しているため、編集はMarkdownドキュメントとほとんど差がなく、プログラマー福祉と言えるでしょう.
欠点
もちろん世の中には銀弾はなく、YAMLにも固有の欠点がある.は最初に述べたように、拡張性が悪い--この点でXMLの優位性は明らかで、各ラベルにはattributeがあり、例のdatatypeのように「メタデータ」を任意に定義することができ、これはYAMLとJSONの共通の弱点である.必要であれば、メタデータもデータ・アイテムに格納し、特殊な文字接頭辞で識別するしかありません(Pythonオブジェクトの__dict_) 次にフォーマットに対する要求が厳しく、「コンパクト」な形で表現できません.例えば、人が読む必要がないときは、JSON列を1行に圧縮して、できるだけすべてのスペースを除去することができます.このYAMLは明らかにできません. また、さまざまな言語では、YAMLのサポートが未熟であり、特にシーケンス化/逆シーケンス化部分では、既存のライブラリが不便です.
結論
サードパーティの拡張性の要件が強い場合、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にも固有の欠点がある.
結論
サードパーティの拡張性の要件が強い場合、YAMLはプロファイルの最適なオプションです.もちろん、そのための代価は、最初から手書きで少しずつシーケンス化/逆シーケンス化コードを書く必要があることです.