だけどこんなところで待っているよりは

書き忘れ防止用。タイトルは飽きたら変える予定です。

津田メルマガのEPUBを修正する

みんな大好き津田さんのメルマガが最近EPUB版の配信も始めています。素晴らしいですね!

ところが、このEPUBはあんまりvalidではないです。気になったので修正してみました。
修正するポイントは3つです。

unique-identifierとdc:identifierを直す

ここは何か誤解があるのではないかと思いますが、OPFファイル(content.opf)のpackage要素にあるunique-identifier属性の属性値は、ユニークIDを書くのではなく、「ユニークIDとして使われているID名」を書きます。具体的には、このEPUBの場合dc:identifier要素で使っているid要素の値、「BookID」を使います。
これは、1つのOPFファイルの中に複数のdc:identifier要素が持てることになっているため、どのidがこのEPUBのユニークIDなのかを表すためのものです。

誤:<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="yakan-BN80" version="2.0">
正:<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="BookID" version="2.0">

ついでにBookIDのopf:schemeがUUIDになっているのですが、実際に書かれているのはURLなので、直しておきましょう。

誤: <dc:identifier id="BookID" opf:scheme="UUID">http://yakan-hiko.com/BN80</dc:identifier>
正: <dc:identifier id="BookID" opf:scheme="URL">http://yakan-hiko.com/BN80</dc:identifier>

lang属性を消す

lang属性はXHTML 1.0 Strictでは使えません。xml:lang="ja"だけで十分です。

誤:<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
正:<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">

本文をdiv要素などで囲む

StrictなXHTMLで、いきなり本文のテキストやbr要素がbody要素直下に来るのは少々お行儀が悪いかと思います。
真面目にマークアップを考えればいろんなやり方があると思いますが、お手軽には全体をdiv要素で囲みましょう。
以下のようにします。まあid属性値は何でもいいのですが、とりあえずcontainerにしておきます。

<body>
<div id="container">
(本文)
</div>
</body>

これはOEBPS/Text/Section0001.xhtml(表紙ファイル)もOEBPS/Text/Section0002.xhtml(本文ファイル)も同様です。OEBPS/Text/Section0001.xhtmlについては、img要素はaltが必須なので、以下のようにするといいでしょう。

<body>
<div id="container">
<img src="../Images/bookcover.jpg" alt="" />
</div>
</body>

こんな感じでepubcheckによるチェックは通るようになるかと思います。参考になれば幸いです。