XMLをJSONで完全に置き換えることはできますか?[閉まっている]


78

多くの開発者がXMLJSONに精通していると確信しており、彼らは両方を使用しています。したがって、彼らが何であり、彼らの目的が何であるかを簡単に説明しても意味がありません。

それらの概念をマップしようとすると、言うことができます(私が間違っている場合は修正してください):

  1. XMLタグはJSONと同等です {}
  2. XML属性はJSONプロパティと同等です
  3. XMLタグコレクションはJSONと同等です []

私が考えることができる唯一のものは、JSONには存在しませんが、XML Namespacesです。

問題は、このマッピングを考慮し、JSONがこのマッピングで非常に軽いことを考えると、XMLなしで将来(または少なくとも理論的には世界を考える)の世界を見ることができますが、JSONでXMLのすべてを実行できますか?XMLが使用されるすべての場所でJSONを使用できますか?

PS:この質問を見たことがあることに注意してください。これは私がここで尋ねているものとはまったく異なるものです。したがって、重複を言及しないでください。


14
明らかに、過剰に肥大化した不適切に設計されたものをすべてS式で置き換えることができます(また、そうすべきです)。XMLのない世界は確かにはるかに良い場所ですが、残念なことに、それは希望的観測に過ぎません。
SKロジック

19
あー これらの質問は嫌いです。これはジョブに適切なツールを使用するための実際のケースであり、別のツールを完全に置き換えることができるかどうかではありません。コンピューターを使用しても、世界には絶対的なものはほとんどありません。少なくともそれぞれの技術が現在存在する場合、JSONで行うことを想像することはできませんでした。
フィリップレーガン

2
@フィリップ、これは何かを破壊するための質問ではありません。JSONに欠けているものを確認しようとするだけなので、JSONを改善できます。:)
サイードネアマティ

4
改善を行うことができる場所を確認するための2つの技術の違いに関する議論は、一方を他方に置き換えることができるかどうかを尋ねることとは大きく異なります。前者は後者よりも学術的なレビューであり、何よりも欲求不満から拮抗しているように聞こえます
フィリップレーガン

12
これは仮説ではありません。JSONには、XMLが備えている機能が欠けているようです。
-S.ロット

回答:


153

XMLに力と複雑さの多くを与えるのは、混合コンテンツです。このようなもの:

<p>A <b>fine</b> mess we're in!</p>

JSONでそれをしようとしたり、従来のプログラミング言語で操作したりしないでください。彼らは仕事のために設計されていませんでした。

この種の質問は通常、XMLのMがマークアップを表していることを忘れている人々から寄せられます。これは、プレーンテキストを取得し、マークアップを追加して構造化テキストを作成する方法です。昔ながらのデータにも非常に便利ですが、それが設計されたものではなく、その主な強みがあるところでもありません。単純なデータを処理する方法はたくさんあり、JSONもその1つです。


33
+1:これは際立った機能です。素晴らしい点。
-S.Lott

7
@マイケル、あなたは私に何か貴重なことを教えてくれました。これは素晴らしい答えです。+1。
サイードネアマティ

9
.... P、A B要素、および「混乱」の3つのノードのインディーがあります。これは配列であり、JSONで簡単に説明できます。
シークレット

5
@Robいいえ、しかし、HTMLで表現されたものをより明確に定義でき、JSONを介したより高速な解析を定義できることを説明しています(さまざまなタイプのノードを見つけるために必要なテキストの解析が少なくなるため)。HTMLがJSON-MLである場合、DOM、テキストノード、およびバインディングを実際に理解する開発者がさらにいるかもしれません。
シークレット

5
@ByrneReese:はい、それはXMLで、はい、それは有効です。また、HTMLであることも重要です。実際、XHTMLも有効なXMLです。:-)
Martijn

31

主な違いは、XMLがそのdtdとすべてを説明するように設計されているという事実にあると思います。

JSONでは、受信するデータについて多くのことを想定する必要があります。


7
「XMLは自明であるように設計されています」。これに関するリンクまたは参照を提供できますか?XMLのW3C標準には見当たらず、この概念はどこから来たのだろうかと思っています。明確な設計目標というよりも、都市伝説のようです。
-S.ロット

6
@ S.Lott:それが意味するのは、XMLタグの性質であり、それ自体でタグ付きコンテンツが自明であることを意味します。つまり、DTDはオプションであるため、整形なしのXMLを解析できます。しかし、技術的にはJSONには同じ機能があるため、この問題に対するあなたの意見に同意します。したがって、自己説明が主な違いであるとはまったく思われません(なぜこれが投票され続けるのか分かりません)マイケル・ケイはさらに注目を集めています。
フィリップレーガン

5
@ S.Lottは同意しました。ここで、json.org / example.htmlのJSON は、冗長性がないため、関連するXMLよりも理解しやすく、自己文書化されていると言わざるを得ません。
ダグT.

4
@Michael Borgwardt:完全なXSD(何らかのオントロジーサポートを含む)がなければ、タグ名は何も教えてくれません。「意味のある」ことは一般的に達成するのが難しいです。そのため、答えの中で「自己説明」が何を意味するのかについて、私には不明な点があります。そして、それがXMLの設計目標でさえあったという証拠はありません。
-S.ロット

4
@Philip Regan:「自己説明的なコード」と同様に、XMLの機能ではないようです。それがすべてのソフトウェア言語(コード、データアクセス、マークアップなど)に適用される普遍的な実装目標である場合、おそらく人々はXMLについて具体的に言及すべきではありません。
-S.ロット

21

JSONへのリテラル変換は、多くの場合、簡潔さや明確さの点で劣ります。考慮してください:

<foo>
   <x:bar x:prop1="g">
      <quuz />
   </bar>
</foo>

私がこれまで見た中で最も効果的なJSON表現:

{"localName":"foo",
 "children": // you need to have a special array to hold all children
 [
    {"localName": "bar",
     "namespace": "x"
        // once again, to ensure that there are no collisions,
        // attributes should be brought out into their own JSON structure 
        "attributes":[
            {"localName":"prop1",
             "namespace":"x",
             "value":"g"}
        ],
         "children":[
             {"name":"quux"}
         ]
     }
 ]}

それでは、XMLファイル全体について考えてみましょう。JSONにその場所がないと言っているわけではありませんが、XMLを除外すべきではありません。


8
今SXMLを考える:(foo (x:bar (@ (x:prop1 "g")) (quuz)))
SK-ロジック

2
@ SK-Logic:それは些細な例にとっては素晴らしいことですが、それを使って本のような深くネストされた混合コンテンツを行うことは想像できませんでした。SXMLは、何よりも学術的な課題だと思います。
フィリップレーガン

3
@Philip Regan:S-Expを書くことは、それがより冗長でない形式への些細な1:1変換である場合、シェブロン炎を使用するよりも難しいでしょうか?
maaartinus

@maartinus:私の専門分野は本の出版です。あらゆる種類の教科書は、明示的な管理を必要とする幅広いコンテンツを備えた深く複雑な獣です。DocBookとDITAは、上記の例よりもはるかに読みやすくなっています。
フィリップレーガン

1
@Philip Regan、SXMLは非常に簡単に編集でき、XMLとはまったく異なります。そしてもちろん、利用可能なツールの優位性は言うまでもなく、プロトコルにとってはずっと良い選択です。
SKロジック

14

JSONとXMLはどちらもデータをフォーマットする方法です。どちらも完璧に機能するので、JSONはXMLのすべてを実行できますか?はい。

しかし.....より適切な質問は、XML / JSONは何ができるかではないかもしれませんが、むしろ、あなたは何を行うことができます XML / JSON。

あなたが行うことができますいくつかあります、そのような、XLSTを翻訳したXPathで検索し、スキーマを検証するとして、私はJSONであなたができるとは思わないXMLは、。すべて非常に便利です。


5
データにタグが含まれる混合コンテンツを除きます。JSONはそれをまったくうまく行いません。
S.Lott

11

JSONでは不可能なXSLTを使用する多くの機能があります。したがって、機能的に同等でない場合は、相互に置き換えることはできません。


3
ただし、別の言語を使用してJSONを逆シリアル化、操作、およびシリアル化できます。XSLTはXMLではないため、この点は本当に意味がありません。
StuperUser


@greengitに感謝します。簡単に公開しただけで、答えが更新されました。
StuperUser

2
@StuperUser:JSON ではどうして「不可能」なのでしょうか?それは単なる変換であり、ツールがまだ欠落している可能性があります。または、JSONの属性の不足に関連する問題ですか?
maaartinus

1
@StuperUser:XSLTは、いくつかのインタープリターが少なくとも1つの別の言語(おそらくC、Javaなど)で記述された言語(XMLのサブセット)です。JSONでも同じことができます(一部のJSON-Tを定義し、インタープリターを作成します)。
maaartinus


7

JSONはかなり新しく、レガシーシステムはサポートしません。レガシシステムのアップグレードには費用がかかり、バグが発生します。JSONは近い将来XMLを置き換えることはありません。


2
お返事をありがとうございます。私が念頭に置いているのは、実装戦略ではなく技術的なレビューです。たとえば、これらのレガシーシステムの新しいバージョンでは、XMLを完全に削除してJSONを使用できますか?そうでない場合、JSONで見逃しているものは何ですか?
サイードネアマティ

一方、ここ数年、JSONだけでXMLは使用していません。そして良い馬鹿。もちろん、XMLはよりエンタープライズです。これは仕事の安全性に優れていますが、効率性にはあまり適していません。
gnasher729

6

私はcwallenpooleが優れた点になっていると思います。ほとんどのXML JSONに変換できます、XMLに適しているかどうかは別の点です。

JSONは、少なくともXMLと同様にデータ構造に適していますが、テキストドキュメントをマークアップする場合、XMLはJSONよりもはるかに自然に読み取られます。フィールドの。

HTML 5には独自のパーサーがありますが、それでもDocBookのようなアプリケーションは残ります。


JSONには明らかにHTMLを含むことができる文字列を含めることができます。
gnasher729

6

ドメインに依存します。Webサービスの面では?絶対に。ベンダーがまだ顧客に対してSOAPを推進しているのはまったく恥ずべきことです。ずっとREST + JSON。

さて、Docbookやその他の実装のようなスタイル情報を持つ複雑で構造化されたデータについて話しているときは?これはXMLの適切なドメインです。


4

YAMLがスーパーセットであり、XMLやJSONよりもはるかに表現力があり、したがって強力な場合、なぜJSONに限定するのか。

とはいえ、正しいシリアル化フレームワークを使用すれば、上記のすべての形式を2、3行の単純なコードでシリアル化および非シリアル化できるはずです。


3

これら2つのオブジェクトをJSONでモデル化しようとすると、見苦しくなります。

<customer><name>John Doe</name></customer>
<employee><name>John Doe</name</employee>

99%の場合に使用されるJSONを使用すると、次のように失われます。

{ name: "John Doe" } 

そして今、あなたはいくつかのメタ構造を追加する必要があり、JSONの美しさはすべて、欠点を残したままでなくなっています。


11
提供されたXMLと同等のJSONは{ customer: { name: 'John Doe' }, employee : { name: 'John Doe' } }です。技術的には、あなたの答えは正しくありません。:)
サイードネアマティ

もちろん、JSONに欠けているのは属性だけであり、オブジェクトのモデリングには(マークアップとは異なり)役に立たないものがあります。ネストされたデータを使用して表現できるもの(Hibernate構成ファイルなど)のショートカットとして属性が使用される場合があります。これは便利ですが、実際には選択肢が存在すると難しくなります。構成ファイルとモデリングオブジェクトは、JSONが明らかに優れている2つの場所です。
maaartinus

2
@SaeedNeamati、それでは<customer><name>John Doe</name></customer><customer><name>John Doe</name></customer>JSONでどのようにモデル化するのでしょうか?
svick

6
{顧客:[{名前: 'John Doe'}、{名前: 'John Doe'}]}?
scrwtp

2
@Stijn-そうです、それは機能しますが、XMLでより自然に落ちる特定のものをモデル化するために「メタ構造を追加する必要がある」という元の答えからのコメントを確認します。
マットR

3

JSONにそのような機能が存在するかどうかはわかりませんが、少なくとも.NETでは、指定されたスキーマに対してXMLを検証できます。これは、私の目にはXMLの貴重な利点です。


2
:JSONは、あまりにも、スキーマを持っているjson-schema.org
lordvlad
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.