電書部技術班,電子書籍配信サーバーに挑む

第5回 電書原稿からEPUBをつくりだす

この記事を読むのに必要な時間:およそ 5 分

電書部EPUB

今回は電書部版EPUB作成の要件と入出力,そしてEPUB生成について説明します。EPUBそのものについて詳しくは説明しませんが,流れの中で必要なことにはふれていきます。

要件

ターゲット

EPUBリーダは世の中にいろいろあります。第1回で説明したように,電書部ではまずはiPhoneアプリのStanzaをターゲットにしました。

図1 iPhone Stanzaで表示した電書

図1 iPhone Stanzaで表示した電書

変換処理

決められた原稿フォーマットからEPUBに変換するには,おおまかに次の処理が必要になります。

  • 本文をXHTMLに変換する
  • 適切なcssを用意する
  • EPUBの必須ファイルを用意する。特にopf/ncxを生成する
  • ファイルを適切に配置する
  • EPUBの規格にしたがったzipファイルをつくりだす

変換後のEPUB

変換後のEPUBは,電書部の配信サーバで処理できる構造になっている必要があります。特に,EPUBのどこかに購入者のe-mailアドレスを入れる必要があります。

入力される原稿

入力される原稿の形式については,前回説明しました。ここでは全体像のみ再掲します。

電書原稿の例

densho_sample/ # 任意のディレクトリ
  00_maegaki.txt  # 本文原稿
  01_genkou.txt
  02_genkou.txt
  03_atogaki.txt
  04_writers.txt
  cover.txt       # 表紙原稿
  cover.jpg       # 画像ファイル
  capture.jpg
  okuduke.txt     # 書籍情報
  toc.txt         # 目次情報

出力されるEPUB

EPUBファイルはzip圧縮されたファイルです。電書部原稿から生成したEPUBの中は次のようになります。

変換後EPUB内文書の例

mimetype
META-INF/container.xml
OEBPS/content.opf
OEBPS/toc.ncx
OEBPS/css/miraitext.css
OEBPS/img/cover.jpg
OEBPS/img/capture.jpg
OEBPS/text/cover.html
OEBPS/text/00_maegaki.html
OEBPS/text/01_genkou.html
OEBPS/text/02_genkou.html
OEBPS/text/03_atogaki.html
OEBPS/text/04_writers.html
OEBPS/text/04_writers.html
OEBPS/text/okuduke.html

okuduke.htmlを除くhtmlファイルは,原稿のテキストファイル(YDML)から生成されています。cssファイルは,YDMLに対応する固定のものを使います。EPUB仕様に関わるファイル(mimetype,container.xml, content.opf, toc.ncx)について,以下で説明します。

mimetype

mimetypeをEPUBのzipアーカイブ先頭に非圧縮で格納します。内容は固定です。

mimetype

application/epub+zip

container.xml

container.xmlは,EPUBの構成情報に関するメタデータをおさめたOPFファイルを指し示すファイルです。電書部EPUBではOPFファイルの場所を固定していますので,内容は電書によらず同じになります。

電書部EPUBのcontainer.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>

content.opf

content.opfは,EPUBの構成情報をおさめます。

content.opfの例

<?xml version="1.0" encoding="UTF-8"?>
<package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="BookID">
  <metadata xmlns:opf="http://www.idpf.org/2007/opf" xmlns:dc="http://purl.org/dc/elements/1.1/">
    <dc:language>ja</dc:language>
    <dc:publisher>電子書籍部(米光一成)</dc:publisher>
    <dc:creator>電子書籍部</dc:creator>
    <dc:date>2010-11-30</dc:date>
    <dc:title>サンプル電書</dc:title>
    <dc:identifier id="BookID" opf:scheme="URL">http://lv99.com/densho/ebooksdensho_sample2010/11/30</dc:identifier>
    <dc:contributor>構成・テキスト:XXX
グラフィックス:XXX
写真:XXX</dc:contributor>
    <meta name="cover" content="imgcover"/>
  </metadata>
  <manifest>
    <item id="imgcover" href="img/cover.jpg" media-type="image/jpeg"/>
    <item id="imgcapture" href="img/capture.jpg" media-type="image/jpeg"/>
    <item id="cover" href="text/cover.html" media-type="application/xhtml+xml"/>
    <item id="chap00_maegaki" href="text/00_maegaki.html" media-type="application/xhtml+xml"/>
    <item id="chap01_genkou" href="text/01_genkou.html" media-type="application/xhtml+xml"/>
    <item id="chap02_genkou" href="text/02_genkou.html" media-type="application/xhtml+xml"/>
    <item id="chap03_atogaki" href="text/03_atogaki.html" media-type="application/xhtml+xml"/>
    <item id="chap04_writers" href="text/04_writers.html" media-type="application/xhtml+xml"/>
    <item id="css" href="css/miraitext.css" media-type="text/css"/>
    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
    <item id="okuduke" href="text/okuduke.html" media-type="application/xhtml+xml"/>
  </manifest>
  <spine toc="ncx">
    <itemref idref="cover"/>
    <itemref idref="chap00_maegaki"/>
    <itemref idref="chap01_genkou"/>
    <itemref idref="chap02_genkou"/>
    <itemref idref="chap03_atogaki"/>
    <itemref idref="chap04_writers"/>
    <itemref idref="okuduke"/>
  </spine>
</package>

metadata要素に,okuduke.txtにほぼ対応する情報が入ります。<meta name="cover">が指定されていると,多くのEPUBリーダでは対応するイメージを表紙画像として扱います。

manifest要素に,EPUBを構成するファイルが記述されます。そしてspine要素に,表示順序が規定されます。

著者プロフィール

小嶋智(こじまさとし)

電書部技術班EPUB係。東京都出身。ずっとプリンタやスキャナを制御するPCのソフトウェアをつくってきたが,今年になってからJavaでWebアプリをつくるのが仕事になった。よく使うGoFパターンはState。好きな飲み物はビール。twitterは@skoji

コメント

コメントの記入