‘未分類’ カテゴリーのアーカイブ

「第28回国際デジタル教科書技術ワークショップ」に行ってきた

2013/06/06

 6月5日にJEPAで開催されたセミナー「第28回国際デジタル教科書技術ワークショップ」に参加してきました。今回はIDPFのマーカス・ギリングさんが登壇者のひとりということもあって盛大に英語の飛び交うセミナーで、通訳にあたられていた村田真さんも大変そうでした。以下のレポート内で聞き違いやメモの取り間違いによる誤記があるかも知れませんがご容赦および適宜ツッコミをお願いいたします。

「欧州の教科書標準化動向」マーカス・ギリングさん

 epubcafeでの告知ではタイトルが「欧州の教科書標準化動向」となっていたのですが、欧州のみだと話すことがあまりなく、すぐに終わってしまうため、アメリカでの状況も含めてのデジタル教科書のお話とのことでした。
 まず、デジタル教科書の提供自体は難しくないがそれは単一の会社のソリューションに依存した場合で、それはしばしばロックイン(囲い込み)を引き起こすし多くの場合非合法ですらあるため、オープン標準化が必要というような話がありました。この非合法という部分の意味は今ひとつわからなかったのですが、おそらく独占禁止法的な部分なのかなと思います。
 そして標準化に必要な要件として、サーバー、クライアント側リーディングシステム、コミュニケーションプロトコル、コンテンツを挙げています。コミュニケーションプロトコルは先生と生徒の間で情報をやり取りする仕組み的な意味合いだと思います。テストの回答をデジタルネットワークを介して集計する、デジタル教科書に先生が引いた下線や書き込みを同期する仕組みなどといったところでしょうか。
 下線や書き込みを同期するといった仕組みについては、W3Cでも「Open Annotation」という取り組みが始まっているとのことで、近い将来ウェブページなどで他のユーザーの書き込みを見て議論を深めていけるようになるのかも知れません。現在でもはてなブックマークのようにページ単位で議論する仕組みはありますが、これがページ内の特定の箇所に適宜注記をつけて議論できるようになるということですね※1

 現在利用できる電子書籍での注記同期の実装例としては、Kindleの「ポピュラー・ハイライト」機能がありますが、こういった機能は確かに教育目的ではニーズは高いでしょう。また、当然のことながら各コンテンツの権利管理や、各生徒のID管理の標準的な仕組みも必要になるとのお話で、まだまだなかなか越えるべき壁は高そうです。
 印象的だったのは「多くの出版社は紙と同じ形での電子版を望んでいる」というコメントで、確かに当分は紙の教科書との併存が前提になる以上、教育現場の対応も踏まえた現実的な話と受け止めるべきと思います。

「アクセシブルな教科書とは?」河村宏さん

 元デイジーコンソーシアム会長の河村さんのセッションです。最初に「アクセシビリティは多様な人間のニーズに応じられること」というお話があり、これはシンプルでとてもわかりやすく、うなずける言葉です。例として発展途上国のHIV対策を挙げられていたのですが、緊急性が高い場面で命が助かるかどうかは情報の有無が鍵になり、識字率などによって緊急性の高い情報の伝達が阻害されてはならないというようなお話でした。
 また、この6月中に視覚障害やプリントディスアビリティのある人々に対して著作権保護作品へのアクセスを保証する国際条約が決まりそうとのお話があったのですが※2、視覚障害だけではなく、脳機能障害などによって読字が難しくなる「プリントディスアビリティ」を抱える人々の存在は、今後ひとりでも多くの人々に電子コンテンツを届ける上で外すべきではないポイントであるように思います。

 電子教科書については様々な障害者のニーズに出来るだけワンソースで応えたいというようなお話があり、これは決して多額の費用をかけられず、多くをボランティアの労力に頼らざるを得ない障害者向け教科書作成の現状を考えても、まず必要になる考え方でしょう。
 電子書籍の同時提供を踏まえたコンテンツ制作工程の上流分岐フローの確立は、障害者向けのみならず広く今後の出版フローの合理化を考えて考えなければならない課題です。ただ、河村さんのお話の中で「アメリカの著作権法では国境を越えて作られたデジタルトーキングブックがNGなのが現状での問題点」というようなコメントがあったように、単純に技術面での問題だけではなく、著作権など法的な部分でクリアしなければならない課題もまだまだ多いようです。

 先述したマーカスさんのお話と共通する部分として、「授業の進行を考えると、当面の間は紙との並存を前提にする必要があるし、そのためページ数での指定はデジタル教科書でも当分必要となる」というようなコメントもあり、ページ番号は紙のコンテンツの属性を引きずっているとは言え、現場の要求から当面は必要になりそうなのかなという印象を受けました。実際問題、「みなさん○○ページを開いてください」に代わる適切な指示がちょっとすぐに思いつかないというのも事実です。
 また、国際的なデジタル教科書の採用例としては、タイ、韓国、シンガポールなどアジア圏で先行している例が目立つ他、ブラジルも比較的熱心に推進しているとのこと。ただ、タイでの例でデバイスのマシンパワー不足で音声読み上げができないというように、まだまだ過渡期ならではの障害も多いようです。

「日本のデジタル教科書標準化動向と要件
 ⇒デジタル教科書の開発・導入動向と機能要件の整理」

「多機能電子教科書の試作開発」田村恭久さん

 上智大学の田村先生のセッションです。田村先生はデジタル教科書について主に技術面の研究を進めておられるとのことで、今回は学生さんが試作されたさまざまなインタラクティブな要素が各ビューアで現在動作するかを見るためのサンプルEPUBコンテンツも発表されていました。

 まず、現状での電子教科書事業の進展状況として、海外での電子教科書の取り組みに加え、国内での取り組みとして文部科学省が2011年に出した「教育の情報化ビジョン」および「学びのイノベーション事業」※3、総務省の「フューチャースクール推進事業」などに言及されていました※4

 現状での問題点としては、一般の書籍販売に比べてステークホルダーが多いため調整が大変なことや、伝統的な教育方法とデジタルネイティブ世代に適応した教育のあり方のギャップなどの問題があるとのことで、各ステークホルダー間で電子教科書はどうあるべきかといったコンセンサスすらまだ十分には取れていない現状のため、まだまだ道は遠いとのことです。
 ドッグイヤーと言われるように技術の移り変わりがとても早いデジタルの世界にあって、従来の慎重に慎重を重ねる(検定教科書制度に代表されるような)教科書作りのあり方が果たして妥当なのか、これからの数年で問われていくことになりそうです。

 学生さんが作られたサンプルコンテンツについては上述したepubcafeのページでダウンロードできるのですが、JavaScriptなどインタラクティブな要素をめいっぱい詰め込んでいるためかかなり重く、手元のiPad3でもしばしば固まってしまいました。また現状動作したプロパティが一番多かったビューアはiBooks3とのことなのですが、それでも55%に留まるようです。正直インタラクティブな電子教科書を作成し、配布するにはまだ環境が不足しているといったような感じでしょうか。

 将来的にはダウンロード型ビューアにはどうしても限界があるためブラウザのEPUB表示アドオン拡張に可能性を感じているとのことで、確かに一般書籍などの静的な「読書」と、活発な情報交換を伴う教育の場で使われる「教科書」では必要とされる要件が大幅に異なるため、結局はそちらに行かざるを得ないように感じました。ただ、教科書制作の現場で「安心して使えるインタラクティブ要素」を確定する必要は出てくるため、例えブラウザベースに移行したとしても「標準化」は必要になるように思います。そうなると将来的には「epubの標準規格」「電子教科書の標準規格」が別個に確立することになるのでしょうか? なかなか興味深いところです。

「ベネッセの電子教材制作」阿部健二さん/桑野和行さん

 進研ゼミで有名なベネッセコーポレーションのお二方のセッションです。個人的に桑野さんにはJAGATの研究会でお世話になり、いつも面白いお話を聞かせていただいているのですが、今回もなかなか興味深いお話を聞くことができました。
 ベネッセさんは80年代にファミコン用に電子教材を開発し、また90年代には「ポケットチャレンジ」という専用機を提供、最近ではDSやiPod向けにでソフト展開するなど積極的に電子教材に取り組んできたとのことで、現在は受講者向けに専用Android端末を配布しているとのことでした。
 当然従来通りの紙教材も引き続き制作されているわけで、今回はこうしたデジタル・アナログ双方のコンテンツを効率的に制作するためのXML等を利用した上流分岐フロー・XMLスキーマのお話でした。

 伺ったお話ではベネッセさんは「コンテンツとメディアを分け、コンテンツを構造化して保有」しているとのことだったのですが、正直これは各出版社が将来の電子書籍と紙書籍の同時発売・電子先行発売を実現するためのまたとないモデルケースなわけで、実に興味が尽きません。もちろん相応のコストはかかるわけですが、これがきっちり出来ていれば、どんな形にでもコンテンツを出し分けられるわけです。
 ベネッセさんでは現在独自スキーマで蓄積しているコンテンツを、将来に備えてHTML5ベースで適宜出力できるようにする仕組みを整える計画とのことで、今年中にこれを完了したいとのこと。独自スキーマは大別して問題系と辞書系の二つあり、全教科全学年を一種類のスキーマで扱っているとのことでした。また、EPUB3はシステムが自動生成するコンテンツの一つという位置づけで、ハンドコーディングでひとつひとつ作ることは将来も考えていないとのこと。これはまあ大量に作ることを前提にする以上当然の考え方と思います。

 トライアルコンテンツの表示もされていたのですが、問題の順番をランダムに変え、入力フォームに答えを入力して正誤判定をし、次々に新しい問題に遷移してゆくデジタル教材というようなもので、正直これを現状のEPUBで実現しているのはかなり技術的に凄いレベルと思います。MathMLでの数式表示なども紹介されていました。将来的にはこうしたEPUBの教材を、ReadiumSDKブラウザのEPUBビューア機能追加などを利用して利用者に提供したいとのことで、解決すべき課題としてDRMやコンテンツ制作者の頭の切り替えの問題があるとのこと。
 「コンテンツ制作者の頭の切り替え」については私も正直全く他人事ではありません。緊デジ事業等で関わった出版社の方々も皆苦労をされているようでした。今後はこういった新しいコンテンツと従来の紙のコンテンツをいかに並立させて作っていくべきなのか、各出版社内、制作会社内での社員教育のあり方なども変える必要が出てくるのかも知れません。

 いかがでしょうか。今回は相当盛りだくさんだったのでなかなか書くのも大変でした。教育分野はコンテンツのリッチ化などに代表されるようにデジタル化の恩恵を受けやすく、また河村さんが言及されていたように従来阻害されがちだった障害を持つ方々にも電子化によって必要な情報を届けられる側面があるために、期待はとても大きいのですが、それだけに乗り越えなければならないさまざまな壁もあるようです。近い将来の教育現場がどのような姿になっているのか、しばらくは興味が尽きません。

 なお、教科書と直接の関係は無いのですが、来たる6月17日にJAGATさんで「EPUB制作現場の実態と課題」と題して昨年度の印刷物からの電子化の技術的課題を振り返るセミナーを行います。これには私も登壇者のひとりとして参加させていただくのですが、ベネッセさんのお話にあったような、デジタル・アナログ双方のコンテンツを効率的に制作するためのヒントは得られるのではないかと思っています。是非参加をご検討ください。

 あと、本当に蛇足ですが、私の所属する会社が7/3から東京ビッグサイトで開催されます「国際電子出版EXPO」に出展します。ご来場されたら是非遊びに来て下さいね。

※1 参考:すちゃらかコーダー「Open Annotationを利用したWebのアノテーションサービスHypothes.is」

※2 参考:カレントアウェアネス・ポータル「WIPO、視覚障害者等による著作物利用に関する国際条約の制定に向けた外交会議を2013年に開催決定」

※3 iOS用アプリを発見。こんなの出してるんですね。

※4 参考:HH News & Reports「進む学校のICT活用とデジタル教科書普及」

(2013.6.07)

ベネッセコーポレーションのトライアルコンテンツにつきまして、ご指摘をいただきましたので「正解しないと次の問題に遷移できない」→「正誤判定の後次の問題に遷移」の形に表記修正いたしました。

(2013.6.10)

iBooksの注ポップアップを試してみた

2013/05/23

 海外系のストアで最後に残った格好だったAppleのiBookstoreがようやく日本語コンテンツの配信を開始してから、約2ヶ月半が経ちました。iBookstoreは先行していたAmazon Kindleや紀伊國屋書店BookWebなどに比べて電子ペーパー端末やPC上でのコンテンツ閲覧環境が用意されていないなど見劣りするポイントもありますが、その反面でjavascriptを使ったEPUB3が動作する使える数少ないストアであることなどデバイスが限定されているからこそリッチコンテンツに強い面もあり、iPhoneやiPadなどのiOS端末の普及率の高さを考えると潜在的には相当大きな力を持ったストアと言えるように思います。

 iBooks向けのリッチなコンテンツ作りは、私が所属している会社のコンテンツ作りの方向性とは少し距離があることもあり、そこまで熱心に研究はしていなかったのですが、<aside>〜</aside>のタグで注テキスト(footnotes)を囲む形でマークアップしておくことで、該当する単語のリンクをタップした時に注のウィンドウがポップアップするという機能は、私が所属している会社で多く手がける専門書でもかなりのニーズがありそうに思えましたので、今回このあたりの情報を参考にちょっと試してみました(有名なエリザベス・カストロさんのサイトですね)。

 なお、今回のエントリに用いたサンプルは柳田国男の「遠野物語」を青空文庫よりダウンロードして使わせていただきました。また、ルビ等のタグはテキストの可読性を考え、削除しています。

マークアップ自体は簡単

 マークアップ自体はとても簡単です。

<p>一 <a epub:type=”noteref” href=”#cyu001″>遠野郷</a>は今の陸中上閉伊郡の西の半分、〜(中略)〜奥州の地名には多くあり。</p>
<div class=”start-1em”>

<aside epub:type=”footnote” id=”cyu001″>

<p>○遠野郷のトーはもとアイヌ語の湖という語より出でたるなるべし、ナイもアイヌ語なり。</p>

</aside>

</div>

注のポップアップ

注のポップアップ

 といったようなかたちでマークアップしておくことで、リンク部分をタップした際に注の対象文字からふきだしが出るような形で注がポップアップされます。ちょっと感動しました。素晴らしい!

注リンク部分にタグが含まれていると不具合が出る

メニューを表示させてリンクを開く

メニューを表示させてリンクを開く

 ただ、上記のようにシンプルなテキストへの注であれば問題はないのですが、例えばテキストに「<span class=”bold”>テキスト</span>」のような形で太字のタグが当たっているパターンや、「H<span class=”sub”>2</span>O」などのように一部のテキストに下付き文字のタグがついているなどといったように、リンク内に何らかのタグが含まれている場合には問題が出ます。
 具体的には何度リンク部分をタップしても注がポップアップされません。ちなみにダブルタップしてメニューを開き「リンクを開く」を選べば注のポップアップ表示自体は可能ですが、この状態ではユーザビリティが高いとはとても言えません。

ルビが含まれていると表示が破綻する

ルビは表示が破綻する

ルビは表示が破綻する

 特に問題が多いのが、注の部分にルビが振られていた場合です。iBooksの注ポップアップウィンドウ内ではあらゆるマークアップタグの効果は無視され、テキスト部分のみが表示されますので、たとえば「七七十里」に「しちしちじゅうり」とモノルビでルビが付加されていた場合、ポップアップウインドウ内には「七しち七しち十じゅう里り」と表示されてしまいます。日本語でルビが振られるような単語はすなわち難解で注が必要になる可能性の高い単語ですので、これはいささか困ります。

合印にリンクを貼れば破綻はしないが・・・

合印にリンクを貼るパターン

合印にリンクを貼るパターン

 これを避けるために対象の単語自体にはリンクを貼らず、単語のすぐ後ろに「※2」などいったような合印を付けてやり、合印に対してリンクを設定してやることで一応破綻なく注をポップアップ表示させることができます。
 ただ、iBooksのポップアップ注表示では、リンクを貼った部分のテキストが見出1として大きく表示されるため、「※2」が見出しとして表示されるといういささか間の抜けた状態になってしまうことは防げません。もう少し工夫をすればどうにかなるのかも知れませんが、ちょっとやり方を思いつきませんでした。

 いかがでしょうか。今回取り上げさせていただいたasideタグを用いた注のポップアップ表示は、比較的手軽にインタラクティブな要素を実現できそうなファクターとして期待していたのですが、結局まだ日本語EPUBコンテンツで利用するには難があるようです。
 今回取り上げた「遠野物語」のみならず、専門性が高くて注が多数配置されているようなコンテンツは、とても電子書籍の利便性を感じやすい分野です。読書の流れを切らずに注を参照できることは読みやすさを大幅に高めます。
 コンテンツの流用性としてもポップアップに対応しないビューアに持って行ってもリンク自体は機能するためソースの流用が可能で、ルビなどをきちんとポップアップウィンドウ内で表示できるようになれば相当使い勝手がよさそうなだけに、早い段階でのビューアのアップデートに期待したいところです。

(2013.5.23)

EPUB用IVS/サロゲートペア文字チェッカーを作ってみた

2013/05/07

 前回のエントリで書かせていただいた通り、現状IVS/サロゲートペア文字はビューアの表示でトラブルになるケースが多いため、EPUB3データの中にIVS/サロゲートペア文字が混入していないかどうかチェックするためのチェッカーを作ってみました。また、三分スペース(THREE-PER-EM SPACE/U+2004)などのJIS X0213に符号位置割り当てのないスペース文字が一部のリーディングシステムで文字化けするとのお話がありましたので、こちらのチェックもできるようにいたしました(ある方よりご要望をいただいたため機能を追加しました)。
 引数としてEPUBファイルのパスを与えてやると内容をチェックしてログを出力するだけの簡単なものですが、制作の役に立てていただければ幸いです。

 Mac、Winともに使用することは可能ですが、環境によってはモジュールの追加インストールが必要になるかも知れません。私の環境ではWindowsのActivePerl環境にMinGWモジュールを追加インストールする必要がありました(コマンドプロンプトで「ppm install MinGW」と入力)。

use utf8;

#Encodeモジュールをインポート

use Encode qw/encode decode/;

use File::Basename qw/basename dirname/;

use Archive::Zip;

use Archive::Extract;

use File::Path;

#引数1で指定したepubファイルを取得

$epubFilePath = $ARGV[0];

$epubFilePath = decode(‘UTF-8’, $epubFilePath);

my $epubFileName = basename $epubFilePath;

###################チェック用一時epubファイルのパスを取得###################

my $epubpackage = Archive::Zip->new();

die unless $epubpackage->read($epubFilePath) == Archive::Zip::AZ_OK;

#パスリスト変数の定義

my @xhtmlfilePaths;

my @files = $epubpackage->members();

foreach my $file (@files) {

push(@xhtmlfilePaths,$file->fileName) if ($file->fileName =~ /^(.*?)\.xhtml$/);

}

###################チェック用一時ファイル解凍処理###################

my $uniqueFolderPath = ‘/tmp/’ . $epubFileName;

#同一フォルダが存在したら連番をつける処理

my $mynum = 1;

if (-d $uniqueFolderPath){

while (-d $uniqueFolderPath){

$uniqueFolderPath = (‘/tmp/’ . $epubFileName . ‘_’ . $mynum);

$mynum++;

}

}

#解凍実行

my $epubArchive = Archive::Extract->new(archive => $epubFilePath,type => ‘zip’) or die;

$epubArchive->extract(to => $uniqueFolderPath);

###################文字チェック処理###################

#ログ出力用変数定義

our $finalSarrogatePairOutputLog = “”;

our $finalIVSOutputLog = “”;

our $finalIrregularSpaceOutputLog = “”;

#各xhtmlファイルを展開

foreach $myXhtmlfilePath (@xhtmlfilePaths){

&eachFileProceed($myXhtmlfilePath);

}

###################ログにタイトル部分を合成###################

if ($finalSarrogatePairOutputLog eq “”){

$finalSarrogatePairOutputLog = ‘##SarrogatePair Character Check Result : ‘ . “\r\n” . ‘OK! Not Any SarrogatePair Characters in EPUB File!’;

} else {

$finalSarrogatePairOutputLog = ‘##SarrogatePair Character Check Result : ‘ . “\r\n” . $finalSarrogatePairOutputLog;

}

if ($finalIVSOutputLog eq “”){

$finalIVSOutputLog = ‘##Unicode IVS Character Check Result : ‘ . “\r\n” . ‘OK! Not Any Unicode IVS Characters in EPUB File!’;

} else {

$finalIVSOutputLog = ‘##Unicode IVS Character Check Result : ‘ . “\r\n” . $finalIVSOutputLog;

}

if ($finalIrregularSpaceOutputLog eq “”){

$finalIrregularSpaceOutputLog = ‘##Irregular Space Character Check Result : ‘ . “\r\n” . ‘OK! Not Any Irregular Space Characters in EPUB File!’;

} else {

$finalIrregularSpaceOutputLog = ‘##Irregular Space Character Check Result : ‘ . “\r\n” . $finalIrregularSpaceOutputLog;

}

###################チェック用一時ファイルの削除###################

rmtree($uniqueFolderPath);

###################ログ出力###################

my $logOutputPath = (dirname $epubFilePath) . ‘/EpubTotalDataCheck.log’;

$logOutputPath = encode(‘UTF-8’, $logOutputPath);

open(OUT,”>> $logOutputPath”);

#チェックしたepubファイル名を出力

my $finalFilename = ‘####Checked FileName : ‘ . “\r\n” . $epubFileName;

$finalFilename = encode(‘UTF-8’, $finalFilename);

print OUT $finalFilename . “\r\n\r\n”;

#サロゲートペア文字の有無を出力

$finalSarrogatePairOutputLog = encode(‘UTF-8’, $finalSarrogatePairOutputLog);

print OUT $finalSarrogatePairOutputLog . “\r\n\r\n”;

#Unicode IVS文字の有無を出力

$finalIVSOutputLog = encode(‘UTF-8’, $finalIVSOutputLog);

print OUT $finalIVSOutputLog . “\r\n\r\n”;

#特殊スペース文字の有無を出力

$finalIrregularSpaceOutputLog = encode(‘UTF-8’, $finalIrregularSpaceOutputLog);

print OUT $finalIrregularSpaceOutputLog . “\r\n\r\n”;

close (OUT);

exit;

###################サブルーチン###################

#各xhtmlファイルのチェック

sub eachFileProceed {

my $myXhtmlfilePath = $_[0];

#各xhtmlファイル名を取得

our $xhtmlFileName = basename $myXhtmlfilePath;

my $eachFilePath = ($uniqueFolderPath . “/” . $myXhtmlfilePath);

open(IN,”$eachFilePath”);

#改行コードの統一処理

@myCHECKFILEtxts = ;

$myCHECKFILEtxts = join(“”,@myCHECKFILEtxts);

$myCHECKFILEtxts =~ s@\x0D\x0A@\x0D@g;

$myCHECKFILEtxts =~ s@\x0A@\x0D@g;

$myCHECKFILEtxts = decode(‘UTF-8’, $myCHECKFILEtxts);

@eachLine = split(“\x0D”,$myCHECKFILEtxts);

close (IN);

our $lineNumCount = 1;

#各ファイル内各行にIVS/サロゲートペア文字が含まれているかどうかのチェック

foreach $myLine (@eachLine){

&eachLineProceed($myLine);

$lineNumCount++;

}

}

#各xhtmlファイル内各行のチェック

sub eachLineProceed {

my $myLine = $_[0];

###サロゲートペア文字参照のチェック、ログに追記###

#16進数

while($myLine =~ /&\#x2[0-9A-Z]{4};/ig) {

$matchPlace = pos($myLine);

$finalSarrogatePairOutputLog = ($finalSarrogatePairOutputLog . ‘Caution! SarrogatePairCharacterRefernce at ‘ . ‘ ‘ . ‘FileName:’ . $xhtmlFileName . ‘ ‘ . ‘Line:’ . $lineNumCount . ‘ ‘ . ‘Character:’ . $matchPlace . “\n”)

}

#10進数

while($myLine =~ /&\#(1[0-9]{5});/ig) {

$matchPlace = pos($myLine);

if ($1 >= 131072 && $1 <= 196607) {

$finalSarrogatePairOutputLog = ($finalSarrogatePairOutputLog . ‘Caution! SarrogatePairCharacterRefernce at ‘ . ‘ ‘ . ‘FileName:’ . $xhtmlFileName . ‘ ‘ . ‘Line:’ . $lineNumCount . ‘ ‘ . ‘Character:’ . $matchPlace . “\n”)

}

}

###IVS文字参照のチェック###

#16進数

while($myLine =~ /&\#xE[0-9A-Z]{4};/ig) {

$matchPlace = pos($myLine);

$finalIVSOutputLog = ($finalIVSOutputLog . ‘Caution! UnicodeIVSCharacterRefernce at ‘ . ‘ ‘ . ‘FileName:’ . $xhtmlFileName . ‘ ‘ . ‘Line:’ . $lineNumCount . ‘ ‘ . ‘Character:’ . $matchPlace . “\n”)

}

#10進数

while($myLine =~ /&\#(9[0-9]{5});/ig) {

$matchPlace = pos($myLine);

if ($1 >= 917504 && $1 <= 983039) {

$finalIVSOutputLog = ($finalIVSOutputLog . ‘Caution! UnicodeIVSCharacterRefernce at ‘ . ‘ ‘ . ‘FileName:’ . $xhtmlFileName . ‘ ‘ . ‘Line:’ . $lineNumCount . ‘ ‘ . ‘Character:’ . $matchPlace . “\n”)

}

}

###特殊スペース文字のチェック###

#16進数

while($myLine =~ /&\#x(200[456789ACD]);/ig) {

$matchPlace = pos($myLine);

$finalIrregularSpaceOutputLog = ($finalIrregularSpaceOutputLog . ‘Caution! IrregularSpaceCharactorRefernce at ‘ . ‘ ‘ . ‘FileName:’ . $xhtmlFileName . ‘ ‘ . ‘Line:’ . $lineNumCount . ‘ ‘ . ‘Character:’ . $matchPlace . “\n”)

}

#10進数

while($myLine =~ /&\#(819[6789]|820[01245]);/ig) {

$matchPlace = pos($myLine);

$finalIrregularSpaceOutputLog = ($finalIrregularSpaceOutputLog . ‘Caution! IrregularSpaceCharactorRefernce at ‘ . ‘ ‘ . ‘FileName:’ . $xhtmlFileName . ‘ ‘ . ‘Line:’ . $lineNumCount . ‘ ‘ . ‘Character:’ . $matchPlace . “\n”)

}

#キャラクタごとの処理へ

my @eachchara = split(//,$myLine);

our $CharaNumCount = 1;

foreach $mychara(@eachchara){

&eachCharaProceed($myChara);

$CharaNumCount++;

}

}

#各xhtmlファイル内各行内各キャラクタのチェック

sub eachCharaProceed {

my $myChara = $_[0];

###サロゲートペア文字のチェック###

#サロゲートペア文字の場所をチェック、ログに追記

if ($mychara =~ /[\x{20000}-\x{2FFFF}]/){

$finalSarrogatePairOutputLog = ($finalSarrogatePairOutputLog . ‘Caution! SarrogatePairCharacter at ‘ . ‘ ‘ . ‘FileName:’ . $xhtmlFileName . ‘ ‘ . ‘Line:’ . $lineNumCount . ‘ ‘ . ‘Character:’ . $CharaNumCount . “\n”)

}

###IVS文字のチェック###

#Unicode IVS文字の場所をチェック、ログに追記

if ($mychara =~ /[\x{E0000}-\x{EFFFF}]/){

$finalIVSOutputLog = ($finalIVSOutputLog . ‘Caution! UnicodeIVSCharacter at ‘ . ‘ ‘ . ‘FileName:’ . $xhtmlFileName . ‘ ‘ . ‘Line:’ . $lineNumCount . ‘ ‘ . ‘Character:’ . $CharaNumCount . “\n”)

}

###特殊スペース文字のチェック###

#4分スペースなどの特殊スペース文字が含まれているかどうかのチェック

if ($mychara =~ /[\x{2004}-\x{200A}\x{200C}-\x{200D}]/){

$finalIrregularSpaceOutputLog = ($finalIrregularSpaceOutputLog . ‘Caution! IrregularSpaceCharactor at ‘ . ‘ ‘ . ‘FileName:’ . $xhtmlFileName . ‘ ‘ . ‘Line:’ . $lineNumCount . ‘ ‘ . ‘Character:’ . $CharaNumCount . “\n”)

}

}

 なお、Mac用にはEPUBCheck 3.0を組み込み、同時にログ出力できるようにしたドロップレットを作ってみました。Mac OS X 10.6/10.7/10.8で動作を確認しています。Mac OS X 10.5でも動作自体はしたのですが、Perlの呼び出しでエラーが出ました。Perlのアップデートが必要になると思われます。

実行ログ

実行ログ

 Mac版ドロップレットはIVS/サロゲートペア文字のチェックとEPUBCheckを連続実行しますので、多数のepubファイルをまとめてチェックすると多少の時間がかかります。チェック結果は、epubファイルと同じ場所に出力される「EpubTotalDataCheck.log」で一括確認できます。既に同名のファイルが存在していた場合は末尾に追記します。

チェック完了時にアラートを表示

チェック完了時にアラートを表示

 また、全てのファイルのチェックが完了するとアラートを表示します。バックグラウンドでチェックさせておいても安心です。
 なお、こちらのスクリプトを使用したことにより生じた損害等につきましては、一切責任を負いかねますので、あくまで自己責任にてご使用ください。

 ドロップレットのダウンロードはこちらからどうぞ。

>>EPUB3トータルデータチェッカー2.1.0(Mac用アプリ) ダウンロードはこちら
>>EPUB内特殊文字チェックスクリプト&バッチファイル(Win用) ダウンロードはこちら

 なお、Windowsでは、事前にActiveperl等のperl環境のインストールが必要です。

(2013.5.07)

ご要望をいただき、ログファイルにチェックした日付・時刻を出力する機能を追加いたしました。

(2013.5.09追記)

「電書ちゃんねる」に、epubcheckに関する記事が掲載されたようです。「エラーメッセージ一覧日本語訳」はとても参考になるありがたい資料ですのでぜひ参照することをおすすめします。

(2013.5.23追記)

数値文字参照形式でドキュメント内に挿入されたIVS/サロゲートペア文字、特殊幅スペース文字のチェックに対応させる形でソースコードを修正しました。また、Mac用アプリにつきましては「EPUB3トータルデータチェッカー1.1」にてEpubCheck3.0.1にも対応させました。

(2013.5.29追記)

特殊幅スペース文字として「|」(U+007C)が検出されていた問題を修正しました。ダウンロードコンテンツも同様に修正済みです。

(2013.6.04追記)

プロフィール
Jun Tajima

こちらにて、電子書籍&Web制作を担当しています。
このブログは、EPUB3をはじめとした電子書籍制作担当オペレータからの、「電子書籍の制作時にたとえばこんな問題が出てきていますよ」的な「現地レポート」です。少しでも早い段階で快適な電子書籍閲覧・制作環境が整うことを願って、現場からの声を発信していこうと目論んでおります。

当ブログ内の記事・資料は、私の所属しております組織の許諾を得て掲載していますが、内容は私個人の見解に基づくものであり、所属する組織の見解を代表するものではありません。また、本ブログの情報・ツールを利用したことにより、直接的あるいは間接的に損害や債務が発生した場合でも、私および私の所属する組織は一切の責任を負いかねます。