電書部EPUB
今回は電書部版EPUB作成の要件と入出力、
要件
ターゲット
EPUBリーダは世の中にいろいろあります。第1回で説明したように、

変換処理
決められた原稿フォーマットからEPUBに変換するには、
- 本文をXHTMLに変換する
- 適切なcssを用意する
- EPUBの必須ファイルを用意する。特にopf/
ncxを生成する - ファイルを適切に配置する
- EPUBの規格にしたがったzipファイルをつくりだす
変換後のEPUB
変換後のEPUBは、
入力される原稿
入力される原稿の形式については、
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の中は次のようになります。
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.
mimetype
mimetypeをEPUBのzipアーカイブ先頭に非圧縮で格納します。内容は固定です。
application/epub+zip
container.xml
container.
<?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.
<?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要素に、
manifest要素に、
toc.ncx
toc.
<?xml version="1.0" encoding="UTF-8"?>
<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
<head>
<meta name="dtb:uid" content="http://lv99.com/densho/ebooksdensho_sample2010/11/30"/>
<meta name="dtb:depth" content="1"/>
<meta name="dtb:totalPageCount" content="0"/>
<meta name="dtb:maxPageNumber" content="0"/>
</head>
<docTitle>
<text>サンプル電書</text>
</docTitle>
<navMap>
<navPoint id="chap00_maegaki" playOrder="1">
<navLabel>
<text> 前書き</text>
</navLabel>
<content src="text/00_maegaki.html"/>
</navPoint>
<navPoint id="chap01_genkou" playOrder="2">
<navLabel>
<text> この本に書かれていること</text>
</navLabel>
<content src="text/01_genkou.html"/>
</navPoint>
<navPoint id="chap04_writers" playOrder="3">
<navLabel>
<text> 執筆者プロフィール</text>
</navLabel>
<content src="text/04_writers.html"/>
</navPoint>
</navMap>
</ncx>
okuduke.html
okuduke.
<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<title>サンプル電書</title>
<link rel="stylesheet" type="text/css" href="../css/miraitext.css"></link>
</head>
<body>
<p class="backcover">
サンプル電書 <br />
電子書籍部 <br />
構成・テキスト:XXX<br />グラフィックス:XXX<br />写真:XXX<br />
2010/11/30 <br />
電子書籍部(米光一成) <br />
(this book is for !!!-mail-!!!)</p>
</body>
</html>
内容は、
そのほかのXTHMLファイルはYDMLからの変換によって生成されます。
入出力の対応
電書部のEPUBを構成するファイルは、
- 原稿のメタデータおよび、
原稿ファイルの情報からつくられるメタデータ - 原稿テキストから変換して作られるテキスト
- メタデータなどから生成されるテキスト
- 原稿の中からそのままコピーされるデータ
- 電書によらず内容が固定のデータ
入出力の概要は、

コンバータの構成
コンバータは次の要素から構成されています。
YDMLメタデータハンドラ
コンバータは、
- okuduke.
txtを読みとる - toc.
txtを読みとる - okuduke.
htmlを生成する - EPUBライブラリに必要なメタデータを渡す
基本的には、
YDML to HTML変換
cover.
EPUB生成ライブラリ
最終的なEPUBを生成します。このライブラリがmimetype/
そして、
具体的なライブラリとしてはEPUB生成ライブラリのgepubおよびYDML関連ユーティリティのydml_
発生した問題
ここまでで説明したように、
リーダのふるまい
EPUB仕様は標準化されているものの実際にどのような見た目になるのかはリーダ次第です。また、
たとえばiPhone Stanzaでは、
また、
ルビ
原稿にルビがあった場合には、
ところがiPhoneがiOS4になってから、
EPUBのメインターゲットをiPhoneとしている電書部では仕方なく、
今後の予定
現在は、
EPUBライブラリgepubは、