EPUB で電子書籍を作成する

オープン XML ベースの電子書籍フォーマット

文書を配布したり、電子書籍を作成したり、あるいは単にお気に入りのブログ投稿をアーカイブしたりする必要はありませんか? EPUB は、XML、CSS、XHTML などのお馴染みの技術をベースとした電子書籍のためのオープン仕様です。EPUB ファイルは携帯型の電子書籍リーダーや携帯電話、そしてデスクトップ・コンピューター上でも読み取ることができます。このチュートリアルでは EPUB フォーマットを詳細に説明し、Java 技術を使用して EPUB を妥当性検証する方法を説明した後、DocBook と Python を使ってEPUB の作成を自動化する手順をステップ・バイ・ステップで説明します。

2009年 2月 05日 ― 読者からのコメントに対応して、リスト 3 の内容を改訂し、epub-raw-files.zip ファイルを更新しました (「ダウンロード」を参照)。

2010年 4月 27日 ― epub-raw-files.zip ファイルを更新しました (「ダウンロード」を参照)。

2010年 7月 03日 ― 著者のリクエストにより、リスト 3リスト 8 の内容を改訂し、epub-raw-files.zip ファイルも更新しました (「ダウンロード」を参照)。

2011年 1月 11日 ― 著者のリクエストにより、リスト 5 の内容を改訂し、コードの 2 行目を <item id="ncx" href="toc.ncx" media-type="text/xml"/>; から <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/> に変更しました。

2011年 7月 12日 ― 読者からのコメントに対応して、リスト 14 の内容を改訂し、コードの 1 行目 <?xml version="1.0" encoding="utf-8"?`> から、行の終わり近くにある「`」文字を削除しました。改訂後のコードは <?xml version="1.0" encoding="utf-8"?> となっています。

Liza Daly, Software Engineer and Owner, Threepress Consulting Inc.

Photo of Liza DalyLiza Daly は、出版業界向けアプリケーションを専門とするソフトウェア・エンジニアです。Oxford University Press、O'Reilly Media やその他の出版社の主要なオンライン製品の開発リーダーを務めてきました。現在、コンサルタントとして独立している彼女は、電子ブック・アプリケーションの開発を目的とするオープンソース・プロジェクト、Threepress の創始者でもあります。



2011年 8月 26日

始める前に

このチュートリアルでは、EPUB フォーマットの電子書籍を作成する手順を説明します。EPUB は電子書籍のデファクト・スタンダードとして登場した、開発者にとって扱いやすい XML ベースのフォーマットです。ただし、EPUB は書籍にしか使えないわけではありません。EPUB では、以下のタスクも実行することができます。

  • 文書をオフラインで読めるように、あるいは配布しやすいようにバンドルする
  • ブログ投稿やその他の Web 固有のコンテンツをパッケージ化する
  • 一般的なオープンソースのツールを使って作成、検索、再編集する

このチュートリアルについて

よく使われる頭字語

  • API: Application Programming Interface
  • CSS: Cascading StyleSheets
  • DOM: Document Object Model
  • DTD: Document Type Definition
  • GUI: Graphical User Interface
  • HTML: HyperText Markup Language
  • SAX: Simple API for XML
  • W3C: World Wide Web Consortium
  • XHTML: Extensible HTML
  • XML: Extensible Markup Language

このチュートリアルでは、まず初めに EPUB 書籍を手動で生成することによって、EPUB のすべてのコンポーネントと EPUB に必要なファイルについて学びます。次に、完成した電子書籍をバンドルし、仕様と照らし合わせて妥当性を検証する方法、そしてさまざまな読み取りシステムでテストする方法を説明します。

最後に、DocBook XML (技術文書に最も広く適用されている標準の 1 つ) から EPUB を生成する場合について取り上げ、Python を使用して DocBook から EPUB を作成するプロセスを初めから終わりまで完全に自動化する方法を紹介します。

目標

このチュートリアルの内容は以下のとおりです。

  • EPUB とは何か、EPUB を規定しているのは誰か、そして誰が EPUB を採用しているのかを学びます。
  • EPUB バンドルの構造を、必要なファイルとそのスキーマを含め、詳しく探ります。
  • 単純なコンテンツを使って、有効な EPUB ファイルを一から作成します。
  • オープンソースのツールを使用して、技術文書と書籍に広く使用されているスキーマ、DocBook から EPUB ファイルを生成します。
  • Python と DocBook を使用して EPUB への変換を自動化します。

前提条件

このチュートリアルでは特定のオペレーティング・システムを前提としません。ただし、読者がファイルおよびディレクトリーの作成方法について十分に理解していることを前提とします。また、XML エディターまたは統合開発環境 (IDE) を使用することを強くお勧めします。

チュートリアルの後半で取り上げる EPUB の作成を自動化する手順では、読者が XML を処理する基本技術のいずれか (XSLT、DOM、または SAX をベースにした構文解析) と、XML 固有の API を使って XML 文書を作成する方法を理解していることを前提とします。

このチュートリアルを完了するのに、EPUB ファイル・フォーマットについて熟知している必要はありません。

システム要件

チュートリアルに記載するサンプルを実行するには、Java インタープリター (バージョン 1.5 以降) および Python インタープリター (バージョン 2.4 以降)、そしてこのそれぞれに必要な XML ライブラリーが揃っていなければなりません。ただし、経験豊富な XML 開発者であれば、XML ライブラリーを使って任意のプログラミング言語にこれらのサンプルを適応させることができるはずです。


EPUB フォーマットの概要

EPUB の背景、最も一般的な EPUB の用途、そして EPUB と PDF (Portable Document Format) との違いを学んでください。

EPUB とは何か?

EPUB とは、電子出版業界の標準化団体である IDPF (International Digital Publishing Forum) によって標準化された、リフロー (再流し込み) が可能な電子書籍および出版物のための XML フォーマットです。IDPF が 2007年 10月に正式に EPUB を承認した後、2008年までには、瞬く間に主要な出版社で EPUB が採用されるに至りました。EPUB フォーマットは多種多様なオープンソースのソフトウェアや市販のソフトウェアを使って読み取ることができるだけでなく、主要なすべてのオペレーティング・システム、Sony PRS などの電子書籍リーダー、そして Apple iPhone などの小型機器で使用することができます。

誰が EPUB を作成しているのか? EPUB は書籍にしか使用できないのか?

最初に EPUB を採用したのは昔ながらの出版社でしたが、EPUB のフォーマットには EPUB の使用を電子書籍に制限するような要素は何もありません。無料で入手できるソフトウェア・ツールを使って、Web ページを EPUB としてバンドルしたり、プレーン・テキスト・ファイルを変換したり、あるいは既存の DocBook XML 文書を整形式の妥当な EPUB に変換したりすることも可能です (DocBook から EPUB への変換については、チュートリアルの後半で取り上げます)。

EPUB は PDF とどこが違うのか?

PDF は今でも世界中で最もよく使用されている電子文書フォーマットです。書籍の出版者の観点からは、PDF には以下の利点があります。

  • PDF ファイルでは、ピクセル単位で完全にレイアウトを制御することができ、段組みや、偶数ページと奇数ページでスタイルを変えるといった、複雑な出力に対応したレイアウトにすることも可能です。
  • PDF を生成するには、Microsoft Office Word や Adobe InDesign をはじめ、多種多様な GUI ベースの文書ツールを使用することができます。
  • PDF リーダーは至るところに普及していて、最近のほとんどのコンピューターにインストールされています。
  • PDF では特定のフォントを組み込むことで、最終出力を正確に制御することができます。

1 つになった 3 つの標準

EPUB は以下の 3 つの IDPF 仕様からなりますが、実際には、この 3 つをまとめて EPeUB と総称して差し支えありません。

  • OCF (Open eBook Publication Structure Container Format): EPUB アーカイブのディレクトリー・ツリー構造およびファイル・フォーマット (ZIP) を指定しています。
  • OPS (Open Publication Structure): 書籍のコンテンツに使用可能なフォーマット (XHTML および CSS など) を中心に、電子書籍の共通語彙を定義しています。
  • OPF (Open Packaging Format): EPUB の必須メタデータとオプション・メタデータ、読み取り順、および目次について記述しています。

上記の他、EPUB は EPUB アーカイブ内に含まれる特定のタイプのコンテンツに対して、XHTML バージョン 1.0 や DAISY (Digital Accessible Information SYstem) などの標準も再利用しています。

一方、ソフトウェア開発者の観点から見ると、PDF は以下の理由から、最適と言うには程遠いフォーマットです。

  • 簡単に習得できる標準ではないため、独自の PDF 生成コードを作成するのは容易なことでありません。
  • PDF は今では ISO (International Organization for Standardization) 標準となっていますが (ISO 32000-1:2008)、従来から Adobe Systems 一社によって管理されています。
  • PDF ライブラリーはほとんどのプログラミング言語で用意されているのもの、その多くは商用であるか、GUI アプリケーションに組み込まれています。したがって、外部プロセスによって制御するのは簡単ではありません。また、無料のライブラリーのすべてがアクティブに保守を継続しているわけでもありません。
  • PDF 固有のテキストは、プログラムによって抽出および検索することができますが、Web で使いやすいフォーマットに簡単に、あるいは確実に変換できるようにタグが付けられている PDF はほとんどありません。
  • PDF のリフロー (再流し込み) は容易ではありません。つまり、小さな画面や大幅なレイアウト変更への対応が十分にはできないということです。

EPUB が開発者にとって扱いやすい理由

EPUB は、開発者にとって PDF が使いにくいとされるすべての点に対処します。EPUB は、規定の順序でファイルが含まれる、単純な ZIP フォーマットのファイル (拡張子 .epub) です。この ZIP アーカイブを作成する場合、その方法に関していくつか注意が必要な要件がありますが (「EPUB ファイルを ZIP アーカイブとしてバンドルする」で詳しく説明)、それを抜かせば、EPUB は以下のように簡単に扱えるようになっています。

  • EPUB では、ほぼすべてのファイルが XML で構成されています。特殊なソフトウェアや専用のソフトウェアがなくても、標準的な XML ツールキットを使って EPUB ファイルを作成することができます。
  • EPUB のコンテンツ (電子書籍の実際のテキスト) は、ほぼ必ずと言ってよいほど XHTML バージョン 1.1 です (代わりに使用できるフォーマットは、視覚障害者用に書籍をエンコードするための標準である DTBook です。DTBook についてはこのチュートリアルで取り上げないので、詳細は「参考文献」を参照してください)。
  • EPUB XML スキーマの大部分は、自由に利用できる公開済みの仕様から引用されています。

2 つの重要な点は、EPUB のメタデータは XML であること、そして EPUB のコンテンツは XHTML であることです。文書の作成システムが Web 用の出力を生成するか、XML をベースとしているとしたら、そのシステムは EPUB も生成できると言ってほぼ間違いありません。


初めての EPUB の作成

EPUB バンドルが仕様に最低限準拠するためには、必要なファイルがいくつかあります。この仕様は、EPUB アーカイブに含まれるファイルのフォーマット、内容、および格納場所に関してはかなり厳格です。このセクションでは、EPUB 標準に取り組む際に知っておかなければならない事項を説明します。

EPUB バンドルの詳細

最小限の EPUB ファイルの基本構造は、リスト 1 のパターンに従います。配布の準備が整ったら、このディレクトリー構造をまとめて ZIP 形式のファイルにバンドルします。その際に満たさなければならないいくつかの特別な要件については、「EPUB ファイルを ZIP アーカイブとしてバンドルする」で説明します。

リスト 1. 単純な EPUB アーカイブのディレクトリーおよびファイルのレイアウト
mimetype
META-INF/
   container.xml
OEBPS/
  content.opf
  title.html
  content.html
  stylesheet.css
  toc.ncx
  images/
     cover.png

注: このパターンに従ったサンプル書籍は「ダウンロード」から入手できますが、チュートリアルの手順に沿って、ご自分で作成することをお勧めします。

EPUB 書籍を作成する際の最初のステップは、EPUB プロジェクトのディレクトリーを作成することです。それには、テキスト・エディターまたは IDE (Eclipse など) を開いてください。お勧めのエディターは、XML モードがあるエディターです。具体的には、「参考文献」に記載されている Relax NG スキーマに対する妥当性検証を実行できるエディターを使用してください。

mimetype ファイル

mimetype ファイルは極めて単純なファイルですが、これは必須のファイルであり、そのファイル名は mimetype でなければなりません。このファイルの内容は常に以下のようになります。

application/epub+zip

mimetype ファイル内には改行やキャリッジ・リターンを含めることはできない点に注意してください。

さらに、mimetype ファイルは ZIP アーカイブの先頭に置かれていなければならず、ファイル自体は圧縮されていないことが求められます。共通の ZIP 引数を使用して、このファイルをアーカイブに含める方法については、「EPUB ファイルを ZIP アーカイブとしてバンドルする」で説明します。とりあえず、今はこのファイルを作成して保存し、EPUB プロジェクトのルート・レベルに置かれていることを確認してください。

META-INF/container.xml

EPUB のルート・レベルには META-INF ディレクトリーが必要です。このディレクトリー内に、container.xml という名前のファイルを格納します。これは電子書籍のメタデータの場所を示すファイルなので、EPUB 読み取りシステムは最初にこのファイルを探します。

META-INF という名前のディレクトリーを作成し、このディレクトリー内に container.xml という名前のファイルを新規に作成して、書き込み用にファイルを開きます。このコンテナー・ファイルはかなり小さいものですが、その構造に関しては厳しい要件があります。META-INF/container.xml に、リスト 2 のコードを貼り付けてください。

リスト 2. サンプル 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>

このファイルで可変の部分は唯一、full-path の値 (太字で記載) のみです。ディレクトリー・パスは、META-INF ディレクトリーを基準とした相対パスではなく、EPUB ファイル自体のルートを基準とした相対パスであることに注意してください。

META-INF に関する追加事項

META-INF ディレクトリーには、いくつかのオプション・ファイルを含めることもできます。これらのファイルは、EPUB がデジタル署名、暗号化、およびデジタル著作権管理 (DRM) をサポートできるようにするためのものです。デジタル署名、暗号化、DRM については、このチュートリアルでは取り上げません。詳細については、OCF 仕様を参照してください。

EPUB アーカイブ内での場所が厳密に規定されているのは、mimetype ファイルと container ファイルのみです。推奨案として (必須ではありません)、EPUB の残りのファイルはサブディレクトリーに保管してください (慣例では、このサブディレクトリーには通常 OEBPS (Open EBook Publication Structure の略) という名前を付けますが、どのような名前を付けても構いません)。

次に、EPUB プロジェクト内に OEBPS というディレクトリーを作成します。チュートリアルの次のセクションでは、この OEBPS に保管するファイル、つまり電子書籍の本体となるメタデータとページについて説明します。

OPF のメタデータ・ファイル

OPF (Open Packaging Format) ファイルの名前は任意ですが、通常は content.opf という名前が付けられます。このファイルが指定するのは、書籍のテキストから他の媒体 (画像など) に至るまで、書籍に含まれるあらゆるコンテンツがそれぞれ置かれている場所です。また、目次用のメタデータ・ファイル NCX (Navigation Center eXtended) の場所も指定します。

OPF のファイルは、EPUB 仕様のなかで最も複雑なメタデータです。OEBPS/content.opf を作成したら、リスト 3 の内容を貼り付けてください。

リスト 3. サンプル・メタデータを含めた OPF のコンテンツ・ファイル
<?xml version='1.0' encoding='utf-8'?>
<package xmlns="http://www.idpf.org/2007/opf"
            xmlns:dc="http://purl.org/dc/elements/1.1/"
            unique-identifier="bookid" version="2.0">
  <metadata>
    <dc:title>Hello World: My First EPUB</dc:title>
    <dc:creator>My Name</dc:creator>
    <dc:identifier
id="bookid">urn:uuid:0cc33cbd-94e2-49c1-909a-72ae16bc2658</dc:identifier>
    <dc:language>en-US</dc:language>
    <meta name="cover" content="cover-image" />
  </metadata>
  <manifest>
    <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
    <item id="cover" href="title.html" media-type="application/xhtml+xml"/>
    <item id="content" href="content.html"
media-type="application/xhtml+xml"/>
    <item id="cover-image" href="images/cover.png" media-type="image/png"/>
    <item id="css" href="stylesheet.css" media-type="text/css"/>
  </manifest>
  <spine toc="ncx">
    <itemref idref="cover" linear="no"/>
    <itemref idref="content"/>
  </spine>
  <guide>
    <reference href="title.html" type="cover" title="Cover"/>
  </guide>
</package>

OPF のスキーマおよび名前空間

OPF の文書自体は、名前空間 http://www.idpf.org/2007/opf を使用する必要があります。一方、メタデータの場所は、DCMI (Dublin Core Metadata Initiative) の名前空間 http://purl.org/dc/elements/1.1/ です。

この機会に、OPF およびDCMI のスキーマを XML エディターに追加しておいてください。EPUB で使用するすべてのスキーマは、「ダウンロード」から入手することができます。

メタデータ

Dublin Core は、EPUB 仕様自体には含まれていない、さまざまなデジタル素材を記述するための一連の共通メタデータ語彙を定義しています。これらの語彙はすべて、OPF のメタデータ (metadata) セクションで使用することができます。配布目的で EPUB を作成するときには、このセクションにできる限り詳細な情報を含める必要がありますが、手始めとしてはリスト 4 に抜粋した内容で十分です。

リスト 4. OPF のメタデータの抜粋
...
<metadata>
  <dc:title>Hello World: My First EPUB</dc:title>
  <dc:creator>My Name</dc:creator>
  <dc:identifier id="bookid">urn:uuid:12345</dc:identifier>
  <meta name="cover" content="cover-image" />
</metadata>
...

必須の語彙は、title と identifier です。EPUB 仕様によると、identifier は一意の値でなければなりませんが、その一意の値の定義は電子書籍の作成者に一任されます。書籍の発行者は、このフィールドに ISBM または米国議会図書館番号を設定するのが通常です。その他の EPUB 作成者については、URL を使用するか、ランダムに生成される長い UUID (Unique User ID) を使用することを検討してください。注意する点として、unique-identifier 属性の値は、dc:identifier 要素の ID 属性と一致していなければなりません。

コンテンツに応じて、例えば以下のメタデータを追加することが考えられます。

  • 言語 (dc:language)
  • 発行日 (dc:date)
  • 発行者 (dc:publisher) (会社名または個人名にすることができます。)
  • 著作権情報 (dc:rights) (クリエイティブ・コモンズ (CC) ライセンスの下で作品をリリースする場合には、ここに該当するライセンスの URL を指定します。)

DCMI についての詳細は、「参考文献」を参照してください。

EPUB 仕様では直接指定されていませんが、表紙と画像を移植しやすくするために、name 属性を cover に設定した meta 要素を含めることをお勧めします。EPUB レンダラーによっては、画像ファイルを表紙として使用することを選ぶものもあれば、インライン化された表紙画像が含まれる XHTML ファイルを使用するものもあります。このサンプルには、両方の形式が示されています。meta 要素の content 属性の値は、マニフェスト (OPF ファイルの次の部分) に含まれる書籍の表紙画像の ID でなければなりません。

マニフェスト

OPF のマニフェスト (manifest) には、コンテンツの一部として EPUB に含まれている (メタデータを除く) すべてのリソースが記載されます。つまり、マニフェストは一般に、電子書籍のテキストといくつかの関連する媒体 (画像など) を構成する XHTML ファイルのリストです。EPUB では書籍のコンテンツを CSS でスタイル設定することを推奨しているため、CSS ファイルもマニフェスト内に含められます。マニフェスト・セクションには、電子書籍を構成するすべてのファイルを記載しなければなりません。

リスト 5 に、マニフェスト・セクションの抜粋を示します。

リスト 5. OPF のマニフェストの抜粋
...
<manifest>
  <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
  <item id="cover" href="title.html" media-type="application/xhtml+xml"/>
  <item id="content" href="content.html" media-type="application/xhtml+xml"/>
  <item id="cover-image" href="images/cover.png" media-type="image/png"/>
  <item id="css" href="stylesheet.css" media-type="text/css"/>
</manifest>
...

OPF の高度なマニフェスト

より高度なマニフェスト・ファイルのサンプルには、複数の XHTML ファイルならびに画像と CSS が含まれています。「ダウンロード」から、一般的なサンプルが含まれる完全な EPUB を入手してください。

最初に含めなければならない項目は、toc.ncx です (次のセクションで説明します)。すべての項目には該当する media-type 値が設定されていること、そして XHTML コンテンツのメディア・タイプが application/xhtml+xml になっていることに注意してください。値はこのとおりである必要があり、text/html やその他のタイプにすることはできません。

EPUB がコア・タイプとしてサポートする画像ファイルの形式は、JPEG (Joint Photographic Experts Group)、PNG (Portable Network Graphics)、GIF (Graphics Interchange Format)、SVG (Scalable Vector Graphics) の 4 つです。サポートされていないファイル・タイプでも、フォールバックをコア・タイプに指定すれば組み込むことができます。フォールバック項目についての詳細は、OPF 仕様を参照してください。

href 属性の値は、OPF ファイルの相対 URI (Uniform Resource Identifier) でなければなりません (この設定は、container.xml ファイル内の OPF ファイルへの参照と混同しやすいかもしれません。OPF ファイルへの参照は、EPUB 全体に対する相対パスでなければなりません)。このサンプルの場合、OPF ファイルはコンテンツと同じ OEBPS ディレクトリーに保管されるため、パス情報は不要です。

スパイン

マニフェストは EPUB リーダーに対し、アーカイブに含まれるファイルを指示しますが、これらのファイルが出現する順番、つまり EPUB の用語で言う電子書籍の線形読み取り順 (linear reading order) は、スパイン (spine) が指定します。OPF のスパインについては、書籍の「ページ」順を定義する要素であると見なすことができます。スパインは文書の上から下への順で読み取られます。リスト 6 に、OPF ファイルからの抜粋を記載します。

リスト 6. OPF のスパインの抜粋
...
<spine toc="ncx">
  <itemref idref="cover" linear="no"/>
  <itemref idref="content"/>
</spine>
...

itemref 要素ごとに必須の idref 属性があります。この属性は、マニフェストに含まれる ID のいずれかと一致しなければなりません。toc 属性も必須です。この属性は、マニフェスト内で NCX 目次ファイルの名前を指定する ID を参照します。

スパインの linear 属性は、その項目を線形読み取り順の一部と見なすか、あるいは読み取り順とは関係のない前付けまたは後付けの一部と見なすかを指定します。表紙ページについては、常に linear=no として定義することをお勧めします。EPUB 準拠の読み取りシステムは、書籍を開くときに、スパインで linear=no と設定されていない最初の項目を表示するためです。

ガイド

OPF コンテンツ・ファイルの最後にあるのは、ガイド (guide) セクションです。このセクションはオプションですが、使用することをお勧めします。リスト 7 に、ファイルから抜粋したガイド・セクションを記載します。

リスト 7. OPF のガイドの抜粋
...
<guide>
  <reference href="cover.html" type="cover" title="Cover"/>
</guide>
...

ガイドは、EPUB 読み取りシステムにセマンティックな情報を提供する手段となります。マニフェストが EPUB 内の物理的なリソースを定義し、スパインがリソースの順序に関する情報を提供する一方、ガイドはセクションが何を意味するものであるのかを説明します。以下に、OPF のガイドで使用できる値をいくつか記載します。

  • cover: 書籍の表紙
  • title-page: 著者および発行者に関する情報が記載されたページ
  • toc: 目次

使用できるすべての値については、「参考文献」に記載されている OPF 2.0 仕様を参照してください。

NCX 目次

NCX と OPF との間でのメタデータの重複

NCX は別の標準から取り入れたものなので、NCX でエンコードされる情報と OPF でエンコードされる情報には多少の重複があります。EPUB をプログラムによって生成するときには、同じ 1 つのコードが 2 つの異なるファイルを出力するため、この重複が問題になることはめったにありませんが、EPUB リーダーによっては、NCX ファイルと OPF ファイルのいずれか一方の値だけを使用する場合があります。したがって、両方のファイルに同じ情報を入れるように注意してください。

OCF ファイルは EPUB の一部として定義されていますが、最後に説明する主要なメタデータ・ファイルは、別の電子書籍標準から取り入れられています。DAISY は、視覚障害者や出力された印刷物を読むことができない人々など、従来の書籍を使用することのできない読者を対象としたデータ・フォーマットを開発しているコンソーシアムです。EPUB は、この DAISY による NCX DTD を取り入れました。NCX は、電子書籍の目次を定義します。複雑な書籍での目次は、部、章、節がネストされた階層構造となるのが通常です。

XML エディターを使用して OEBPS/toc.ncx を作成し、そのファイルにリスト 8 のコードを含めてください。

リスト 8. 単純な NCX ファイル
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE ncx PUBLIC "-//NISO//DTD ncx 2005-1//EN"
                 "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd">
<ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1">
  <head>
    <meta name="dtb:uid"
content="urn:uuid:0cc33cbd-94e2-49c1-909a-72ae16bc2658"/>
    <meta name="dtb:depth" content="1"/>
    <meta name="dtb:totalPageCount" content="0"/>
    <meta name="dtb:maxPageNumber" content="0"/>
  </head>
  <docTitle>
    <text>Hello World: My First EPUB</text>
  </docTitle>
  <navMap>
    <navPoint id="navpoint-1" playOrder="1">
      <navLabel>
        <text>Book cover</text>
      </navLabel>
      <content src="title.html"/>
    </navPoint>
    <navPoint id="navpoint-2" playOrder="2">
      <navLabel>
        <text>Contents</text>
      </navLabel>
      <content src="content.html"/>
    </navPoint>
  </navMap>
</ncx>

NCX メタデータ

DTD の NCX <head> タグには、以下の 4 つの meta 要素を組み込む必要があります。

  • uid: 電子書籍の一意の ID です。この要素は、OPF ファイルに指定された dc:identifier と一致していなければなりません。
  • depth: 目次の階層レベルを反映します。このサンプルにはレベルが 1 つしかないので、値は 1 となっています。
  • totalPageCount および maxPageNumber: 書籍を紙に印刷する場合にのみ適用されるので、値は 0 のままで構いません。

docTitle/text のコンテンツは、出版物のタイトルです。これは、OPF での dc:title の値と一致します。

NCX navMap

NCX と OPF のスパインとの違い

どちらのファイルも文書の順番およびコンテンツを記述するものであるため、この 2 つを混同するのも仕方ありません。NCX と OPF のスパインの違いを最も簡単に説明する方法は、印刷された書籍で例えることです。OPF のスパインは、書籍を構成する各セクションをどのように結合するかを記述します。例えば、1 章の最後のページをめくると、2 章の最初のページが表示されるようにするといったことです。一方、NCX は書籍の最初に記載される目次を記述します。目次には書籍を構成する、部、章、節などが必ず含まれますが、部、章、節といった形ではページに現れないもっと小さなセクションが目次に含まれる場合もあります。

確実な経験則は、NCX に含まれる navPoint 要素の数は、OPF のスパインに含まれる itemref 要素の数よりも多いことです。実際には、スパインに含まれる項目はすべて NCX にもありますが、NCX はスパインよりも細かい粒度にすることができます。

実際の書籍の目次を定義する navMap は、NCX ファイルで最も重要な部分です。navMap には navPoint 要素が 1 つ以上含まれ、各 navPoint 要素には以下の属性および要素が含まれている必要があります。

  • playOrder 属性: 文書の読み取り順を反映します。読み取り順は、OPF のスパインの itemref 要素のリストと同じ順序です。
  • navLabel/text 要素: 書籍のセクション・タイトルを記述します。これは一般に、章タイトルや「第 1 章」といった章番号です。この例では、「Cover page」となっています。
  • content 要素: この要素の src 属性は、コンテンツが含まれる物理リソースを指します。物理リソースは、OPF のマニフェストで宣言されたファイルです (この要素では、例えば content.html#footnote1 といったように、フラグメント ID を使用して XHTML コンテンツ内のアンカーを指すこともできます)。
  • 1 つ以上の子 navPoint 要素 (オプション): NCX では、ネストされた位置で階層型文書を表現します。

サンプル書籍の構造は単純なものです。この書籍は 2 ページしかなく、これらのページはネストされません。つまり、2 つの navPoint 要素には、昇順の playOrder 値が 1 から設定されることになります。NCX では、読者が電子書籍の別の部分にジャンプできるように、これらのセクションに名前を付けることもできます。

最後のコンテンツを追加する

EPUB に必要なすべてのメタデータについて説明したので、今度は実際の書籍のコンテンツを挿入します。それには、「ダウンロード」に提供されているサンプル・コンテンツを使用することができます。あるいは、ファイル名がメタデータと一致する限り、独自のコンテンツを作成することもできます。

以下のファイルとフォルダーを作成します。

  • title.html: このファイルは書籍のタイトル・ページになります。この名前のファイルを作成して、表紙の画像を参照する img 要素を含め、その src 属性の値として images/cover.png を指定します。
  • images: このフォルダーを OEBPS 内に作成し、サンプル画像 (または独自に作成した画像) をコピーして cover.png という名前を付けます。
  • content.html: これが、書籍の実際のテキストになります。
  • stylesheet.css: このファイルを XHTML ファイルと同じ OEBPS ディレクトリーに配置します。このファイルには、書体やテキストの色の設定など、任意の CSS 宣言を含めることができます。リスト 10 に記載されている CSS ファイルの一例を参照してください。

EPUB 書籍の XHTML と CSS

リスト 9 に、有効な EPUB コンテンツ・ページの一例を記載します。書籍のタイトル・ページ (title.html) にはこのサンプルを使用します。メイン・コンテンツ・ページ (content.html) にも、これと同様のページを使用してください。

リスト 9. サンプル・タイトル・ページ (title.html)
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Hello World: My First EPUB</title>
    <link type="text/css" rel="stylesheet" href="stylesheet.css" />
  </head>
  <body>
    <h1>Hello World: My First EPUB</h1>
    <div><img src="images/cover.png" alt="Title page"/></div>
  </body>
</html>

EPUB の XHTMLコンテンツは、一般的な Web 開発を経験してきた開発者にとっては馴染みのないいくつかのルールに従います。これらのルールは以下のとおりです。

  • コンテンツは XHTML 1.1 として妥当性検証する必要があります。XHTML 1.0 Strict と XHTML 1.1 との顕著な違いは、name 属性が削除されていることだけです (コンテンツ内のアンカーを参照するには、ID を使用します)。
  • img 要素が参照できるのは、電子書籍のローカル画像だけです。この要素は Web 上の画像を参照することができません。
  • script ブロックの使用は避ける必要があります。EPUB リーダーが JavaScript コードをサポートしなければならないという要件はないからです。

EPUB が CSS をサポートする方法には多少の違いがありますが、いずれも、スタイルの一般的な使い方に影響を及ぼすものではありません (詳細については、OPS 仕様を参照)。リスト 10 に、単純な CSS ファイルの例を記載します。コンテンツには、基本的なフォント・ガイドラインを設定して見出しの色を赤に設定するこのファイルを適用することができます。

リスト 10. 電子書籍のサンプル・スタイル (stylesheet.css)
body {
  font-family: sans-serif;     
}
h1,h2,h3,h4 {
  font-family: serif;     
  color: red;
}

興味深い点は、EPUB では、埋め込みフォントを許可する CSS 2 の @font-face ルールを明確にサポートしていることです。技術文書を作成するとしたら関係ないかもしれませんが、EPUB を多言語で作成する開発者や、専門分野を対象とした EPUB を作成する開発者にとって、的確なフォント・データを指定できることは有り難いはずです。

これで、初めての EPUB 書籍を作成するために必要な材料はすべて揃いました。次のセクションでは、OCF 仕様に従って書籍をバンドルし、それを妥当性検証する方法を説明します。


EPUB のパッケージ化および検証

ここまでの時点で、EPUB バンドルをパッケージ化する準備ができているはずです。このバンドルは、自分で作成した新しい書籍にすることも、あるいは「ダウンロード」から入手できるファイルをそのまま使用した書籍にすることもできます。

EPUB ファイルを ZIP アーカイブとしてバンドルする

EPUB 仕様の OEBPS Container Format の部分では、EPUB と ZIP に関していくつかの要件を規定していますが、そのうち最も重要なのは以下の要件です。

  • アーカイブの先頭ファイルは、mimetype ファイルであること (このチュートリアルの「mimetype ファイル」を参照)。mimetype ファイルは圧縮されていてはなりません。圧縮されていなければ、ZIP 以外のユーティリティーが EPUB バンドルで位置 30 から始まるそのままのバイトを読み取ることにより、mimetype を明らかにすることができるからです。
  • ZIP アーカイブを暗号化しないこと。EPUB は暗号化をサポートしますが、ZIP ファイルのレベルではその限りでありません。

UNIX ライクなオペレーティング・システムでは ZIP バージョン 2.3 を使用して、リスト 11 に記載する 2 つのコマンドで EPUB ZIP ファイルを作成します (これらのコマンドは、カレント作業ディレクトリーが EPUB プロジェクトであることを前提としています)。

リスト 11. EPUB を妥当な epub+zip ファイルにバンドルする
$ zip -0Xq  my-book.epub mimetype
$ zip -Xr9Dq my-book.epub *

最初のコマンドで、新規 ZIP アーカイブを作成して、圧縮されていない mimetype ファイルを追加します。2 番目のコマンドで、残りのファイルを追加します。-X フラグと -D フラグは、.zip ファイル内に関係のない情報ができるだけ含まれないようにするために指定しています。-r は、META-INF ディレクトリーと OEBPS ディレクトリーのコンテンツを再帰的に含めるためのオプションです。

EPUB の妥当性検証

EPUB 標準は特に難しいというわけではありませんが、EPUB の XML ファイルは特定のスキーマに対して妥当性を検証する必要があります。スキーマを認識する XML エディターを使用してメタデータと XHTML を生成していれば、妥当性検証は半分まで済んでいるので、EpubCheck パッケージを使って最終チェックを行ってください (「参考文献」を参照)。

Adobe が保守管理する EpubCheck パッケージは、BSD (Berkeley Software Distribution) ライセンスの下でオープンソースとして使用することができます。EpubCheck は、スタンドアロン・ツールまたは Web アプリケーションとして実行できる Java プログラムです。あるいは、JRE (Java Runtime Environment) バージョン 1.5 以降で実行するアプリケーションに統合することもできます。

EpubCheck はコマンド・ラインから簡単に実行することができます。リスト 12 に、一例を記載します。

リスト 12. EpubCheck ユーティリティーを実行する
$ java -jar /path/to/epubcheck.jar my-book.epub

補助ファイルのいくつかを作成するのに失敗した場合、またはメタデータ・ファイルにエラーが発生した場合には、リスト 13 のようなエラー・メッセージが表示されます。

リスト 13. EpubCheck が出すエラーの例
my-book.epub: image file OEBPS/images/cover.png is missing
my-book.epub: resource OEBPS/stylesheet.css is missing
my-book.epub/OEBPS/title.html(7): 'OEBPS/images/cover.png': 
     referenced resource missing in the package

Check finished with warnings or errors!

上記のエラーの場合、インポートしなければならない外部ライブラリーは EpubCheck のインストール・ディレクトリーに置かれているため、このディレクトリーを指すように CLASSPATH を設定します。以下のようなメッセージを受け取った場合にも、おそらく CLASSPATH を設定する必要があります。

org.xml.sax.SAXParseException: no implementation available for schema language 
   with namespace URI "http://www.ascc.net/xml/schematron"

妥当性検証が正常に完了すると、「No errors or warnings detected (エラーまたは警告は検出されませんでした)」というメッセージが表示されます。このメッセージが表示されれば、初めての EPUB を無事生成することができたということです!

EPUB の表示

テストの目的は妥当性検証だけではありません。書籍が正しく表示されることを確かめるという目的もあります。スタイルシートが適切に機能すること、セクションが論理的に正しい順序になっていること、そして書籍に期待されるすべてのコンテンツが含まれていることを確認しなければなりません。

テストに使用できる EPUB リーダーはいくつかあります。なかでも最もよく使用されている ADE (Adobe Digital Editions) のスクリーン・キャプチャーを 図 1 に示します。

図 1. ADE に表示された EPUB
ADE に表示された EPUB

この図で確認できるフォントの色と画像は問題ありませんが、ADE はタイトルを sans-serif フォントで適切にレンダリングしていません。その原因は CSS にあることが考えられるので、有効な手段となるのは別のリーダーで確認してみることです。図 2 に、同じ書籍を今度は私が作成したオープンソースの Web ベースの EPUB リーダーである Bookworm でレンダリングした場合を示します。

図 2. Bookworm に表示された EPUB
Bookworm に表示された EPUB

これで、問題は ADE がこの特定の宣言をサポートしていないだけであることがわかりました。電子書籍で正確にフォーマット設定することが重要である場合には、個々の読み取りソフトウェアが持つ特異な癖を知っておくことが不可欠です。

これで、単純な EPUB を一から作成するという手のかかるプロセスは完了しました。次は、共通の XML 文書化スキーマである DocBook を EPUB に変換する方法について説明します。


DocBook から EPUB への変換

DocBook は、長文の技術文書を保守しなければならない開発者の間で好んで使用されています。従来の文書作成プログラムで生成されたファイルとは異なり、DocBook の出力は、テキスト・ベースのバージョン管理システムで管理することができます。DocBookは XML であるため、簡単に複数の出力フォーマットに変換することができます。2008年の夏からは、正式な DocBook XSL プロジェクトによる出力フォーマットとして、EPUB がネイティブにサポートされるようになりました。

XSLT による基本的な DocBook から EPUB へのパイプラインを実行する

まずは、単純な DocBook 文書から取り掛かります。リスト 14 に記載する文書は、book タイプとして定義されていて、前書き、2 つの章、そしてタイトル・ページに表示されるインライン画像で構成されています。インライン画像が置かれている場所は、DocBook のソース・ファイルと同じディレクトリーです。このファイルとタイトル・ページ画像は、自分で作成するか、「ダウンロード」からサンプルをダウンロードして使用してください。

リスト 14. 単純な DocBook 書籍
<?xml version="1.0" encoding="utf-8"?>  
<book>
  <bookinfo>
    <title>My EPUB book</title>
    <author><firstname>Liza</firstname>
            <surname>Daly</surname></author>
    <volumenum>1234</volumenum>
  </bookinfo>
  <preface id="preface">  
    <title>Title page</title>
    <figure id="cover-image">
      <title>Our EPUB cover image icon</title>
      <graphic fileref="cover.png"/>
    </figure>
  </preface>
  <chapter id="chapter1"> 
    <title>This is a pretty simple DocBook example</title>
    <para>
      Not much to see here. 
    </para>
  </chapter>
  <chapter id="end-notes"> 
    <title>End notes</title>
    <para>
      This space intentionally left blank.
    </para>
  </chapter>
</book>

次に、「参考文献」を参照して最新バージョンの DocBook XSL スタイルシートをダウンロードし、xsltproc または Saxon などの XSLT プロセッサーがインストールされていることを確認します。このサンプルでは、ほとんどの UNIX ライクなシステムで有効な xsltproc を使用します。DocBook ファイルを変換するには、DocBook XSL に組み込まれた EPUB モジュールに対して、変換対象の DocBook ファイルを実行すればよいのです (リスト 15 を参照)。

リスト 15. DocBook を EPUB に変換する
$ xsltproc /path/to/docbook-xsl-1.74.0/epub/docbook.xsl docbook.xml
Writing OEBPS/bk01-toc.html for book
Writing OEBPS/pr01.html for preface(preface)
Writing OEBPS/ch01.html for chapter(chapter1)
Writing OEBPS/ch02.html for chapter(end-notes)
Writing OEBPS/index.html for book
Writing OEBPS/toc.ncx
Writing OEBPS/content.opf
Writing META-INF/container.xml

DocBook XSL のカスタマイズ

DocBook から EPUB への変換パイプラインはまだ比較的新しいので、目的どおりの出力を得るためには、XSLT をカスタマイズしなければならない場合があります。

続いて、mimetype ファイルを追加して、epub+zip アーカイブを作成してください。リスト 16 に、これらの 3 つの簡単なコマンドと、EpubCheck バリデーターの実行結果を示します。

リスト 16. DocBook から EPUB アーカイブを作成する
$ echo "application/epub+zip" > mimetype
$ zip -0Xq  my-book.epub mimetype
$ zip -Xr9D my-book.epub *
$ java -jar epubcheck.jar my-book.epub 
No errors or warnings detected

このとおり、至って簡単です!作成したファイルを ADE に表示したのが図 3 です。

図 3. DocBook から変換して ADE に表示した EPUB
DocBook EPUB displayed in ADE

Python と lxml を使って DocBook から EPUB へ自動変換する

DocBook XSL は苦労せずに EPUB を生成するのに非常に役立ちますが、それでも XSLT の外部で行わなければならないステップがいくつかあります。この最後のセクションでは、妥当な EPUB バンドルを完成させるためのサンプル Python プログラムを紹介します。ここでは、チュートリアルで使用する個々の関数を記載しますが、「ダウンロード」からは完全な docbook2epub.py プログラムを入手することができます。

利用可能な Python XSLT ライブラリーはいくつかありますが、私が気に入っているのは lxml です。lxml は XSLT 1.0 の機能を提供するだけでなく、ハイパフォーマンスの構文解析、完全な XPath 1.0 サポート、そして HTML を処理するための特殊な拡張機能も提供します。これとは別のライブラリーを使用する場合、または Python 以外のプログラミング言語を使用する場合でも、ここに記載するサンプルを簡単に適応させることができるはずです。

lxml で DocBook XSL を呼び出す

lxml で DocBook XSL を呼び出すのに最も効率的な方法は、XSLT を事前に構文解析しておいてから、繰り返し使用するための変換プログラムを作成することです。私が作成した DocBook から EPUB への変換スクリプトは、複数の DocBook ファイルを受け入れて変換するため、この方法が役立ちます。リスト 17 に、具体的な方法を説明します。

リスト 17. lxml を使用して DocBook XSL を実行する
import os.path
from lxml import etree

def convert_docbook(docbook_file):
    docbook_xsl = os.path.abspath('docbook-xsl/epub/docbook.xsl')
    # Give the XSLT processor the ability to create new directories
    xslt_ac = etree.XSLTAccessControl(read_file=True, 
                                      write_file=True, 
                                      create_dir=True, 
                                      read_network=True, 
                                      write_network=False)
    transform = etree.XSLT(etree.parse(docbook_xsl), access_control=xslt_ac)
    transform(etree.parse(docbook_file))

DocBook XSL の EPUB モジュールは出力ファイルそのものを作成するため、変換の評価結果は何も返されません。代わりに、DocBook はカレント作業ディレクトリーに 2 つのフォルダー (META-INF および OEBPS) を作成して、そこに変換結果を格納します。

画像とその他のリソースをアーカイブにコピーする

DocBook XSL は、文書で使用するために提供される画像については何の処理もしません。ただ単に、メタデータ・ファイルとレンダリングした XHTML を作成するだけです。EPUB 仕様では、すべてのリソースを content.opf マニフェストに記載することを要件としています。したがって、このマニフェストを調べれば、元の DocBook ファイルで参照していた画像を見つけることができます。この方法を実現するコードをリスト 18 に示します。ここでは、DocBook XSLT によって作成される処理中の EPUB へのパスが path 変数に含まれていることが前提となります。

リスト 18. OPF コンテンツ・ファイルを構文解析して欠落しているリソースを見つける
import os.path, shutil
from lxml import etree

def find_resources(path='/path/to/our/epub/directory'):
    opf = etree.parse(os.path.join(path, 'OEBPS', 'content.opf'))

    # All the opf:item elements are resources
    for item in opf.xpath('//opf:item', 
                          namespaces= { 'opf': 'http://www.idpf.org/2007/opf' }):

        # If the resource was not already created by DocBook XSL itself, 
        # copy it into the OEBPS folder
        href = item.attrib['href']
        referenced_file = os.path.join(path, 'OEBPS', href):
        if not os.path.exists(referenced_file):
            shutil.copy(href, os.path.join(path, 'OEBPS'))

mimetype ファイルを自動的に作成する

DocBook XSL は mimetype ファイルを作成することもしませんが、リスト 19 の簡潔なコードによって mimetype ファイルは作成されます。

リスト 19. mimetype ファイルを作成する
def create_mimetype(path='/path/to/our/epub/directory'):
    f = '%s/%s' % (path, 'mimetype')
    f = open(f, 'w')
    # Be careful not to add a newline here
    f.write('application/epub+zip')
    f.close()

Python で EPUB バンドルを作成する

残る作業は、ファイルを妥当な EPUB ZIP アーカイブにバンドルすることだけです。それには、2 つのステップが必要になります。まず、mimetype ファイルをアーカイブの先頭ファイルとして圧縮せずに追加し、次に、残りのディレクトリーを追加します。リスト 20 に、このプロセスのコードを記載します。

リスト 20. Python の zipfile モジュールを使用して EPUB バンドルを作成する
import zipfile, os

def create_archive(path='/path/to/our/epub/directory'):
    '''Create the ZIP archive.  The mimetype must be the first file in the archive 
    and it must not be compressed.'''

    epub_name = '%s.epub' % os.path.basename(path)

    # The EPUB must contain the META-INF and mimetype files at the root, so 
    # we'll create the archive in the working directory first and move it later
    os.chdir(path)    

    # Open a new zipfile for writing
    epub = zipfile.ZipFile(epub_name, 'w')

    # Add the mimetype file first and set it to be uncompressed
    epub.write(MIMETYPE, compress_type=zipfile.ZIP_STORED)
    
    # For the remaining paths in the EPUB, add all of their files
    # using normal ZIP compression
    for p in os.listdir('.'):
        for f in os.listdir(p):
            epub.write(os.path.join(p, f)), compress_type=zipfile.ZIP_DEFLATED)
    epub.close()

これで完了です!後は、忘れずに妥当性検証を行ってください


まとめ

あらゆる類の EPUB 変換を完全に自動化するには、前のセクションで紹介した Python スクリプトは最初のステップに過ぎません。簡単のため、任意にネストされたパス、スタイルシート、埋め込みフォントなど、さまざまな一般ケースに対する処理を省略しているためです。Ruby 言語で同じような手法を採るとしたら、DocBook XSL ディストリビューションに含まれている dbtoepub を調べてください。

EPUB は比較的新しいフォーマットなので、有用な変換パスは、まだそれほど数多く作成されていません。けれども幸いなことに、構造化マークアップのほとんどのタイプ (例えば、reStructuredText や Markdown など) には HTML または XHTML を生成するパイプラインがすでに用意されています。DocBook から EPUB に変換する Python または Ruby スクリプトをガイドとして使用すれば尚更のこと、これらの構造化マークアップを使用して EPUB を生成するのは極めて簡単です。

EPUB の大部分は ZIP と XHTML であるため、文書のバンドルを単純な .zip ファイルとしてではなく、EPUB アーカイブとして配布しない理由はほとんどありません。EPUB リーダーを使用するユーザーは、追加のメタデータと自動で生成される目次を利用できる一方、EPUB リーダーを使用していないユーザーでも、EPUB アーカイブを通常の ZIP ファイルとして扱って、ブラウザーで XHTML コンテンツを表示することはできます。Javadoc や Perldocなど、あらゆる類の文書化システムに、EPUB 生成コードを追加することを検討してみてください。EPUB は 1 冊分にものぼる文書に対応するように設計されているので、増加しつつあるオンライン・ブックや現在作成中のプログラミング資料の配布フォーマットとしては理想的です。


ダウンロード

内容ファイル名サイズ
Resources to build the EPUB in this tutorialepub-raw-files.zip8KB
DocBook to EPUB tools1docbook-to-epub.zip7KB

  1. This .zip file contains the sample DocBook XML file illustrated in the tutorial and a complete docbook2epub.py script. You must download lxml and the DocBook XSL separately; see the links in Resources.

参考文献

学ぶために

製品や技術を入手するために

  • EpubCheck: EPUB を作成するには、Adobe EpubCheck が貴重なツールとなります。EpubCheck をダウンロードしてください。スタンドアロン・プログラム、Web アプリケーション、またはライブラリー (この場合は Java バージョン 1.5 以降が必要です) として実行できます。
  • DocBook XSL: DocBook を EPUB に変換する、このスタイルシートの最新バージョンをダウンロードしてください。DocBook XSL パッケージには、このチュートリアルで紹介した Python スクリプトと同じように、完全な EPUB アーカイブに変換するための Ruby スクリプトも含まれています。
  • lxml: 現在 lxml がインストールされていないとしたら、この最も充実した機能を備えた XML ライブラリーを Python に使用してください。lxml についての詳細は、この著者の記事「lxml を使用して Python での XML 構文解析をハイパフォーマンスにする」(Liza Daly 著、developerWorks、2008年10月) で説明しています。
  • Adobe Digital Editions および Bookworm: EPUB をテストするには、EPUB 仕様に最も忠実に従った電子書籍リーダーが 2 つあります。1 つはクロスプラットフォーム・デスクトップ・アプリケーションの ADE、もう 1 つはブラウザーを使用して EPUB レンダリングする、著者が作成した Web ベースの電子書籍リーダー、Bookwork です。
  • 製品評価用 IBM 試用版ソフトウェア: developerWorks から直接ダウンロードできる試用版ソフトウェアで、次のプロジェクトを構築してください。DB2、Lotus、Rational、Tivoli、および WebSphere によるアプリケーション開発ツールおよびミドルウェア製品のトライアル版が揃っています。

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=XML
ArticleID=753245
ArticleTitle=EPUB で電子書籍を作成する
publish-date=08262011