XMLが非常に悪い場合...なぜ多くの人がXMLを使用するのですか?[閉まっている]


37

私はXMLの目的を理解していますが、それがいかに悪いのかと不満を言う人はいつもいますか?私はそれについて何が本当に悪いのか本当に理解していませんか?私は通常、「肥大化した」と「遅い」という言葉を投げかけます。

しかし、プログラマーとして、あなたは主に何のためにそれを使用しますか?そして、あなたは本当にそれを「悪い」と考えますか?...それがそうであるならば、ひどい多くの人々がそれをデータの輸送に使用します...


1
あなたの答えは質問の中にあります。人々はそれを使用していたため、人々はまだそれを使用しており、オプションは(1)JSONとYAMLの前にそれを使用したすべてのコードを書き換えるか、(2)それを吸い上げて愚かなことです。依然として多くの人々が暴力のサイクルを永続させています。それは練習の固有の価値を証明しません。
パルティアショット

5
実際のドキュメント(manページ、Knuth、Hamletなど)でJSONを試してください。そうすれば、XMLが不可欠である理由を理解できます。これは、JSONがひどいスペースです(先に進んでみてください)。どちらか一方を他方のデザインスペースで使用することには疑問があります。JSONの空間でXMLを使用することの問題は主に冗長性と速度です。一方、XMLの空間でJSONを使用することの問題は、移植性(JSONで本を書いたが独自の方法で友人と相互運用を試みる)、整合性、解釈に多くの人間の努力を必要とする解釈の問題。仕事に適したツールを使用してください。
TextGeek

多くの人々は、XMLが設計されていないことを悪用しているため、XMLは悪いだけです。データを容易に拡張する必要がない場合(つまり、1つの権限のある当事者によって集中的に指示されるのではなく、相互運用が必要な複数の当事者がスキームを使用する場合)、およびデータがドキュメントではない場合(つまり、DOM 「データの抽象化が不十分でした)、XMLはそれらのアプリケーションには適していません。しかし、問題のドメインがXMLの設計対象に該当する場合、XMLに一致するものは他にありません。JSON、YAMLなどは、XMLが実際に設計されているスペースにはあまり適していません。
ライライアン

回答:


90

Xmlは、低レベルでデータ検証を実施する機能を備えたプラットフォームに依存しない、人間が読み取れるデータ転送プロトコルであるように設計されたものに最適です。この方法でXmlを使用している人が本当に不満を持っているとは思いません。最も簡潔なワイヤー形式ですか?いいえ。しかし、さらに悪い選択肢があります。カスタムバイナリ形式を読むのと同じくらい速いですか?いいえ。ただし、ビジネスパートナーは、使用しているスタックに関係なくそれを読み取ることができます。

ただし、問題は、人間(特にエンタープライズアーキテクトとして知られる品種)が悪であり、良いものを取り、悪いものにすることです。Xmlの場合、今世紀の初めには、XmlがあらゆるIT問題の普遍的なハンマーと見なされました。委員会による小さなデザインを振りかけると、SOAPやoXMLのような恐ろしい怪物になります。どちらも敵に望まれるべきではなく、友人や同僚に気にしないでください。


15
+1-EDIに対処しなければならなかった人なら誰でも、その混乱が生じる前にXMLが発明されたことを望みます。
スコットホイットロック

12
+1私の考えとほぼ正確に一致します。単純なデータを保存するために追加するだけです。たとえそれが階層的であっても(ただし、あまり深くなく、何にもうまくブレンドしない場合)、同様に機能する特定の形式があります-最も顕著なのはJSONとYAMLです。後者は、人間の可読性に関して素晴らしいものです。

11
jwzを言い換えると:「問題を調べて、「わかっている、XMLを使用する」と言う特定の種類のプログラマがいます。今、彼には2つの問題があります。」
アダムクロスランド

13
oXMLはBrainfuckやWhitespace、LOLCODEなどのジョークとして意図されていたことを教えてください。
-dsimcha

9
@Shamim Hafiz、SOAPは間違いなく、これまで人類が飼育した最悪の怪物の1つです。
SKロジック

24

XMLは、多くのフレーバーと用途を備えた単なるツールです。XMLはいくつかの点で優れており、他の点では得策ではありません。問題の1つは、人々が名前空間と無秩序に散らばっている不必要に複雑な「エンタープライズ」XMLを見たことだと思います(SOAP、誰か?)。人間用のXML形式を設計するための秘Theは、データを読みにくくすることなく、データに本当の意味を追加することです。

人々が問題とすることの1つは、XMLが文字または欠落しているブラケットで時々窒息することです。しかし、それにも利点と欠点の両方があります。利点は、半無効な構文のさまざまなケースを異なる方法で解釈できるHTMLのようなあいまいさがないことです。

欠点は、作成するのが少し難しく、学習するのが難しいことです。HTMLがXMLと同じくらい厳格であればWebがそれほど高速にならなかったという議論があることに同意しますが、今日それができたら嬉しいと主張します。:)

また、あなたがそれを適切に適用するための感覚と判断力を持っているという理由だけで、すべてに使用しないでください。持っているものがすべてXMLである場合、あなたは常にあなたが望むものから離れたXSLT変換になる傾向があります。:)

私は、人間がそれと対話する必要がある場合にのみ、形式が本当に重要であると主張します。何かをシリアライズし、それを別のプログラムが使用する場所に送信するプログラムを作成している場合、それが可能な限り効率的である限り、誰がそれがどのように見えるか気にしますか?バイナリ形式またはバニーとユニコーンを使用してください。

XMLの長所

  • YAMLとJSONができない多くのエッジケースをカバーします
  • さまざまなプラットフォームと言語の配列でXMLを解析および検証するための優れたツールがあります
  • XMLは(XSLTなどを介して)簡単かつ強力に別の形式に変換できます。
  • 合理的なXMLドキュメントは、人間が簡単に読んだり編集したりできます。JSONのほうが簡単だと言わないでください、そうではありません:)
  • XMLはある程度自己記述的です。つまり、XMLはその構造と意味に関する情報を直接含んでいます(ほとんどのバイナリ形式とは対照的に)
  • エンコードを処理します
  • クロスプラットフォームでの使用を容易にするホワイトスペース非依存
  • 整形式でない場合は中断します(データが構造的に正しいことを確認します)
  • SGMLではありません

短所

  • 冗長
  • バイナリの解析ほど高速ではありません
  • 整形式でない場合は中断します(アプリケーションをクラッシュさせます)

良い使い方

  • 構成ファイル
  • データ交換フォーマット
  • バージョン復元ファイル形式
  • データベースにドキュメントを保存する

あまり良くない使い方

  • データ転送フォーマット
  • オブジェクトのシリアル化
  • リレーショナルデータをデータベースに保存する
  • 高性能I / Oシナリオのファイル形式

13
「設定ファイル」は「適切な用途」の下にあるべきではないと思います。それらはデータではなく、指示です。
daknøk

3
私はここで@daknøkと一緒にいます-依存関係の注入を指定する数千行の長いXMLファイルの構成バグを見つけるのに膨大な時間を費やさなければならなかった時間を数えられませんXML属性。
ジャラル

3
不良データがアプリをクラッシュさせる場合、問題のあるデータですか?
ジェームズスネル

4
不正な形式または破損したファイル形式は、破損したソフトウェアをクラッシュさせる可能性があります。したがって、XMLはここでの犯人ではありません...アプリケーションだけです。そうでなければ、良い投稿。
トーマスエディング14

3
「YAMLやJSONにはない多くのエッジケースをカバーする」を展開していただけますか?
トレバーヒッキー

14

ジェフ・アトウッドは、XMLに関するかなり良いブログ記事を公開しています:ソースについて話したい場合は、このことについての角度ブラケット税です。

最も一般的な用途は次のとおりです。

  • 互いに話し合うサービス。たとえば、コンテンツ管理システムを使用するWebサイトでは、一部のデータを顧客関係管理システムに送信する必要があり、これはXMLで行われます。

  • 構成ストレージ。Web.configとapp.configは一般的な例ですが、nAntスクリプトはそれらにXMLを使用することもできます。

私はそれが最適であるとは思わないが、それだけでは私の心を悪くしない。


11

2つの理由:

  1. そこにはひどい多くの悪いプログラマーがいます。XMLは悪いかもしれませんが、それは(少なくとも表面的には)単純であり、悪いソフトウェアを書くことを非常に簡単にします。VBのようなソータ。
  2. これらの決定を下す多くの人々はプログラマーではありませんが、「誰もがXMLを使用している」と聞いただけで、製品にもXMLを使用することを決定するビジネスタイプです。

なんて馬鹿げた、まったく役に立たないポイントです。1)XMLは決して悪くはありませんし、XMLを選択するかどうかに関係なく、人々が書くソフトウェアの品質とはまったく関係がありません。VBを使用する場合、実際に悪いソフトウェアを書くのは、あなたがソフトウェアを書く方法とあなたがそれを書くために使用するものとの間には完全な切断があるので、ちょうど愚かです。2)もう1つの誤った仮定、XMLを選択することは素晴らしいことであり、XMLを良くも悪くも選択する人のほとんどは確かにプログラマーです。XMLは特効薬ではありませんが、特定の目的には適しています。
エヤルソルニック

2
@EyalSolnik:一部の人々は、問題が提示されたときに、「私は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> </ProblemWorsening>
Mason Wheeler

3
人々が何かを乱用しているからといって、テクノロジー自体が悪いというわけではないので、多くの場所で同じ症候群を見ることができます。
エヤルソルニック

8

私は通常、「肥大化した」と「遅い」という言葉を投げかけます。

これは、最もコンパクトな構文ではありませんが、明らかに最も表現力のある構文です。人間が読める?言語の設計方法に依存します。ほとんどの人はXMLの言語を設計せず、オブジェクトをXMLとしてシリアル化します。

…なぜ多くの人々がそれを使用するのですか?

それはいたるところにあります。XQueryでXMLデータベースをクエリし、XHTMLまたはAtomとしてXSLTで結果を変換し、他のWebサービスからAtomまたは他のXML形式を取得し、XFormsを使用してユーザーからXMLを取得し、XMLSchemaで検証し、NGまたはSchematronを緩和し、それを処理できますXProc、XQuery Updateを使用してデータベースに保存します。これらのツールはすべてXMLを理解するため、異なる表現間でマッピングする必要はありません。

XMLはシリアル化テクノロジではなく、汎用の情報セットです。


...そして、何年もの間、なぜXMLに基づいてSOAPが構築されてきたのかを自問しています。
JensG

6

ここで、異なる内部表現を持つ異なるベンダーによって作成された異なるシステム間のデータ交換に使用します。データを往復するXML変換/交換システムを構築します。そのためにはうまくいきます。

XMLは本質的に悪くはありませんが、XMLを使用して「良い」ソリューションを設計することは簡単ではないことを認識しています。


5

「XMLの本質はこれです。XMLが解決する問題は難しくなく、問題をうまく解決できません。」-Phil Wadler、POPL 2003

私の個人的な意見では、検証、スキーマ、XSLT、その他のいものを気にせず、ファイルのサイズを小さく保つと(そうでなければ解析が遅くなります)、XMLのいくつかの良い使用法を見つけることができると思いますINIファイルを使用する代わりにアプリケーションを構成するためのものです)。


4

私の経験では、人々は技術自体ではなく、その使用方法に不満を持っています。

人々が不満を言う肥大化した遅いビットは、通常、そこから情報を取得するために使用されるライブラリ/メソッドです。

私は、ディスクに保存したい少量の構造化された情報を保存するために使用します(データベースまたはバイナリシリアル化なし)、または別のアプリケーションに渡します(基本的にSOAPも記述します)。


2

その理由:

複数の異種システムが通信に使用できる標準の「インターフェース」。そして、「人間」が読み取り可能です(種類、5 MB XMLをじっと見てみてください)

その悪い理由:

その肥大化、大きなサイズ=より多くの帯域幅=より多くの$$

他の理由があります、誰もが異なる不満を持っています...


4
@Darknight:私は挑戦する人間(個人peeve)...あなたにXMLエンティティを投げることによって読めるの
マシューM.

1
XMLは本質的に肥大化しているとは思いませんが、その実装はそうです。XML-RPCは、不必要な肥大化で特にひどいものだと思います。
ホルスコル

3
@HorusKol:<advanceAcceptanceIndicator>Y</advanceAcceptanceIndicator>比率データ/マークアップが非常に低い...これを「肥大化」と呼びます。たとえば、JSonは半分だけ肥大化していますadvanceAcceptanceIndicator: "Y"。またタグ間のテキストが有効であるという事実もあるため、Xmlを読み取るときは、このcruftの処理方法を決定する必要があります。\n\t\t\t解決策は、通常、これを無視することです。
マチューM.

1
@HorusKol:それはブール値だとは言わなかったが、たった1つのcharである:)ここでの属性の使用(value?)はおそらく2人の間に空白を挿入したくなるので、おそらく優れているタグ。
マチューM.

1
「肥大化、サイズの拡大=帯域幅の増加= $$の増加」圧縮はまだ行われていないと思います。
アンディ

2

他のテクノロジーと同様に、利用可能なツールとライブラリは多数あります。

私はXMLが好きではありません、特にそれはファンキーだからです、人々がそれが人間が読むことができると言うとき、彼らは冗談を言うか、または属性にxmlを埋め込もうとしたときに実際にxmlを読んだことはありません... xmlエンティティは本当にそれを作ります読めない。さらに、冗長な終了タグと、フリーテキストとデータを混在させる機能のために、どのくらいのスペースが無駄になるかは驚くべきことです...

しかし:

  • Xmlを指定(xsd)でき、Xmlデータの適合性をチェックするツールが利用可能
  • Xmlをサポートする多くのツール(テキストエディターなど)
  • 多くのライブラリ(ほぼすべてのプログラミング言語)がXmlをサポートしています

また、ほとんどの場合、優先順位の利点があります。すでにWebサービスをXmlで提供していて、新しいサービスを要求するとき...それはおそらくあなたが知っていることなのでXmlで行われるでしょう。


5
XMLは、バイナリまたは位置またはコンマで区切られたデータよりも読みやすくなっています。
FrustratedWithFormsDesigner

単純なユーザーのみ。いくつかのデータが欠落しているレコードを探すために数百のレコードを視覚的にスキャンする必要がある場合は、空のタグを探して要素と属性の泥沼を歩いて歩くよりも、固定長レコードのブロック内のいくつかの空白の列を探すほうがはるかに望ましいです。
TMN

1
@FrustratedWithFormsDesigner:それは本当に手元のデータに依存します。XMLは、適切な情報の近くに情報の性質を埋め込みます。関数型プログラミング言語を見ると、(Haskell):のようなものが見えるでしょう。data Person = Person { surname :: String, firstName :: String, age :: Int }そして、もしPerson "Doe" "John" 42それが読めば、たくさんの手間を省くことができますが、カンマ区切りに近いです。
マチューM.

1
わかりました、あなたの例はマークアップなしで読みやすくなりましたが、すべてのフォーム(おそらくバイナリを除く)をサポートするために些細な(8または9未満のデータ要素と言います)例が作られます。メインフレームからのデータフィードは位置区切り文字列(およびそのほとんどは単なる数値コード)として生成され、XMLに変換された後の読み取りとデバッグおよび管理がはるかに簡単になります。あなたが言ったように、それは依存することができます
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner:はい、それはまさに私のポイントです:)それは依存しますが、XMLには豊富なエコシステムがあり、ツール/ライブラリのセットを1つだけ維持する方が簡単なので、人々は通常すべてにXMLを使用します。個人的には、XMLよりもJSonを好みますが、インデントを付けない場合もまた面倒です:p
Matthieu M.

-1

XMLは、人間が管理する必要のあるファイルには適していません。マークアップとコンテンツの間には視覚的な分離がないため、読みにくくなっています。特別な目的のエディターなしで正しく書くのは退屈です。XMLドキュメントのエラーは致命的です。XMLドキュメントを部分的に処理することはできません。XMLファイルが無効な場合、結果のエラーメッセージは役に立たないことがよくあります。

人間が保守する必要のあるファイルについては、JSON、YAML、またはインタープリター言語(Python、Ruby、Groovyなど)のソースコードのいずれかを使用することをお勧めします。従来のコード用のXML構成を作成する優れた方法は、Groovy MarkupBuilderを使用することであることがわかりました。別の良い選択は、ドメイン固有の言語を作成することです。これは、Ruby、Groovy、および他の多くの言語で非常に簡単に行えます。


8
XMLの要点が欠けていると思います。マークアップコンテンツです。XMLの目的は、データの意味を記述することです。たとえば、電話番号がある場合、固定電話番号またはmobilenumberとしてタグ付けすると、他の人が使用する可能性のあるコンテキストが追加されます。または、テキストの周りに電話タグを追加することもできます(その番号を携帯電話で呼び出し可能にすることができます)。あなたの他の点に関しては、私も同意しません。通常、xmlドキュメントの作成は非常に簡単です。エラーメッセージは常に整形式に関連しているので、いつでもJSONを渡してxmlを編集してみましょう
-Homde

@konrad電話の例はHTMLに有効です。
フロリアンF

「XMLドキュメントのエラーは致命的です。XMLドキュメントを部分的に処理することはできません。」はい、それはXMLの点では大きなパーです。
アンディ

@Andy XMLが人間によって書かれ、アプリケーションが「間違っている!」と言っているだけでは、ほとんど役に立ちません。人間の編集者は、エラーが検出された行を知る必要があります。
ケビンクライン

任意の数のツールにより、エラーが検出された行と、多くの場合、文字が正確にわかります。たとえば、NotePad ++のXMLツール。.Netは、.configファイルのどこが間違っているかを正確に示します。APIについて話している場合、XMLの利点の1つは、API開発者がXSDを提供できることです。XSDは、有効なXML構文を保証することに加えて、所属していない要素がある場合、その要素の1つなどであるだけです。手書きのjsonの方がはるかに簡単です。
アンディ

-2

解析は比較的簡単ですが、同時に人間が読むこともできます。

そして、いくつかの素晴らしいパーサー(例えばXerces {c ++})がすぐに利用可能です。


2
まあ、ドキュメントが小さい限り簡単です。メモリに適度に収まるには大きすぎるドキュメントを解析する必要がある場合、事態は厳しくなります。
TMN

人間の可読性の部分に疑問を呈します。同等のJSONを読み取るよりも、XMLを読み取る方が手間がかかりすぎます。
cmaster
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.