5

StackOverflowを読み、JoelSpolskyとJeffAtwoodによるポッドキャストを聞いていると、多くの開発者がXMLの使用を嫌うか、少なくともデータの保存や交換にXMLをできるだけ使用しないようにしようとしていると思います。

一方、私はいくつかの理由でXMLの使用をとても楽しんでいます。

  • XMLシリアル化はほとんどの現代言語で実装されており、非常に使いやすいです。
  • XMLシリアル化は、バイナリシリアル化よりも低速であるため、複数のプログラミング言語からの同じデータを使用する場合や、デバッグの場合でも人間が読み取って理解することを目的とした場合に非常に役立ちます(たとえば、JSONはより困難です)。理解するために)、
  • XMLはUnicodeをサポートしており、適切に使用すれば、エンコードや文字などの違いに問題はありません。
  • XMLデータを簡単に操作できるツールはたくさんあります。XSLTはその一例であり、データの提示と変換を容易にします。XPathはもう1つで、データの検索を簡単にします。
  • XMLは一部のSQLサーバーに格納できます。これにより、複雑すぎてSQLテーブルに簡単に格納できないデータを保存および操作する必要があるシナリオが可能になります。たとえば、JSONまたはバイナリデータをSQLで直接操作することはできません(ほとんどの状況でおかしな文字列を操作する場合を除く)。
  • XMLでは、アプリケーションをインストールする必要はありません。アプリでデータベースを使用する場合は、最初にデータベースサーバーをインストールする必要があります。アプリでXMLを使用したい場合は、何もインストールする必要はありません。
  • XMLは、たとえばWindowsレジストリやINIファイルよりもはるかに明示的で拡張可能です。
  • ほとんどの場合、XMLによって提供される抽象化のレベルのおかげで、CR-LFの問題はありません。

では、XMLを使用することのすべての利点を考慮に入れると、なぜ多くの開発者がXMLの使用を嫌うのでしょうか。私見、それに関する唯一の問題はそれです:

  • XMLは冗長すぎて、特にBase64エンコーディングに関しては、他のほとんどの形式のデータよりもはるかに多くの場所を必要とします。

もちろん、XMLがまったく適合しないシナリオはたくさんあります。SOの質問と回答をサーバー側のXMLファイルに保存することは絶対に間違っています。または、AVIビデオまたは大量のJPG画像を保存する場合、XMLは使用するのに最悪のものです。

しかし、他のシナリオはどうですか?XMLの弱点は何ですか?


この質問は本当の質問ではないと考えた人々へ:

1980年以降のコンピューティングにおける非クローズの重要な新しい発明のような質問とは対照的に、私の質問非常に明確な質問であり、他の人々がXMLを使用するときに経験する弱点と、なぜそれを嫌うのかを明確に説明するように促します。たとえば、 XMLが良いか悪いかについて議論することはできません。また、詳細な議論も必要ありません。したがって、これまでに受け取った現在の回答は短く正確であり、私が望む十分な情報を提供します。

しかし、この質問に対するユニークな良い答えはあり得ないので、それはウィキです。

SOによると、「実際の質問ではない」とは、「ここで何が質問されているかを判断するのが難しい。この質問は、あいまい、曖昧、不完全、または修辞的であり、現在の形式では合理的に答えることができない」という質問です。

  • ここで質問されていること:質問自体は非常に明確であり、上記のテキストのいくつかの段落はそれをさらに明確にしていると思います、
  • この質問はあいまいで、あいまいで、不完全です。繰り返しになりますが、あいまいでも不完全でもない、あいまいなものはありません。
  • または修辞的:そうではありません:私の質問への答えは明白なものではありません、
  • 合理的に答えることはできません:何人かの人々はすでに質問に素晴らしい答えを出し、質問が合理的に答えられることを示しています。

また、回答を評価し、受け入れられた回答を決定する方法も非常に明白なようです。回答がXMLの何が問題になっているのかについての正当な理由を示している場合、この回答が投票されて受け入れられる可能性があります。

4

6 に答える 6

6
<xml>
    <noise>
        The
    </noise>
    <adjective>
        main
    </adjective>
    <noun>
        weakness
    </noun>
    <noise>
        of
    </noise>
    <subject>
        XML
    </subject>
    <noise>
        ,
    </noise>
    <whocares>
        in my opinion
    </whocares>
    <noise>
        ,
    </noise>
    <wildgeneralisation>
        is its verbosity
    </wildgeneralisation>
    <noise>
        .
    </noise>
</xml>
于 2010-08-27T02:26:12.770 に答える
5

いくつかの弱点:

  • xmlファイルと外部リソースを関連付けるのはやや困難です。そのため、新しいOfficeドキュメント形式では、スケルトンxmlファイルとリソースファイルがバンドルされたzipエンベロープが使用されます。base64エンコーディングを使用する他のオプションは非常に冗長であり、適切なランダムアクセスを許可しないため、次のポイントに進みます。
  • ランダムアクセスは困難です。xmlファイルを読み取る2つの従来のモードのどちらも-DOMを構築するか、フォワードのみのSAXスタイルの読み取りでは、真にランダムなアクセスが可能になります。
  • ファイルのさまざまな部分への同時書き込みアクセスは困難です。そのため、Windows実行可能マニフェストでの使用はエラーが発生しやすくなります。
  • xmlファイルはどのエンコーディングを使用しますか?厳密に言えば、最初にエンコーディングを推測し、次にファイルを読み取って、エンコーディングが正しいことを確認します。
  • ファイルの一部をバージョン管理することは困難です。したがって、詳細なバージョン管理を提供する場合は、データを分割する必要があります。これはファイル形式の問題だけでなく、ツールが一般的にファイルごとのセマンティクスを提供するという事実(バージョン管理ツール、DropBoxなどの同期ツールなど)も原因です。
于 2010-08-27T02:08:20.867 に答える
1

私自身はxmlの大ファンなので、私は質問するのにふさわしい人物ではありません。しかし、私が聞いた主な不満の1つをお話しすることができます。

作業するのは難しいです。ここで、ハードとは、APIを理解する必要があり、xmlを解析するために比較的多くのコードを記述する必要があることを意味します。それほど難しいとは言えませんが、動的に作成されたオブジェクトをサポートする言語を使用すると、オブジェクトを記述するために作成された言語に簡単にアクセスできることに同意できます。

于 2010-08-27T02:03:20.680 に答える
1

一般的に、反応はXMLが使いすぎているためだと思います。

しかし、私がXMLについて嫌いな言葉があるとすれば、情熱を持って、名前空間です。名前空間の問題で生産性が失われるのは恐ろしいことです。

于 2010-08-27T02:16:13.093 に答える
1

XMLは、マークアップ言語の曾祖父であるSGMLの子孫です。SGMLおよび拡張XMLの目的は、テキストに注釈を付けることです。XMLはこれをうまく実行し、さまざまなアプリケーションの機能を強化するさまざまなツールを備えています。

問題は、私が見ているように、XMLはテキストに注釈を付けるためではなく、構造化データを表すために頻繁に使用されることです。これは微妙ですが重要な違いです。実際には、構造化データはさまざまな理由で簡潔にする必要があります。特に帯域幅が制限されている場合、パフォーマンスは明らかです。これはおそらく、JSONがWebアプリケーションで非常に人気がある主な理由の1つです。ワイヤー上の簡潔なデータ構造表現は、より優れたスケーラビリティを意味します。

残念ながら、JSONは、ほとんどの場合省略される余分な空白のパディングなしではあまり読みやすくありません。一方、コマンドラインエディタを使用して大きなXMLファイルを編集しようとしたことがある場合は、それも非常に厄介なことがあります。

個人的には、YAMLは2つの極端なバランスをうまく取っていることがわかりました。以下を比較してください(マイナーな変更を加えてyaml.orgからコピー)。

YAML:

invoice: 34843
  date: 2001-01-23
  billto: &id001
    given: Chris
    family: Dumars
    address:
      lines: |
        458 Walkman Dr.
        Suite #292
      city: Royal Oak
      state: MI
      postal: 48046
  shipto: *id001
  product:
  - sku: BL394D
    quantity: 4
    description: Basketball
    price: 450.00
  - sku: BL4438H
    quantity: 1
    description: Super Hoop
    price: 2392.00
  tax : 251.42
  total: 4443.52
  comments: >
    Late afternoon is best.
    Backup contact is Nancy
    Billsmer @ 338-4338.

XML:

<invoice>
   <number>34843</number>
   <date>2001-01-03</date>
   <billto id="id001">
      <given>Chris</given>
      <family>Dumars</family>
      <address>
        <lines>
          458 Walkman Dr.
          Suite #292
        </lines>
        <city>Royal Oak</city>
        <state>MI</state>
        <postal>48046</postal>
      </address>
   </billto>
   <shipto xref="id001" />
   <products>
      <product>
        <sku>BL394D</sku>
        <quantity>4</quantity>
        <description>Basketball</description>
        <price>450.00</price>
      </product>
      <product>
        <sku>BL4438</sku>
        <quantity>1</quantity>
        <description>Super Hoop</description>
        <price>2392.00</price>
      </product>
   </products>
   <tax>251.42</tax>
   <total>4443.52</total>
   <comments>
    Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338
   </comments>
</invoice>

どちらも同じデータを表しますが、YAMLは30%以上小さく、間違いなく読みやすくなっています。テキストエディタでどちらを変更する必要がありますか?YAMLを解析して出力するために利用できるライブラリはたくさんあります(つまり、Java開発者向けのsnakeyaml)。

すべての場合と同様に、適切な仕事のための適切なツールは、従うべき最良のルールです。

于 2010-08-27T17:23:29.877 に答える
0

私のお気に入りの厄介な問題は、XAMLなどの属性を使用するXMLシリアル化形式にあります。

これは機能します:

<ListBox ItemsSource="{Binding Items}" SelectedItem="{Binding CurrentSelection}"/>

これはしません:

<ListBox SelectedItem="{Binding CurrentSelection}" ItemsSource="{Binding Items}"/>

XAML逆シリアル化は、XMLストリームから読み取られるときにプロパティ値を割り当てます。したがって、2番目の例では、SelectedItemプロパティが割り当てられているとき、コントロールItemsSourceはまだ設定されておらず、SelectedItemプロパティはまだ存在することがわかっているアイテムに割り当てられています。

Visual Studioを使用してXAMLファイルを作成している場合、Visual Studioは属性の順序を維持するため、すべてがクールになります。しかし、属性の順序は重要ではないと言われているときにXMLの推奨事項を信じるXMLツールでXAMLを変更してください。そうすれば、あなたは傷ついた世界にいます。

于 2010-08-27T22:19:32.713 に答える