web-dev-qa-db-ja.com

XMLに最適な圧縮アルゴリズムは?

私は圧縮についてほとんど知らないので、我慢してください(これはおそらく愚かで痛々しいほど明白な質問です)。

それでは、いくつかのタグが付いたXMLファイルがあるとします。

<verylongtagnumberone>
  <verylongtagnumbertwo>
    text
  </verylongtagnumbertwo>
</verylongtagnumberone>

複数のXMLファイルに多くの属性を持つこれらの非常に長いタグがたくさんあるとしましょう。可能な限り小さいサイズに圧縮する必要があります。最善の方法は、vlt1やvlt2などの個々のタグの仮名を割り当てるXML固有のアルゴリズムを使用することです。ただし、これは、私が目指しているほど「オープン」な方法ではなく、DEFLATEやLZなどの一般的なアルゴリズムを使用したいと考えています。また、アーカイブが.Zipファイルである場合にも役立ちます。

私はプレーンテキスト(イメージのようなバイナリファイルではない)を扱っているので、プレーンテキストに適したアルゴリズムが必要です。どちらが最小のファイルサイズを生成しますか(ロスレスアルゴリズムが推奨されます)?

ちなみに、シナリオは次のとおりです。ODFやMS Office XMLなど、.zipにパッケージ化されたXMLファイルを含むドキュメントの標準を作成しています。

編集:「暗号化」はタイプミスでした。それは「圧縮」をしなければなりません。

30
Aethex

EXI(Efficient XML Interchange) という名前のW3(まだリリースされていない)標準があります。

将来XMLデータを圧縮するためのデータ形式になるはずです(最後に必要なバイナリ形式であると主張されています)。 XML用に最適化されているため、従来の圧縮アルゴリズムよりも効率的にXMLを圧縮できます。

EXIを使用すると、圧縮されたXMLデータをその場で操作できます(解凍または再圧縮する必要はありません)。

EXI =(XML + XMLSchema)バイナリとして。

そして、ここでオープンソースの実装に進みます(すでに安定しているかどうかはわかりません)。
Exificient

はい、*。実際には圧縮してください。 このUSENIX論文に含まれているGory deetsは、計算コストに見合わない「最適な」コンプレッサーとドメイン固有のコンプレッサーはそうではないことを示しています[平均して] Zipを破った。

免責事項:私はその論文を書きましたが、Googleによると60回以上引用されています。

6
sendbits

XMLを「圧縮」するもう1つの方法は、FI(高速インフォセット)です。

FIとして保存されたXMLには、すべてのタグと属性のみが含まれ1回、他のすべてのオカレンスは最初のオカレンスを参照しているため、スペースが節約されます。

見る:

Java.Sun.com の非常に良い記事、そしてもちろん
ウィキペディアのエントリ

圧縮の観点からのEXIとの違いは、Fast Infoset(構造化されたプレーンテキスト)は効率が悪いことです。

その他の重要な違いは次のとおりです。FIは多くの実装を備えた成熟した標準です。
それらの1つ: Fast Infoset Project @ dev.Java.net

暗号化よりも圧縮に関心があるようです。それは事実ですか?もしそうなら、 this は、正確な解決策ではありませんが、興味深い読み物になる可能性があります。

2
Mizipzor

ちなみに、シナリオは次のとおりです。ODFやMS Office XMLなど、。Zipにパッケージ化されたXMLファイルを含むドキュメントの標準を作成しています。

次に、.Zip圧縮を使用することをお勧めします。そうしないと、ユーザーが混乱することになります。

1
Pete Kirkham

デフォルトのものはどれもXMLに理想的ではありませんが、繰り返し可能なものがたくさんあるので良い値が得られます。

XMLは多くの繰り返し(タグ。>)を使用するため、これらを少し少なくしたいので、ハフマンエンコーディングではなく、何らかの形式の算術演算を使用します。したがって、理論的にはrar/7Zipの方がはるかに優れているはずです。これらのアルゴリズムは高圧縮を提供するため、速度が遅くなります。理想的には、算術エンコーダーを使用した単純な圧縮(XMLの場合は高速で高圧縮が得られる)が必要です。

0
user1496062

あなたの選択肢は:

  • Gzip圧縮をサポートするWebサーバーを使用します。すべての発信htmlを自動圧縮します。ただし、CPUのペナルティはわずかです。
  • JSONなどを使用します。メッセージのサイズが大幅に減少します
  • バイナリXMLもありますが、私自身は試していません。
0
Zepplock

私はあなたが何をする必要があるかを正しく理解したと思います...最初に言いたいのは、テキストには良いまたは悪い圧縮アルゴリズムがないということです-Zip、bzip、gzip、rar、7Zipは、低エンタルピー-つまり、小さな文字セットの大きなファイル。それらを使用する必要がある場合は、最初の選択肢で7Zipを選択し、2番目にrar、3番目にZipを選択します。しかし、違いは非常に小さいので、もっと簡単な方法を試してください。次に、暗号化しようとしているものを理解できませんでした。これがXMLファイルであるとすると、最初にお気に入りの圧縮アルゴリズムを使用して圧縮し、次にお気に入りの暗号化アルゴリズムを使用して暗号化する必要があります。ほとんどの場合、たとえばPGPに実装されている最新のアルゴリズムは、何に対しても十分に安全です。お役に立てば幸いです。

0
Jack David