Word 2003 ドキュメントを XML に保存してから元に戻すと、ファイル サイズが縮小されます。古いドキュメントに対する新しいドキュメントの WordML の差分は、リビジョンの保存 IDのみの違いを示しています。では、往復で何が失われるのでしょうか。
実際に何も失われていない場合、ファイルのサイズが数千バイト少ないことをどのように説明できますか?
以下はあくまでも推測です。
.doc ファイルは、実際にはOLE 構造化ストレージ 複合ファイルです。後者は、明確に定義された方法で複数のストリームを単一のドキュメントにパックする方法であり、構造は実際にはファイルシステム内のファイルシステムにかなり近いです-たとえば、「セクター」とセクター割り当てテーブルがあります. このようなアプローチにより、文書ファイルを完全に書き換えることなく、その場で編集することが可能になります。
ただし、このストレージ アプローチでは、未使用のセクターなど、ある程度の冗長性が生じます。ファイルをラウンドトリップすると、効果的にゼロから再作成されるため、そのような冗長なストレージ アーティファクトは排除されます。
私の知る限り、Wordはテキストやフォーマットに加えて、ユーザー情報やドキュメント履歴などの情報をDOCファイルに保存します。この情報は、[ファイル]>[保存]を使用すると蓄積されます。XMLとして保存し、DOCとして再保存すると、その情報が削除されると思います。
正しく思い出せば、単純な「名前を付けて保存」はすでにファイルサイズを縮小しており、「ファイル>保存」バージョンよりもサイズが大幅に小さいバージョンのDOCファイルを保存できるメニュー項目があったと思います。 。
ワード文書 (.doc) を 16 進エディタで見ると、冗長なゼロのブロックが非常に多くあることがわかります。素晴らしいフォーマットです、先生!
とにかく、XML に保存してから doc に戻すと、数千バイトのゼロの一部が取り除かれる可能性があります。
両方のファイルを 16 進エディターで開き、異なるアルゴリズムを実行することに本当に興味がある場合は、Hex Workshop と Hex Editor Neo を試すことができます。
いくつかの大きな Word 2003 文書を使用して実験したところ、XML として保存してから .doc として保存すると、実際には、大幅ではありませんが、わずかに小さいファイルになることがわかりました。ご指摘のとおり、rsidR 属性は異なりますが、新しい rsidR は通常同じサイズであるため、サイズの縮小は考慮されていません。
Danra が指摘するように、.doc ファイルには同一のバイトが連続して含まれています。しかし、.doc として保存された小さいファイルにもそのような実行が含まれているため、これは .doc バイナリ形式のアーティファクトであり、情報を運ぶデータではないと考えています。往復の .doc ファイルをいくつか見てみましたが、外観にまったく違いは見られませんでした。これは、違いが情報を伝達するものではないという考えを裏付けるものです。
ラウンドトリップ後に作成された XML ファイルを調べると、主な違いは、内容のないいくつかの rPr (実行プロパティ) が XML への変換後に削除されることです。XML は使用されていない文字スタイルとプロパティを削除するため、保存されているようです。