EPUB Navigation Documentは、EPUB内に含まれる目次に相当するXHTMLファイルです。
今回は、社内テストやお客様からの問い合わせで発見したコンテンツ制作上の間違いなどをご紹介します。
EPUB Navigation Documentの書き方
なお、ここでは特に断りのない限りEPUB 3.1のEPUB Navigation Documentを参照しますが、3.0や3.0.1でも基本的には同じです。
基本的な構造
必須となっており、多くのビューアでも主に使われるtocタイプを例に挙げます。あくまで概要ですので、詳しくはNavigation Documentの仕様をご確認ください。
nav[type="toc"]
があるnav
は0個または1個のheading content(h1-h6)を含む(目次全体のタイトルを書ける)nav
は必ず1個のol
を含むol
は1個以上のli
を含む(項目が1個もない目次は許可されない)li
はa
またはspan
をどちらか必ず1個含むa
はContent Documentへのリンクspan
はサブリストのタイトルa
とspan
は、どちらも空にはできない(imgなどを含むことはできるが、テキストとして処理した際に必ず1文字以上となるように、titleやaltを付与すること)
a
を含むli
は、追加で最大1個のol
を含むことができるspan
を含むli
は、追加で必ず1個のol
を含む(span
をleaf要素にすることはできない)
epubcheckを使おう
原則として、EPUB公開前にはepubcheckによるチェックを通しておくと安全です。epubcheckを通過したからと言って100%正当なEPUBであることが保証される訳ではありませんが、通常制作していく中で埋め込んでしまうEPUB仕様違反(主に凡ミス)の99%くらいは発見できると思います。
java -jar epubcheck.jar target.epub
よくある間違い
1. ネストしたリストに、span
によるheadingがついていない
以下のようなケースです。問題の行を👈で示しました。
<ol>
<li><a href="p001.xhtml">第1章</a></li>
<li> 👈
<ol> 👈
<li><a href="p002-1.xhtml">第2章その1</a></li>
<li><a href="p002-2.xhtml">第2章その2</a></li>
</ol>
</li>
</ol>
li
は必ず最初にa
またはspan
を含む必要があり、ol
はこれらに続く形でのみ記述できます。つまり、タイトルのつかないサブリストは許容されません。
epubcheckでは以下のようなエラーが指摘されます。
ERROR(RSC-005): ...: ファイル解析時のエラー '要素 "ol" はまだここには書けません. ; ここに書かれるべきものは 要素 "a" または "span" です.'.
修正すると、以下のようになります。第2章の扉がある場合などは、span
の代わりにa
を利用してももちろん構いません。
<ol>
<li><a href="p001.xhtml">第1章</a></li>
<li>
<span>第2章</span>
<ol>
<li><a href="p002-1.xhtml">第2章その1</a></li>
<li><a href="p002-2.xhtml">第2章その2</a></li>
</ol>
</li>
</ol>
2. href属性のないa
要素がある
以下のようなケースです。
<ol>
<li><a href="p001.xhtml">第1章</a></li>
<li><a>セクション区切り</a></li> 👈
<li><a href="p002.xhtml">第2章</a></li>
</ol>
A child a element describes the target that the link points to,
などと書かれているように、a
はリンク(目次項目)のために利用する必要があります。span
の代わりに利用してはいけません。
この違反は、epubcheck 4.0.2では特にエラーが出力されないので注意が必要です。
修正するには、該当のa
を含むli
を削除するのが最も簡単です。もし後続の項目がセクションとしてまとめられるなら、span
に後続するサブリストとして利用することも検討してください。ブラウザで見た際の間隔を空けたいのなら、CSSを使いましょう。
<ol>
<li><a href="p001.xhtml">第1章</a></li>
<li><a href="p002.xhtml">第2章</a></li>
</ol>
3. a
やspan
を含まないli
要素がある
以下のようなケースです。
<ol>
<li><a href="p001.xhtml">第1章</a></li>
<li>-----</li> 👈
<li><a href="p002.xhtml">第2章</a></li>
</ol>
li
は必ずa
またはspan
を1つ含む必要があり、区切り線のような用途に使うことは禁止されています。
epubcheckでは以下のエラーが報告されます。
ERROR(RSC-005): ...: ファイル解析時のエラー 'テキストはここには書けません. ; ここに書かれるべきものは 要素 "a" または "span" です.'.
修正するには、該当のli
を削除します。
<ol>
<li><a href="p001.xhtml">第1章</a></li>
<li><a href="p002.xhtml">第2章</a></li>
</ol>
4. nav配下に余計な要素がある
以下のようなケースです。
<nav epub:type="toc">
<p>目次です。</p> 👈
<ol>
<li><a href="p001.xhtml">第1章</a></li>
<li><a href="p002.xhtml">第2章</a></li>
</ol>
</nav>
nav
直下には0個または1個のheading要素と必ず1個のol
要素を置くことを必要とされ、それ以外は許可されません。
epubcheckでは以下のエラーが報告されます。
ERROR(RSC-005): ..: ファイル解析時のエラー '要素 "p" をここに書いてはいけません. ; ここに書かれるべきものは 要素 "ol" です.'.
修正するには、該当のp
を削除するか、nav
の外に置くのが簡単です。
<p>目次です。</p>
<nav epub:type="toc">
<ol>
<li><a href="p001.xhtml">第1章</a></li>
<li><a href="p002.xhtml">第2章</a></li>
</ol>
</nav>
5. HTMLが壊れている
以下のようなケースです。
<ol>
<li><a href="p001.xhtml">第1章</a></li>
------- 👈
<li><a href="p002.xhtml">第2章</a></li>
<ol> 👈
<li><a href="p002-1.xhtml">第2章その1</a></li> 👈
</ol> 👈
</ol>
どうしてこうなった、感が満載ですが、当然ながらol
直下にli
以外を書いてはいけません。
HTMLとしてはli
以外にscript
やtemplate
も含むことができますが、EPUB Navigation Documentとしてはli
のみが許可されます。テキストやol
はHTMLでも当然NGです。
関連記事
- 続・EPUBでのtext-align:justifyと-epub-text-align-lastを知る
- 間違ったEPUBの正しい作り方(Linux, Mac, Cygwin編)
- EPUBでのtext-align:justifyと-epub-text-align-lastを知る
- [便利なepubcheckを使ってみよう(下) カスタマイズ編](/baba/2013_04_10/6956)
- 便利なepubcheckを使ってみよう(上) 使い方編