本章は規定ターゲット(normative target)を定義します。既存のフォーマットがほぼ適切な構造を備えているため、現行仕様からの差分は意図的に小さく抑えられています。
リーダーが先頭バイトからファイル形式を識別できるよう、.madファイルは圧縮ストリームの外側に固定ヘッダーを配置して開始する必要があります:
offset 0 8 bytes "MADFILE\0" magic
offset 8 2 bytes uint16 LE format major version
offset 10 2 bytes uint16 LE format minor version
offset 12 4 bytes uint32 LE flags (bit 0: WAL checkpointed)
offset 16 ... bzip2 stream
設計根拠:これによりWindows等でのファイル識別問題が解消されます。拡張子はファイルブラウザのための慣例となり、ファイルを識別する唯一の手段ではなくなります。.zipにリネームされた.madファイルや、拡張子が損なわれる経路で受け取ったドキュメントであっても、確実に.madとして認識できます。また、展開(解凍)することなくバージョン判定が可能になります。
このヘッダーは出荷されている2つのサンプルとは後方互換性がありませんが、リーダー側でフォールバックできるため許容されます。すなわち、先頭にMADFILEマジックが存在しない場合はレガシーなv0ドキュメントとして扱います(§7.4)。
ライターはアーカイブ前にストアのWALをチェックポイントします。これにより、WALおよびSHMメンバは任意(省略可能)となり、それらが存在する場合に限りリーダーはそれらを無視せずリプレイしなければなりません。チェックポイントの結果はヘッダーのフラグビット0に記録されます。チェックポイント実行前に書き込まれるmeta.plistには記録されません。したがって、このフラグが正式な記録であり、展開せずに読み取ることができます。
これによりドキュメントサイズも縮小されます。Musicサンプルでは全体の3分の1のバイト数がWALに費やされていましたが、チェックポイントを行えばメインファイルに統合されます。
| メンバ | 必須 | 内容 |
|---|---|---|
meta.plist |
はい | generator、version |
StoreContent/<name> |
はい | ドキュメント定義 |
StoreContent/<name>-wal / -shm |
いいえ | チェックポイントされていない場合のみ存在(ヘッダーのフラグbit 0 = 0) |
AdditionalContent/ |
いいえ | thumbnail@2x.png |
version 1。リーダーは無期限にこれを受け入れなければなりません。2つのサンプルドキュメントはいずれもv0です。version 1、メンバ構成は上記の通り。ライターはv1を出力し、meta.plistの内容は従来通り維持します。リーダーはマジックヘッダーの有無によってv0を検出します。
このページは英語原文の日本語翻訳です。内容に相違がある場合は、英語原文が優先されます。