第2章 パッケージ

OPCのzip構造について

OPCによるパッケージは関連付けと文書ファイルの階層的な集合からなりますが、これらは最終的にzipファイルとしてまとめられます。

このときOPCが満たすzipについて、ISO 29500-2:2012 Annex Cで述べられています。ここではzipについて概要を紹介します。

zipの概要

zipはアーカイブ形式の一種、つまり元のファイルを符号化して格納したファイルです。一般にこの符号化によってファイルサイズは小さくなりますが、元からほかの圧縮形式である場合など、あまりファイルサイズが小さくならないこともあります。

zipファイルは次の4つで構成されます。それぞれの内容について最低限の概略だけを紹介します。

  • ローカルファイルヘッダー
  • セントラルディレクトリーファイルヘッダー
    各ファイルごとに、圧縮方法、ZIPファイル中の開始位置、作成・更新日時、格納前、格納後のファイルサイズ、チェックサムとして格納前のファイルのCRC-32といった情報が格納されます。
  • セントラルディレクトリー終端レコード
    ZIPファイル全体についての情報が記述されます。開始部分のシグネチャは50 4B 05 06です。
  • ファイルエントリー

ZIP関連の用語

シグネチャ(ZIPファイル)
バイナリーデータは物理的には長い2進数の列で、何らかのアプリケーションがこれを読み込むとき、どこにそれぞれの構造があるのか、区切りを教えてあげる必要があります。シグネチャは、ここではバイナリで記述されたデータを区別するための区切りとして扱われる16進数表記のバイト列を指します。
レコード
あるバイナリーの開始位置から終了位置までに格納されている情報をレコードと呼びます。セントラルディレクトリ終端レコードは、セントラルディレクトリというまとまりの最後のレコードです。
interleave
ここでは、ファイルの内容を不連続な形で配置することを指します。

ZIPファイルとしてこれらがどのように格納されているかを次に図示します。

ZIPファイルとしての格納
ZIPファイルとしての格納

Data Desciptor

たとえばWindowsでWordファイルを右クリックして「プロパティ」を開いたとき、Microsoft Wordを開かなくとも作者情報などが閲覧できます。

このようにファイルの内容情報を示すメタデータは、zipファイルの展開をしなくとも閲覧可能である必要があります。この情報をデータディスクリプターに格納します。

パッケージとzipの対応

パーツはそれぞれが1つ、またはそれ以上の数のzipアイテムとなっています。1つ以上になるのはパーツが更に細かい単位、ピースからなる場合です。

それぞれのピースはzipアーカイブ中でそれぞれ1つのzipアイテムとなります。zipアイテムはuncompressed(無圧縮)であるとされています。

zipアイテム名は1つのzipアーカイブ中で同じものはありません。

文書がパーツに分かれ、そのパーツとZIPアイテムが対応することで、転送時などでファイルの一部が破損したとき、無事な部分の文書を読み込めるようになっています。