「源氏物語の鑑賞支援ツールの実用化」プロジェクトの開発作業履歴

 

  1. 2005年12月1〜11日 縦書き用のサンプルデータの作成と、ルビデータ抽出用の比較処理の作成

    2005年12月10〜11日の合宿に向けて、以下のような作業を行った。

    • IE6による縦書き表示用のサンプルHTMLの作成
    • Word 2003による縦書き印刷用のサンプルドキュメント(XML形式)の作成
    • ルビデータの抽出のための本文とひらがな版の比較処理の作成

    合宿では、これらのデータを使って、IE6とWord 2003による縦書きのデモと、ルビ用比較処理のデモを行った。
    縦書きのデモでは、IE6では縦書き表示もできるが、その印刷にはバグがあり、事実上、縦書きの印刷はできないことを示し、Word 2003による縦書き印刷の機能も、別途開発する必要があることも、あわせて説明した。

  2. 2005年12月12〜31日 IE6による縦書き表示と、本文のルビデータ抽出

    主に以下の作業を行った。

    • IE6による縦書き表示用のXSLTスタイルシートの作成
    • ルビデータの抽出のための本文とひらがな版の比較処理の改善(比較精度向上)
    • 本文とひらがな版の比較結果に基づいて、「本文のルビ」データを作成するプログラムを作成

    これにより、IE6なら、縦書き・横書き共に、本文のルビつきで表示できるようになった。

    ただし、縦書きで、注釈とルビを一緒に表示させると、書式が乱れる問題が発生した。本文のルビでのみ発生し、与謝野晶子訳のルビでは、発生しない。行頭で注釈とルビが同時にはじまるなど、いくつかの条件が見出せたが、その条件をカムフラージュするような対策を入れても、回避できなかった。結局、IE6による縦書き表示が選択された場合は、本文のルビはデフォルトでは選択しないようにすることで対策とした。

    なお、縦書きでは、行の高さを明示的に指定する必要があり、固定値として15emを埋め込んだ。表示後、表示設定で、その値を変更できるようにしたがが、HTML版のように、表示設定値をクッキーに保存する機能は未作成。いずれはクッキーに保存できるようにしたいと考えている。

  3. 2006年1月1〜9日 Word 2003での縦書き印刷用ドキュメントを作成するXSLTスタイルシートの実験

    Word 2003での縦書き印刷用ドキュメントを作成するXSLTスタイルシートを作成した。まだ、テスト用 なので、テキストを段組表示する部分だけをXSLTスタイルシートで記述しただけであるが、HTMLアプリケーションでXML形式のWord 2003ドキュメントファイルを作成し、それをダブルクリックして実行すると、正しく表示される ことを確認した。下図は、IE6内で、このXML形式のWord 2003ドキュメントを表示させたものである。

    しかし、1つ、問題が発生した。XSLTスタイルシートを使った動的再編集処理は、時間がかかるので、クライアント側で実行する必要があるが、その再編集結果をどのようにWordに引き継ぐかが問題になる。
    ActiveXコントロールを使って、再編集結果をディスクに保存してから、Word 2003を起動する方法はすぐに思いつくが、ActiveXコントロールをSSL証明書で署名するなどの手間が必要になるうえ、信頼性の高いSSL証明書は高価で手が出ない。

    対策案として、次に考えたのは、XSLTスタイルシートを使った動的再編集処理をWord 2003に実行させることだった。
    Word 2003でもXSLTはサポートしている。Word 2003のXML形式のドキュメントをWebサーバ(PHP)が返却する場合、MIMEタイプを適切に指定してやれば、ちゃんと、Wordのドキュメントとして開かれることも分かっている。この場合、IEのウィンドウ内で開くかファイルとしてダウンロードするかもダイアログボックスが出てきて選択できる。
    そこで、サーバ側で必要なすべてのXMLを1つに連結するところまで行い、その先頭でXSLTスタイルシートを指定して、これをクライアントでWord 2003のXML形式のドキュメントとして開くことを考えたのである。

    ところが、この方法はすぐに行き詰った。すべてのXMLを1つに連結し、その先頭でXSLTスタイルシート指定を追加したXMLファイルを作って、これをダブルクリックしてWord 2003を起動してみたところ、セキュリティ問題のエラーになり、このXSLTスタイルシートを実行してくれないのである。
    XSLTスタイルシートの中でJavaScriptを併用しているのがいけないらしい。XSLTだけでは、動的再編集処理の細部まで記述することができず、MSXMLの独自拡張タグである<msxsl:script>タグでJavaScriptを使っていたためである。
    JavaScriptのXSLT化を試み、JavaScriptの量は2/3位まで減らすことができたが、それ以上は減らせない。XSLTは文字列操作機能が貧弱なためである。

    結局、この問題の解決が宿題として残った。

  4. 2006年1月14〜15日 縦書き印刷用ドキュメントを作成する動的再編集処理をHTMLアプリケーション(hta)で実現

    動的再編集処理の結果として得られるWord 2003のXML形式のドキュメントファイルをどのようにWordに引き継ぐかという問題は、動的再編集処理をHTMLアプリケーションで書く方法で解決した。

    IE6表示用の動的再編集処理だと、紫式部の絵が出てきて、「ただいま再編集処理中です。今しばらくお待ちください。」と表示されるあのページをHTMLアプリケーションで書くのである。もちろん、IE6表示用の動的再編集処理はHTMLページで、Word印刷用の動的再編集処理だけHTMLアプリケーションにする。

    HTMLアプリケーションのファイル(.hta)は、すべてがHTMLで書かれたテキストファイルであるが、JavaScriptやWindows標準のActiveXコントロールなどを自由に使ってアプリケーションを書けるものである。ディスクへの保存や他のアプリケーションの起動なども自由にできる。反面、インターネットからダウンロードするときは、通常の実行形式ファイル(.exe)と同様な扱いを受ける。ちょうど、フリーソフトをインターネットからダウンロードして実行するのと同じような扱いで、ダウンロードするときに「ファイルを開くか、ファイルをコンピュータに保存するか選択してください。」のダイアログボックスが出る。これを保存して実行すれば、以下の一連の処理を自動的に実行して最終的にWord 2003で目的のドキュメントを開くことができる。
    (1)必要なXMLファイルをすべてダウンロードする。
    (2)1つのXMLに連結する。
    (3)XSLTスタイルシートを使った動的再編集処理を実行する。
    (4)結果をディスクに保存する。保存先はHTMLアプリケーションと同じフォルダ、同じファイル名で、拡張子を「.xml」に変えたものとする。
    (5)Word 2003を起動して、保存したファイルを開く。

    ただし、縦書き印刷用ドキュメントを作成するXSLTスタイルシートで実現されている機能は、まだ、テキストを段組表示する部分だけである。まだ、以下の機能が未実装である。
    ・注釈、出典、校訂の見出しに対応する部分に、色付け、太字、下線、網掛け、などのスタイルを適用する。
    ・注釈、出典、校訂の一覧表を作成する。
    ・ルビを挿入する。
    ・挿絵を挿入する。
    ・<IMG>タグで表現された外字を処理する。
     

  5. 2006年1月21〜22日 独自タグとCSSを使った再編集仕様設定機能の強化の実験

    独自タグとCSSを使って、再編集仕様設定機能を強化する方法を考え、実験した。

    これまでは、注釈を<A>タグ、出典を<B>タグ、校訂を<font color=red">タグ、というように、コメントの種類とHTMLタグを1対1に対応付けて割り当てていた。コメントの種類が違うと、見出しが競合して入れ子にならなくなるが、HTML上では開始タグと終了タグが必ずしも入れ子にならなくても良いという仕様を活用して表現したためである。

    しかし、この方法だと、校訂を赤(<font color=red">)で表示させたら、出典を緑で表示させるといったことはできない。また、注釈、出典、校訂したいと思っても、<B>タグは、どれか1つにしか割り当てられないため、1つしか太字にできない。

    以前から、この制限をできれば外したいと考えていた。その方法は、いくつか考えられるが、そのうち、独自タグ とCSSを使う方法を試すことにした。

    CSSの仕様は、HTMLとは独立しており、XMLでも使用できる。ネームスペース修飾つきのXMLタグは、独自タグ としてHTMLの中に混在して書くことができ、その独自タグにCSSを適用できるのである。

    独自タグはXMLタグであり、XMLは入れ子の拘束がきついという連想から、独自タグ にも入れ子の拘束があるのではないかと考えていたが、実験してみると、HTMLの中で使う限り、独自タグも入れ子の拘束は無いことがわかった。

    そこで考えたのは、注釈を<g:注釈>タグ、出典を<g:出典>タグ、校訂を<g:校訂>タグ、というような、分かり易い独自タグ に対応付け、そのタグに対して、CSSで色や太さなどのスタイルを指定してやる方法である。この方法なら、HTML形式の再編集版のように注釈、出典、校訂を色分けして表示することもできるし、白黒印刷された場合のために、注釈、出典、校訂を共に太字にすることもできる。

    プログラムのつくりの上からも、HTML上では開始タグと終了タグが必ずしも入れ子にならなくても良いという仕様を活用して表現する点に変更は無いため、タグ名の変更と、CSSの定義機能の追加を行う程度で実装できる。

    なお、今回の実験対象は、IEによる横書きと縦書きの表示用スタイルシートであるが、成功したら、Word 2003による縦書き印刷用XSLTスタイルシートでも同様な機能を実現することを考えている。

    以上のような考えに基づいて、実際に実装してみた。この結果、再編集仕様の設定画面は、以下のように変わった。

    変更後 変更前

    問題は再編集結果である。横書きだとうまくいくが、縦書きだと、うまくいかないことが判明。独自タグは、無条件に横書きになってしまうようだ。独自タグのCSSに縦書きの指定を入れても同じ だった。

    (1)横書きの再編集結果

    (2)縦書きの再編集結果

  6. 2006年1月28〜29日 HTMLタグとCSSを使って再編集仕様設定機能の強化を実現

    先週の実験で、独自タグは縦書きには使えないことがわかった。縦書きでもCSSは使えることが分かっている。そこで、HTMLタグ とCSSを使って同様なことができないか考えてみた。

    これまでは、注釈を<XXXX>タグ、出典を<YYYY>タグ、校訂を<ZZZZ>タグ、というように、コメントの種類とタグを1対1に対応付けて割り当てることを前提にしていた。HTMLタグが独自タグに変わっても、この点は変わっていなかったのである。しかし、独自タグを割り当てて目的の機能が実現できるなら、代わりにHTMLタグを割り当ててもできるはずである。

    HTMLタグの機能は、CSSで書き換えることもできる。たとえば、<B>タグでstyle="font-weight:normal"を指定すると<B>タグの太字の機能を打ち消すことができる。したがって、開始タグと終了タグを持ち、デフォルトでstyle="display:inline"になるタグなら、独自タグと同様に使うことができることになる。

    そこで、先週作成した新しい再編集仕様設定画面で指定されるスタイルから、できるだけ適切なHTMLタグを動的に選んで使用する方法を考えた。今回は、以下のようにする。

    • HTMLタグの候補として、太字指定用として<B>と<STRONG>を、斜体指定用として<I>と<EM>を、下線指定用として<U>を、色指定用として<FONT>を用意し、指定されたスタイルに照らし合わせて最初にマッチする未割り当てのタグを割り当てるようにした。
    • どのタグもマッチしないか割り当て済みだった場合は、汎用のタグとして<SPAN>、<BIG>、<SMALL>を用意し、それを割り当てる。<BIG>と<SMALL>には、CSSで"font-size:100%"を指定してタグの機能を打ち消しておく。
    • 汎用のタグも割り当て済みだった場合は、スタイルがマッチしないタグでも、未割り当てなら割り当ててしまうようにする。(ただし、この条件は、当面は成立しないため未デバッグである。割り当てたタグの機能を打ち消す処理が入っていないため、まだ、正しく動作しない)。

    以上の対策によって、縦書きでも、新しい再編集仕様の設定で正しく表示できるようになった。(表示される画面は、昨年12月末の状態と大差ないため、割愛する)

    つづいて、Word 2003による縦書き印刷用XSLTスタイルシートでも同様な機能を実現する方法の検討に入った。詳細は次週のところで説明する。

  7. 2006年2月4〜5日 Word 2003による縦書き印刷用XSLTスタイルシートで新しく強化された再編集仕様設定機能を実現

    Word 2003のXMLドキュメントと、IE6用のHTMLドキュメントは、以下の点が異なる。

    • Word 2003はXML形式なので、入れ子の拘束がある。
    • スタイルシートに相当する概念はあるが、段落に対してスタイルを指定できるだけで、HTML+CSSのような柔軟性は無い。
    • style属性に相当する機能は、<w:tcPr>タグ、<w:pPr>タグ、<w:rPr>タグで実現され、それぞれ、<w:tc>タグ(<TD>タグ相当)、<w:p>タグ(<P>タグ相当)、<w:r>タグ(<SPAN>タグ相当)のスタイルを指定するタグになっている。
    • 先に、HTMLタグの候補として挙げた<B>、<STRONG>、<I>、<EM>、<U>、<FONT>、<SPAN>、<BIG>、<SMALL>といったタグの機能は、いずれも、<w:r>タグで実現する。しかし、<w:r>タグの多重ネストは許可されていない。
    • スタイルの指定方法は、CSSとWordで、ずいぶん違うものがある。例えば、フォントサイズは、HTMLだと、キーワード(largeなど)、ポイント数、ドット数、標準文字サイズの倍数など、さまざまな方法で指定できるが、Wordでは、必ず、0.5ポイントを単位とした整数(例:10.5ポイント⇒21)で指定する。

    つまり、以下のようにも言える。

    • HTML+CSSでは、複数の範囲指定タグを有し、多重ネストを許可した上で、入れ子の拘束も無いという、かなり柔軟な書き方をサポートし、ブラウザがこれを解釈してスタイルをマージして表示する。
    • 対して、Word 2003では、段落の内部の部分文字列を指定する範囲指定タグとしては<w:r>タグしかなく、しかも、その多重ネストも許可していない。したがって、段落内のスタイルの変わり目で部分文字列を切って<w:r>タグで囲み、各部分文字列ごとに<w:rPr>タグを使って、最終的にマージしたスタイルを指定することになる。

    これを実現するには、発想の転換が必要である。今回は、以下のようにして実現した。

    • スタイルの変わり目は、HTMLの開始タグや終了タグを挿入するタイミングとして認識できる。
    • そのタイミングでのスタイルのマージ処理は、再編集仕様設定画面の仕様を前提にすれば比較的単純に書ける。
    • スタイルの指定方法がCSSとWordで異なる場合は、その値域はCSSとWordの共通部分に制限するが、指定形式はCSSに合わせ、Word 2003用XMLドキュメント作成処理で、Word流の指定形式に変換する。例えばフォントサイズの場合、値域は共通するポイント数指定のみとし、指定形式は、CSS流の実数形式とする。そして、Word 2003用XMLドキュメント作成処理でWord流の0.5ポイント単位整数に変換する。

    他に、以下のような対策も行った。

    • 色の指定に関して、WordとHTMLで微妙な違いがあり対策した。文字色の指定はWordでもCSSと同じ色名や色コード(#ffffffなど)を指定できるので問題無かった。しかし、背景色の指定では、15種類の色名でしか指定できず、しかも、その色名はHTMLのものと異なるものがあり、中には、HTMLに色名の無い色もある。そこで、WordとHTMLの両方で色名が定義された14色だけをCSSの色名でプルダウンメニュー選択できるようにし、Word 2003用XMLドキュメント作成処理で、これをWordの色名に変換する。
    • Wordではさまざまなフォントが使える。古典関係では行書体を好む人が多いので、標準のフォントをHGP祥南行書体に設定した。いずれは、Word 2003用XMLドキュメント作成のHTMLアプリケーションで指定できるようにする予定。HTMLアプリケーションではレジストリにアクセスできるので、レジストリからフォント一覧を取り込んで、プルダウンメニューでフォントを選択できるようにする。

    以上のような対策の結果、Word 2003による縦書き印刷用XSLTスタイルシートでも、新しく強化された再編集仕様の設定を反映できるようになった。下図は、注釈を赤、出典を緑(該当箇所は画面外のため未表示)、校訂を赤茶色で色分けし、共に、太字にするように設定したWord文書をIE6内で表示させたところである。

     

  8. 2006年2月11〜12日 Word 2003による縦書き印刷用XSLTスタイルシートでコメント一覧をテキストと組み合わせて段組み化する

    HTML形式の再編集版や、現在公開中のXML形式の再編集版では、コメント(注釈、出典、校訂)の一覧は、章または段の末尾に一覧表として掲載している。これらの再編集版では、以下のような前提があるため、このような形の方が使いやすいと考えたためである。

    • IEで画面に表示したときの見易さ・使いやすさを中心に考えている。
    • 本文とコメント(注釈、出典、校訂)は、相互リンクしているため、マウスクリックだけで、簡単に目的のコメントに移動でき、また、元の本文に戻ってくることができる。
    • マウスをコメントの見出しの上に持ってくると、ツールチップでコメントの概要が表示されるため、小さなコメントならそれだけで足りる場合も多い。
    • 画面が狭いため、テキストをコメントと一緒に表示するより、テキストだけを表示した方が見やすい。

    しかし、印刷用となると、事情は違ってくる。リンクもツールチップも印刷用では無意味である。反面、紙の方が画面より広いので、テキストをコメントと一緒にレイアウトしても、そんなに見にくくならない。

    そこで、段組を1段増やして、最後の段組にコメントを表示することを考えた。テキスト3段組が指定された場合は、4段組になり、一番下の段組にコメントの一覧をレイアウトする。

    この機能は比較的簡単に実現できた。下図は、この機能を使って作成された4段組のWordドキュメントをIEで表示した例である。注釈を赤、出典を緑(該当箇所は画面外)、校訂を赤茶色で色分けし、共に、太字にする設定で再編集した。

     

  9. 2006年2月18〜19日 現状の整理

    これまで行ってきたことを整理し、このページを記述した。

    縦書きとルビに関して、現時点で残っている問題は以下のとおり。

    1. IE6による縦書き表示の問題
      • 縦書きではツールチップが正しく動作しない。(なぜか発振状態になる)
        ツールチップの表示もあまり見やすいものではないので、DHTML behaviorを使ってコメントの内容を表形式でポップアップ表示することを検討中。実現するときは、横書きも一緒に実現する予定。
      • コメントへのリンクが効かない。これは、再編集仕様設定機能の強化でCSSを使うようにした際、onclickイベントもDHTML behaviorで実現することを想定して、意図的にサポートしなかったためである。したがって、横書きも同様。上のツールチップの問題と合わせて対策する予定。
      • コメントの段組を追加して4段組にする機能は、印刷用のドキュメントだけでなく、IE6による表示用のドキュメントでも重宝することがあるので、末尾の一覧表示か4段組表示かを、指定によって切り替えられるようにすることを検討中。
      • 渋谷栄一注釈の著作権が表示されない。適切な表示欄を用意できなかったため、表示しないようにしていることによる。横書きでは、表示しないような制御さえしていないため、不適切な位置に表示される。HTML形式の再編集版では注釈の著作権は本文の著作権と一緒に表示する。そこで、4段組表示の場合はコメント段組の著作権表示欄に表示し、そうでない場合は、本文の著作権表示欄に表示することを検討中。

    2. Word 2003による縦書き印刷の問題
      • 著作権が正しく表示されない。XMLデータの中で著作権データを保持する際、HTMLに変換して表示することを前提としたHTMLデータをCDATAブロックに保持するようにしているため、HTMLを使わないWord 2003で問題が生じたもの。XMLデータの中の著作権データの保持方法を見直す必要がある。
      • <IMG>タグで表現された外字(与謝野晶子訳に10箇所存在)が表示されない。
      • 絵入源氏物語の挿絵(<IMG>タグ使用)が挿入されない。
         
    3. 本文のルビの問題
      • 比較ミスによるルビの誤りが少なからず存在する。
         

    また、このうち、以下の対策に着手した。

    • 著作権関係の問題を対策するために、XMLデータの中の著作権データを保持方法の見直し・修正した。
    • 外字や挿絵のような<IMG>タグで表現されたものを、Word 2003文書内でどのように扱うべきかを検討中。