達人出版会日記

ITエンジニア向けの技術系電子書籍の制作と販売を行う達人出版会のブログです。

はじめてのEPUB:その3 メタデータについて

一度書きかけの記事を吹っ飛ばして以来、更新が止まっていましたが、気を取り直して続きです。
今回は、文書のメタデータについて扱ってみます。

EPUBでは、メタデータはOPFファイル内にあるmetadata要素に記述することになっています。ただし、実際に記入するのは、OPFの定義する要素というよりは、Dublin Coreボキャブラリを使い、さらにOPF独自の属性も追加したり、といった構成になります。Dublin CoreRDF(Resource Description Framework)などでも使われるので、すでに親しまれている方も多いかと思います。

前回のOPFファイルを少し修正したものを以下に。

<?xml version="1.0"?>
<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BookID" version="2.0">
    <metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
        <dc:title>サンプルその3</dc:title>
        <dc:creator opf:role="aut">高橋征義</dc:creator>
        <dc:publisher>達人出版会</dc:publisher>
        <dc:subject>EPUB</dc:subject>
        <dc:subject>電子書籍</dc:subject>
        <dc:subject>HOWTO</dc:subject>
        <dc:description>EPUBの作り方を、実際に作りながら説明する。</dc:description>
        <dc:date opf:event="publication">2010-03-27</dc:date>
        <dc:date opf:event="modification">2010-04-02</dc:date>
        <dc:identifier id="BookID" opf:scheme="URL">http://example.com/epub/sample/sample3.epub</dc:identifier>
        <dc:language>ja</dc:language>
    </metadata>
    <manifest>
        <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml"/>
        <item id="c001" href="text/content001.xhtml" media-type="application/xhtml+xml"/>
        <item id="c002" href="text/content002.xhtml" media-type="application/xhtml+xml"/>
        <item id="c002b" href="text/content002b.xhtml" media-type="application/xhtml+xml"/>
        <item id="c003" href="text/content003.xhtml" media-type="application/xhtml+xml"/>
        <item id="c004" href="text/content004.xhtml" media-type="application/xhtml+xml"/>
    </manifest>
    <spine toc="ncx">
        <itemref idref="c001"/>
        <itemref idref="c002"/>
        <itemref idref="c002b" />
        <itemref idref="c003"/>
        <itemref idref="c004"/>
    </spine>
</package>

metadata要素の中身以外は前回のままです。
dc:title、dc:creator要素は前回もありましたが、dc:creator要素を整理して、出版社名はdc:publisher要素を使うようにしてみました。他にも訳者等はdc:contributerを使って記述します。
dc:subject要素は複数あります。このように、いくつかの題材を扱っている場合、並列して書けばよいようです。リーダでもちゃんと認識してくれます。
dc:date要素は、複数ありながらも、event属性を使ってその意味を明示しています。これがどこまでリーダ側で把握してくれるのかは不明です。

ではリーダに読み込ませてみた結果を見てましょう。まずはCalibreです。

ちゃんとそれっぽく表示してますね。日付の表記がアレですが。やはり日付の日本語対応って地味にはまりやすいですね。

続いてStanzaです。

こ、これは……。ちょっと残念すぎる表示です。validateも通ってるし(検証済み)、他のリーダでも問題ないのでこの点に関してはStanzaが壊れてると思いたいところです。

気を取り直してbookwormです。

いい感じですね。最後はibisreaderです。

なんかそっくりですね。いいですけど。

この辺りは各リーダがちゃんと認識してくれる(Stanza以外)ようなので、コンテンツを作る時でも用意しておくとよい項目なのでしょう(Stanza以外)。それにしてもStanza対策はどうしたものか。ちょっと困りものです。