「ePub 2.0 ことはじめ」と題して、ePub 2.0 ドキュメントを作ってみます。どうぞ、よろしく。
はじめに
ePub 作成用のツールは色々出ていますが、「ePub 2.0 ことはじめ」ではエディターを使ってベタベタに ePub を作ります。これは、私が ePub 作成ツールが苦手なのと、ePub 2.0 の仕様について勉強したいためです。
なお、「ePub 2.0 ことはじめ」で作る ePub のソースコードは GitHub で公開しています。よろしければ、ご自由にお使い下さい。
シンプルな ePub を作る
まずは、ePub ドキュメント用のディレクトリー (epub-first-step) を作ります。一つの ePub ドキュメントに関するファイル (テキスト、画像 etc.) は全てこのディレクトリーの中に置きます。
$ mkdir epub-first-step $ cd epub-first-step
ePub を作るのに最低限必要なファイルは次の 4 つです。
- mimetype
- META-INF/container.xml
- OEBPS/content.opf
- OEBPS/text.html
と、そのはずなのですが、iBooks で開こうとすると「本のフォーマットエラー この本はフォーマットが認識出来ないか無効なため開けません」というエラーが出て ePub ファイルが開けません。どうやら、目次ファイルも必要なようです。
- OEBPS/toc.xml
mimetype
mimetype ファイルは、このドキュメントが ePub 形式であることを教えるためのファイルです。次の様にして作ります。
$ echo application/epub+zip > mimetype
META-INF/container.xml
META-INF というディレクトリーの中に container.xml というファイルを作ります。container.xml ファイルの目的は、どこに ePub ファイルの中身を説明したファイルがあるかをビューワー・アプリに教えることです。
まず、META-INF ディレクトリーを作ります。
$ mkdir META-INF
META-INF/container.xml の中身は次の様になります:
<?xml version="1.0"?> <container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container"> <rootfiles> <rootfile full-path="OEBPS/content.opf" media-type="application/oebps-package+xml" /> </rootfiles> </container>
rootfile 要素の full-path 属性に opf ファイルへのパスを書きます。ここでは「OEBPS/content.opf」を指定しました。
mimetype ファイルと META-INF ディレクトリー (とその中身) の名前は予約語です。変更してはいけません。
opf ファイル
opf ファイルには、ePub (正確には zip ファイル) が含んでいるファイルの一覧とその説明を書きます。opf ファイルのファイル名は「書名.opf」か「content.opf」としているものを多く見かけます。ここでは「OEBPS/content.opf」とします。
ディレクトリー名は OEBPS とします。OEBPS とは ePub 規格の前身に当たる電子書籍フォーマットです。仕様では「OEBPS」でなくとも良いはずですが、歴史的な経緯で、OEBPSフォルダじゃないとちゃんと読み込んでくれないePubリーダーも存在するらしい
ので念のために OEBPS にします。
さあ OEBPS ディレクトリーを作ります。ePub ドキュメントの中身は、このディレクトリーの中に置く様にします。
$ mkdir OEBPS
今回は、hello.xhtml というサンプル・テキストだけ置くことにしましょう。この場合 opf ファイルの中身は次の様になります:
<?xml version="1.0" encoding="UTF-8"?> <package version="2.0" xmlns="http://www.idpf.org/2007/opf" unique-identifier="BookId"> <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf"> <dc:title>ePub 2.0 ことはじめ</dc:title> <dc:creator opf:role="aut">絳アト</dc:creator> <dc:language>ja</dc:language> <dc:identifier id="BookId">urn:uuid:akaato.com20110418</dc:identifier> </metadata> <manifest> <item id="ncx" href="toc.ncx" media-type="text/xml" /> <item id="hello" href="hello.xhtml" media-type="application/xhtml+xml" /> </manifest> <spine toc="ncx"> <itemref idref="hello" /> </spine> </package>
metadata 要素の中に、書名・著者名・言語を入れます。重要なのは dc:identifier 要素で、世界で唯一の文字列にしなければなりません。本であれば ISBN を使うと良いでしょう。私は、自分のサイト名と作成年月日を ID にしました。
manifest 要素には、中に入っている全てのファイルとそのファイルの種類 (media-type) を指定します。今回は、XHTML ファイルと目次ファイルの二つです。item 要素には必ず id 属性を付けます。この id 属性は、次の spine 要素の中で使うことになります。
spine 要素では、ファイルを読む「順番」を上から順に指定してゆきます。今回はファイルが一つなので順番は関係ありませんが...。idref 属性で指定する ID は、先の manifest 要素の中の item 要素で書いた id 属性値です。
ncx ファイル
ncx ファイルは目次のためのファイルです。今回は「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:tatlPageCount" content="0"/> <meta name="dtb:maxPageNumber" content="0"/> </head> <docTitle> <text>ePub 2.0 ことはじめ</text> </docTitle> <navMap> <navPoint id="hello" playOrder="1"> <navLabel> <text>サンプル</text> </navLabel> <content src="hello.xhtml"/> </navPoint> </navMap> </ncx>
見た目の通りですが、1 つ注意点。<meta name="dtb:uid" content="akaato.com20110418"/>
で、content 属性の値には、content.opf ファイルの dc:identifier 属性の値から先頭の「urn:uuid:」を除いた文字列を入れます。
XHTML ファイル
本当にシンプルな XHTML ファイルを作りましょう。ファイル名は hello.xhtml です。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 STRICT//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <title>こんにちは</title> </head> <body> <p>こんにちは</p> </body> </html>
ePub の作成
ePub を作るファイルは全て用意できました。それでは、これらのファイルを固めて ePub ファイルにしましょう。
ePub は zip で固めます。注意点は 2 つ。1 つ目は圧縮しないこと。2 つ目は mimetype ファイルを zip アーカイブの先頭に置くことです。以下のコマンドを実行すると、上記の条件を満たした zip ファイルが出来上がります。
$ zip -0 ../epub-first-step.epub mimetype $ zip -r ../epub-first-step.epub * -x mimetype
次回は、ePub ビューワーで作成した ePub ドキュメントを見てみましょう。
0 件のコメント:
コメントを投稿