MAD Designer iconMAD

7. 本来定義されるべきフォーマット(規定仕様)

本章は規定ターゲット(normative target)を定義します。既存のフォーマットがほぼ適切な構造を備えているため、現行仕様からの差分は意図的に小さく抑えられています。

7.1 ファイル名ではなくコンテンツによる識別

リーダーが先頭バイトからファイル形式を識別できるよう、.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)。

7.2 チェックポイント済みストア

ライターはアーカイブ前にストアのWALをチェックポイントします。これにより、WALおよびSHMメンバは任意(省略可能)となり、それらが存在する場合に限りリーダーはそれらを無視せずリプレイしなければなりません。チェックポイントの結果はヘッダーのフラグビット0に記録されます。チェックポイント実行前に書き込まれるmeta.plistには記録されません。したがって、このフラグが正式な記録であり、展開せずに読み取ることができます。

これによりドキュメントサイズも縮小されます。Musicサンプルでは全体の3分の1のバイト数がWALに費やされていましたが、チェックポイントを行えばメインファイルに統合されます。

7.3 メンバ構成

メンバ 必須 内容
meta.plist はい generator、version
StoreContent/<name> はい ドキュメント定義
StoreContent/<name>-wal / -shm いいえ チェックポイントされていない場合のみ存在(ヘッダーのフラグbit 0 = 0)
AdditionalContent/ いいえ thumbnail@2x.png

7.4 互換性

ライターはv1を出力し、meta.plistの内容は従来通り維持します。リーダーはマジックヘッダーの有無によってv0を検出します。

このページは英語原文の日本語翻訳です。内容に相違がある場合は、英語原文が優先されます。