EPUB3のエラーを調べる―電子書籍を作る(5)

3030itoひとまず出来上がったものの、iPad miniのiBooks3.0では見ることができなかったEPUB3(最小のEPUB3―電子書籍を作る(4))を、EPUB Validatorでチェックすると3か所にエラーが見つかりました。

ERROR Content/HelloWorld.opf 24 22 item with id ‘ncx’ not found
ERROR Content/HelloWorld.opf 18 15 assertion failed: Exactly one manifest item must declare the ‘nav’ property (number of ‘nav’ items: 0).
ERROR Content/HelloWorld.opf 24 22 assertion failed: spine element toc attribute must reference the NCX manifest item (referenced media type was ”)

1 idに’ncx’をもつ項目が無い
2 manifest要素では、属性がnavのitemを宣言しなければならない
3 spine要素では、toc属性に示されている値(ncx)でNCX manifest item への参照が必要(参照されているメディアタイプが空)

といったカンジのエラーでしょうか。

そこで、お手本となるEPUB3フォーマット(EPUB 3 Sample Documents)のサンプルepub30-specのpackage.opfと比べてみると、epub30-specのpackage.opfではspine要素にtoc属性がありません。

<spine>
・
・
・
</spine>

となっているだけ。EPUB3ではナビゲーションでNCXファイルを使わなくなったそうです。

[OPF2] で定義されている NCX の機能は、EPUB Navigation Document [ContentDocs30] に取って代わられている。EPUB 3Publication は EPUB2 Reading System の上位互換性のために NCX を(OPF2.0.1 で定義されている)を含めてもよいが(may)、EPUB 3 Reading System は EPUB Navigation Document を支持して NCX を無視しなければならない(must)。EPUB Publications 3.0日本語訳

試しに、spine要素からtoc属性を外してみると、EPUB Validatorの結果は、上記1と3のエラーはなくなり、2番目のエラーだけとなりました。

また、epub30-specのpackage.opfのmanifest要素で

<item href="xhtml/epub30-nav.xhtml" id="nav" media-type="application/xhtml+xml" properties="nav"/>

という形でナビゲーション用ファイル(epub30-nav.xhtml)の宣言がされていました。

ということで、

<item href=”navi.xhtml” id=”nav” media-type=”application/xhtml+xml” properties=”nav”/>

といった宣言をHelloWorld.opfのmanifest要素に追加し、ナビゲーション用のファイルnavi.xhtmlを追加すれば2番目のエラーは無くなりそうです。

mimetype(固定ファイル)
 ┃
META-INF
 ┣ container.xml(コンテナ情報)
Content
 ┣ HelloWorld.opf(パッケージ文書)
 ┣ navi.xhtml(ナビゲーション用)
 ┗ HelloWorld.xhtml(本文)

EPUB3のベースは、こんなファイル構成となるのかな。