- 絳アト日記: ePub 2.0 ことはじめ (1) シンプルな ePub を作る
- 絳アト日記: ePub 2.0 ことはじめ (2) iBooks で確認
- 絳アト日記: ePub 2.0 ことはじめ (3) HTML 整形
- 絳アト日記: ePub 2.0 ことはじめ (4) Makefile を作る
の続きです。
Makefile ができたので、XHTML ファイルを編集しても最少の手間で ePub ドキュメントを生成できるようになりました。本エントリーでは、「目次」の作成方法を解説します。
目次の作成
iBooks では目次がないと ePub ドキュメントとして不正に扱われます。そのため、簡単な目次の作成方法については「絳アト日記: ePub 2.0 ことはじめ (1) シンプルな ePub を作る」で解説しました。おさらいしてみましょう。
目次を作るには、まず content.opf ファイルに目次ファイル「toc.ncx」があることを認識させます。そして、toc.ncx ファイルで目次を作ります。
content.opf ファイルの変更点
content.opf ファイルにおける目次ファイルの変更部分は二か所です。
まず manifest 要素に toc.ncx が ncx (目次) ファイルであることを登録します。今回の場合、次のようになります:
<manifest>
  <item id="ncx" href="toc.ncx" media-type="text/xml" />
  ...
 </manifest>
id 属性値は ncx としておくのが無難でしょう。href 属性値は自由に決めて構いませんが、拡張子は ncx とします。今回は toc.ncx という名前を採用しました。media-type 属性値は text/xml です。
次に spine 要素に toc 属性を追加します。属性値は目次ファイルの ID です:
 <spine toc="ncx">
目次ファイル (toc.ncx) は次のようになります:
<?xml version="1.0" encoding="UTF-8"?>
<ncx xmlns="http://www.daisy.org/x3986/2005/ncx/" version="2005-1">
  <head>
    <meta name="dtb:uid" content="akaato.com20110418"/>
    <meta name="dtb:depth" content="1"/>
    <meta name="dtb:totalPageCount" content="0"/>
    <meta name="dtb:maxPageNumber" content="0"/>
  </head>
  <docTitle>
    <text>ePub 2.0 ことはじめ</text>
  </docTitle>
  <navMap>
    <navPoint id="chap1" playOrder="1">
      <navLabel>
        <text>第一章 ことはじめ</text>
      </navLabel>
      <content src="chap1.xhtml"/>
    </navPoint>
  </navMap>
</ncx>
dtb:uid
目次ファイルの例を見れば分かる通り、目次ファイルには一つの navMap 要素が入ります。navMap 要素の前はヘッダーと考えて構いません。navMap 要素の中身が目次となって表示されます。
navMap 要素の中に目を移す前に、目次ファイルのヘッダー部分へ注意を向けましょう。ここに meta 要素で name="dtb:uid" というコードがあります。この属性値には、content.opf ファイルで dc:identifier で設定した値から「urn:uuid」を除いたものを設定します。
今回の例では、content.opf の概当部分は次の様になっていますから
<dc:identifier id="BookId">urn:uuid:akaato.com20110418</dc:identifier>
toc.ncx の概当部分は下記の様になります:
<meta name="dtb:uid" content="akaato.com20110418"/>
navPoint
navMap 要素の中には複数の navPoint 要素を入れることができます。この navPoint が「目次」となります。
一般的な navPoint 要素は次の様になります。
<navPoint id="目次用のID" playOrder="目次の順番 (数字)"> <navLabel><text>目次名</text></navLabel> <content src="URL"/> </navPoint>
「目次用のID」は content.opf 内の ID とは無関係です。playOrder の順番に目次が並べられます。navPoint 要素は入れ子にすることも可能ですし、「#name」も利用可能です。
一例です。
<navMap>
  <navPoint id="chap1" playOrder="1">
    <navLabel>
      <text>第一章 ことはじめ</text>
    </navLabel>
    <content src="chap1.xhtml"/>
    <navPoint id="chap1" playOrder="2">
 <navLabel>
   <text>1.1 利用可能な要素</text>
 </navLabel>
 <content src="chap1.xhtml#elem"/>
 <navPoint id="structure" playOrder="2">
   <navLabel><text>1.1.1  構造要素</text></navLabel>
   <content src="chap1.xhtml#structure"/>
 </navPoint>
 <navPoint id="text" playOrder="3">
   <navLabel><text>1.1.2  テキスト</text></navLabel>
   <content src="chap1.xhtml#text"/>
 </navPoint>
 <navPoint id="link" playOrder="4">
   <navLabel><text>1.1.3  ハイパーリンク</text></navLabel>
   <content src="chap1.xhtml#link"/>
 </navPoint>
 <navPoint id="list" playOrder="5">
   <navLabel><text>1.1.4  リスト</text></navLabel>
   <content src="chap1.xhtml#list"/>
 </navPoint>
 <navPoint id="fix" playOrder="6">
   <navLabel><text>1.1.5  修正</text></navLabel>
   <content src="chap1.xhtml#fix"/>
 </navPoint>
 <navPoint id="table" playOrder="7">
   <navLabel><text>1.1.6  テーブル</text></navLabel>
   <content src="chap1.xhtml#table"/>
 </navPoint>
    </navPoint>
  </navPoint>
</navMap>
結果です。iPhone の iBooks で表示させました。

 
0 件のコメント:
コメントを投稿