web-dev-qa-db-ja.com

XMLがCSVよりも望ましいのはいつですか?

流行しているからといってXMLが使用されているように感じることもあります。

32
Nick

いくつかの強み:

  • XSDに対してXMLデータを検証できます
  • XMLデータを文字どおりに記述せずに作成/消費する必要がある他の関係者に契約(XSDとして)を簡単に提供できます。
  • XMLデータ表現のマルチレベルで1対多の関係を持つことができます
  • XMLはおそらくCSVよりも読みやすい
  • XMLは、.netフレームワークによってネイティブにサポートされています

私の頭の上からいくつかを挙げます。

63
Robert Koritnik

.csvファイルは、データが厳密に表形式であり、その構造がわかっている場合に適しています。さまざまなレベルのデータ間でリレーションシップを開始するとすぐに、XMLがうまく機能する傾向があります。これは、ネストを行うだけで(スキーマがなくても)リレーションシップが明確になるためです。

21
dnagirl

XMLは、他の多くの人々がすでに言及している多くの利点のためにデフォルトになりました。したがって、質問は「CSVがXMLよりもいつ、なぜ望ましいのか」になります。

次の場合は、CSVがXMLよりも望ましいと感じます。

CSVは最初の2つのポイントが真である場合に完全に使用でき、データセットが大きくなるほど重要になるパフォーマンス上の利点があります。

それぞれが6つのテキストフィールドを持つ〜8000レコードをロードするクイックテストを行いました。 XMLの読み込みと解析には約8秒かかりました。 CSVの読み込みには1秒もかかりませんでした。

多くの場合、XMLのオーバーヘッドはそれだけの価値がありますが、星が揃うと、CSVがより理にかなっています。

15
rborchert

CSVは、ある情報に関連する一連の値があり、各フィールドの値を常に保存することがわかっている場合に役立ちます。

XMLには、自己記述的なデータ(タグ)と階層を持つという利点があります。これにより、データの保存方法の柔軟性が大幅に向上します。

12
James Goodwin

ネット上で興味深いパフォーマンステストを見つけました。 XMLの機能が必要ない場合のXMLの欠点の神の例。

「スティーブンの実験を別の角度から試しました。ExcelXPスプレッドシートに1桁の数字を入力し、XMLとコンマ区切りテキストファイル(CSV)の両方で保存しました。次に、WinZipで両方を圧縮し、Excelで両方を開きました。

XMLファイルは840MB、CSV 34MB-2,500%の差が圧縮され、XMLファイルは2.5MB、CSV 0.00015MB(150KB)-1,670%の差でした。

同様に劇的なのは、ファイルを解凍してExcelスプレッドシートとしてレンダリングするのにかかった時間です。XMLファイルで約20分かかりました。 CSVには1分かかりました。2,000%の違いです。」

http://www.xml.com/pub/a/2004/12/15/deviant.html

7
Tom

XMLとCSVを使用して、はるかに複雑な階層などと構造を持つことができます。それははるかに柔軟性を提供します。

7
dcp

もちろん、それはファッショナブルで時折流行ります。それはすべてアプリケーションに依存します。 XMLの構成ファイルは、解析しやすいため好まれます。一方、DataGridViewまたはデータベースダンプにはCSVファイルを使用します。

これ 毎日のWTF:XML vs CSV選択肢は明らかです はあなたの決定を助けるでしょう;)

4
user195488

データが非構造化(不明なスキーマ)であり、人間が読み取る場合、CSVよりもXMLの方が適しています。

ほぼ間違いなく、データに主にテキストが含まれていない限り、CSVは人間が消費するためのものでもあります。

関連するのは、データが2次元または3次元の場合です。 CSVは2次元のテキストに最適であり、その冗長性により、XMLは3次元のデータでうまく機能します。

XMLの「標準性」全体は誇張されており、文字どおりに解釈すべきではありません。 XMLには大きな技術的な問題があり、多くのソリューションは特にエレガントではなく、多くの場合有用です。

  1. テキストを使用して独自のテキストエンコーディング(鶏と卵?)を指定します
  2. XML用のより一般的なスキーマ言語はどれも特にうまくいきません。
  3. <tags>を使用してマークアップ言語を作成する昔からありふれた方法は、標準として特に有用ではありません。
  4. XMLは、SGMLベースの言語など、より強力なマークアップ言語をさかのぼって、それ自体に落とし込み、互換性のないレガシーを作成します。
  5. XMLテキストエスケープシーケンスが最も単純な場合(つまり、わかりやすいデータ)以外の場合に機能するかどうかはまだ決定されていません。

明確にするために、XMLはおそらく現在使用されているデータ交換の90%の誤った選択です。これらの使用は上記の仮定の一部またはすべてを破るためです。

4
Funklord

他の回答に加えて、XMLを使用すると、ドキュメントが含まれる文字セットを指定できます。

3
Greg

XMLの最大の利点は、構文解析機能と、ほとんどのXMLライブラリですぐに使用できる厳密な検証であることです。整形式でわかりやすいエラーメッセージ(xyz、行yで閉じられていないxyz)の主張は、CSVファイルのエラーのために、壊れた値、または不明な動作を探している場合と比較して、本当に役立ちます。

3
Pekka 웃

いつかあなたや誰か(短気で大規模な銃のコレクションを持っている人)がCSVデータでエラーを見つけなければならないかもしれないので、XML(またはJSON)を使用すると言います。

そう、私は読みやすさを言っています、他の人のことを忘れないでください!彼はあなたのことを考えているかもしれません。

2
Mottie

関連する答えについてコメントするほどの評判はありませんが、誰かがXMLを圧縮してcsv形式とサイズを同等にする方法を提案しました。これは事実ですが、XML圧縮はあなたに噛み付くこともあります。ポイント間でXMLデータを転送しているときに失敗した場合、XMLを読み取って何が間違っているのかを把握できるのは素晴らしいことです。 XMLが圧縮されていて転送が失敗した場合、XMLを解凍して内容を調べることができない場合があります。言い換えれば、XMLを圧縮すると、人間が読みやすいという利点がなくなります。

2
Chris Clark

CSVは通常、XMLよりも2倍小さいので、物事を動かしたい場合はより軽量です

XMLは標準であり、CSVの異なるOSのバージョンの影響を受けません

2
AutomatedTester

XMLは、タグ名と属性名で提供されるメタデータでデータにタグを付ける方法を提供しますが、CSVは提供しません。これに構造化された階層を定義する機能を組み合わせると、データのみが提供されるとXMLが理解しやすくなりますが、CSVでは各値の解釈方法を説明する付属のツールまたはドキュメントが必要です。

1
Jeff Yates

複雑なデータがある場合でも、XMLデータを簡単に走査できます。

次のリンクを確認してください。

1
Tebo

構造化された、人間が読める、編集しやすい、検証、解析可能性、変換可能性、タイピング、名前空間、その背後にある強力なライブラリーは、すべて多くの理由の中にあります。

何よりも標準的ですが。

0
tjmoore
  1. すべての言語とデータベースに既存のパーサーとエミッターがあります
  2. 彼らは私のためにエンコーディングを扱っています
  3. 彼らは私のために逃げる

私にとって重要なのはそれだけです。

確かに、CSVでエスケープするための準標準的な方法(つまり、「Excelが行う方法」)があり、自分で書くのは必ずしも難しくありませんが、時間がかかります。そして、帯域外の文字エンコーディングについて暗黙のうちに同意する必要があります。しかし、それは非常に単純なので、人々はそれを自分で書き込もうとし、常に#2または#3を台無しにします。

JSONも#2と#3を満たし、満足のいく#1に近づいています。また、少なくともドキュメント以外のファイルについては、間違いなく簡単です。驚くことではありませんが、社内外でますます使用しています。

0
Ken

XMLのもう1つの例:XMLの[〜#〜] x [〜#〜][〜#〜] e [〜 #〜]xtensible(私は知っているが、実際にはニーモニックではない:-P)。つまり、XML名前空間メカニズムの助けを借りて、好きな2つのXML言語を結合し、それらをsameドキュメントで結合できます。 CSVが1つしかない(無数の区切り文字スタイルをカウントしない)ため、XMLは非常に多くの複雑さをモジュール方式で処理できます。

ただし、これはCSVの利点です。表形式のデータが本当にある場合、XML構文はほとんどの場合過剰です。

0
Boldewyn

また、いくつかのcvsジェネレーター/パーサーは、一般的なテキストデータでは非常に困難であることもわかりました。キャリッジリターンやコンマや引用符などが多く含まれる長いテキスト文字列は、cvsの操作に関して非常に困難です。

SSMSは、楽しみのためにcsvを切り捨てることを好みます。

0
Chris Pitman