ユースケースは、テキスト形式の複雑なオブジェクトグラフの長期シリアル化です。
4 に答える
簡潔な答え
人間がドキュメント (構成ファイル、レポートなど) を作成/読み取ることが予想される場合は、YAML を検討できます。それ以外の場合は、XML (マシン間通信用) を選択します。
長い答え
長さ
XML と YAML はどちらもほぼ同じです。優れた XML ライブラリはすべての空白をスキップできますが、YAML では必須です。複雑な YAML には多くのインデント スペースが含まれています (タブを使用しないでください!)
ネットワーク障害
多くの場合、YAML ドキュメントの一部は有効なドキュメントであるため、YAML ドキュメントが不完全な場合、それを自動的に検出する方法はありません。XML パーサーは、ドキュメントが少なくとも整形式であるかどうかを常にチェックし、スキーマに対する有効性を自動的にチェックできます。
言語サポート
多くの主要なプログラミング言語は、YAMLと XML の両方をサポートしています。
一般知識
XML とは何かを開発者 (経験の浅い人でも) に説明する必要はありません。YAML はまだそれほど広く使用されていません。
スキーマ
XML を使用すると、プロデューサーとコンシューマーの両方がスキーマに同意して、信頼できるデータ交換形式を確立できます。
構文
XML は非常に豊富です: 名前空間、エンティティ、属性。
外部依存関係
Java と Python は、標準ライブラリで XML をサポートしています。YAML には、これらの言語の外部依存関係が必要です。
成熟
XML 仕様は古く、堅実です。一方、YAML はまだ作成中です。YAML 1.1 には矛盾があります (誤りのリストを管理するwikiさえあります)。
XSLT
XML ドキュメントを別の形式 (XML、HTML、YAML、PDF) に変換する必要がある場合は、XSLT を使用できますが、YAML の場合はプログラムを作成する必要があります。
私は同意します: YAML はより読みやすく、たとえば dev-read/writable 構成ファイルに適しているようです。しかし、マシン間通信にはほとんどメリットがありません。また、テキスト マークアップ (xhtml や docbook などの xml の伝統的な強み) については、xml の方が優れています。
特にオブジェクトのシリアル化に関しては、YAML を使用する正当な理由が思いつきません。
実際、代わりに JSON を検討することをお勧めします。これは、階層 (xml) モデルやリレーショナル (SQL) モデルではなく、オブジェクト (または、動作がないため構造体) モデルに基づいています。このため、オブジェクト データにはもう少し自然に適合します。しかし、XML も問題なく機能し、優れたツールがたくさんあります。
最後に、「長期」と「オブジェクトのシリアル化」という用語は混同しません。後者は密接な結合を意味します。オブジェクトが変更されると、シリアル化も変更されます。実際のオブジェクトのシリアル化は、データの保存には使用しないでください。データ バインディング/マッピングの方が適切です。しかし、「便利なオブジェクトラッパーを使用してデータを保存/復元する」という意味でシリアライゼーションを使用している可能性があります。もしそうなら、それは結構です。
YAML を使用する場合は、ネットワークを通過するバイト数がわずかに少なくなる可能性があります。重要であるとは思えませんが、状況によっては関連する可能性があります。また、YAML はテキスト エディターで読みやすく、操作しやすいと思いますが、それは主観的なものであり、これが通常の使用シナリオでない場合は問題になりません。
帯域幅が問題ではなく、テキスト エディターで YAML/XML を頻繁に使用しない場合は、どちらを使用してもかまわないと思います。