XMLとJSONの違いについて疑問に思っています。
既存の処理ツールやバックエンドシステムを考慮せず、単にデータを表現する手段として、JSONがXMLよりも優れている、またはその逆はありますか?または、両方を同じ程度に使用できますか?
つまりXMLで表現できない、またはその逆でJSONで表現できるものはありますか?
XMLとJSONはどちらも同じデータを送信できますが、どちらを使用するかによりますが、どちらを使用するかは、ほとんどの場合異なります。
これは既存のツールに影響を与えますが、どちらも手動でローリングするパーサーではない可能性が高いため、関連性があります。
[〜#〜] xml [〜#〜]
[〜#〜] json [〜#〜]
1つは他に格納できるすべてのものを格納できるため、使いやすさとツールは、それらの使用方法を比較するのに役立つ唯一の基準です。
If消去されたものすべて、おそらくどちらも使用せず、データをLISPのチャンクとして送信します。
これは、JSONよりもかろうじて(かろうじて)、XMLよりもはるかに簡単に変換でき、どちらの場合よりもパーサーを簡単に作成できます(すべてのツールがなくなった場合に行う必要があります)。
XMLはeXtensible Markup Languageです。それは理解することが重要です:それは本質的にHTML(ドキュメントマークアップ言語)のように設計されていますが、もう少し形式化されています。問題は、ドキュメントのマークアップが誰もが使用するものではないことです。データストレージとデータ交換のために人々が悪用しますが、データストレージはドキュメントマークアップのようなものではないため、これは非常に悪い考えです。
一般的なHTMLドキュメントのコンテンツ対マークアップ比率はかなり高くなっています。たとえば、たまに<p>
を超えて単一のタグを挿入する必要なく、ページ全体を書き込むことは十分に可能です。しかし、データストレージでは、すべてのデータ要素を何らかの正式な方法で定義する必要があります。 XMLを使用すると、すべてが非常にすばやくタグのスープの混乱に変わります。例えば:
一部の人々は、問題が発生したときに「わかっている、XMLを使用する」と考えています。
<Problem:Worsening> <Problem:TimeDescription>Now</Problem:TimeDescription> <Problem:Posessive>they have</Problem:Posessive> <Problem:Quantity>many, many</Problem:Quantity> <Problem:WorseningDescription>more problems</Problem:WorseningDescription> </Problem:Worsening>
コンテンツが非常に簡単に非常に簡単に終了し、すべてのタグによって完全に溺死することがわかります。 (これは、XMLがきれいに印刷されている場合でも同じです。)
また、XMLでは、すべての<tag>
を対応する</tag>
で閉じる必要があります。また、タグを厳密なLIFO(つまり、スタック)の順序で閉じる必要があります。これは冗長です。閉じるのに有効な唯一のタグが、まだ閉じていない最後のタグである場合、理論的には、すべての終了タグを単純な</>
にして、セマンティック情報を失わないようにすることができます(きれいに印刷しなかったとしても、きれいに印刷されていないXMLを読み込もうとする人は難しいでしょう)とにかく?)これにより、XMLファイルが必要以上に大きく、かさばります。
XML DOMモデルも非常に複雑です。手始めに、ノードのサブデータを表す方法は2つあります。開始タグとその終了タグの間のノードと、開始タグ内の属性です。繰り返しになりますが、これはドキュメントマークアップ(<a href="http://example.com">
)で大いに意味のあるアイデアですが、データストレージでははるかに少なくなります。次に、名前空間、スキーマと検証、XSLTなど、あらゆる種類の追加の複雑さがあります...
XMLとJSONの主な違いは、JSONが単なるデータストレージ形式であることです。ドキュメントのマークアップではなく、シリアル化されたデータを表現するために最適化されているため、シリアル化されたデータを表現するのにはるかに優れています。ダグラス・クロックフォードはそれを "XMLの無脂肪の代替物"と呼んでいます。
本当に興味深いのは、実際に電力を失うことなくこれを行うことができることです。スキーマと検証が必要ですか? JSONスキーマを使用します。クエリ?そのためのJSONPathがあります。 (一方で、これらのことを気にしない場合は、プログラムを膨らませるためのコードは必要ありません。)コメントや名前空間、さらには属性が必要ですか? {"namespace": "MyNamespace", "attributes": {"attrib1": "value1", "attrib2": "value2"}, "data": "Insert content here", "comment": "It's that simple"}
元の質問に答えるには、どちらのシステムでも表現できるデータはありませんが、他のシステムでは表現できません。 JSONはデータストレージ用に特別に設計されており、XMLはそうではないため、JSONではほとんど常に小さくてすっきりしています。 「仕事に適したツールを使用する」という単純な問題です。
少しリンゴとオレンジです。どちらも同じタスクで使用されますが、明らかに異なります。
XMLはExtensible Markup Languageです。これの主な利点は、メタデータを保持できることです。要するに:
<tag attribute="something">data</tag>
したがって、要素に属性を設定すると、より明示的にすることができます。
さらに、定義した構造のルールを適用する定義済みスキーマを使用できます。たとえば特定の要素は特定の属性を使用する場合がありますが、他の要素がそれを使用しようとすると、スキーマ検証によりエラーが発生します。
これは大きな力を与えます。しかし、大きな力には大きな責任が伴います。多くの場合、これらのXMLは、それ自体が持つデータよりも構造と関係を表しています。したがって、人間が持っている追加情報がすべてあるため、人間にとって読みにくくなります。したがって、一部の操作では、5行のデータを保存する必要があるため、より多くの膨張を引き起こしますが、スキーマを満たす必要があるため、20行以上のxmlを保持します。
ウィキペディアにはかなり良い要約があります: https://en.wikipedia.org/wiki/XML
一方、JSONはデータを表すことだけを目的としており、それ以上のものはありません。主なタイプのデータを取得します。
それでおしまい。あなたは好きな方法でそれらを入れ子にすることができますが、それはあなたの制限です。これらのデータ型のみを使用します。詳細: http://www.json.org/
確かに、属性をディクショナリ内の独自の配列などに移動でき、ほとんど同じことを達成できます。そのため、この比較が頻繁に行われている理由が言及されています。しかし、その中心にあるのは、用途の異なる2つのツールです。ハンマーを手にしたとき、すべてが釘になります。
XMLは、複雑な構造、オブジェクト間の関係、あるファイルを別のファイルでオーバーライドする場合(XPathについて言及した別の回答で処理される場合)に最適です。
JSONは、独自の検証をコードで実行できる小さなオブジェクトと通信する必要がある場合に最適です。また、人間が読める形式で、非常にシンプルです。
Jsonは、データとデータのみを含むオブジェクトのテキスト表現であり、それ以外を持っています。 elseを含めたいとしばしば思っていました(ただし、JavaScriptオブジェクトのシリアル化されたテキスト表現であるという完全に有効な設計上の決定ではありません)。
ただし、XMLデータの操作を開始すると、次のようになります。
したがって、そうです、データのどの部分もJSONまたはXMLのいずれかとしてシリアル化できます。十分な労力で回避できないEdgeのケースはありません。それは、対処したい種類の頭痛の種に依存します。 IMHO、JSONを使用すると、コミュニケーション、ドキュメント、プロジェクト管理がうまくいかずに足を踏み入れたほうが簡単ですが、XMLを使用すると、足元で自分を撃ちたくなります。