源氏物語の世界 再編集版 オリジナル - http://www.sainet.or.jp/~eshibuya/index.html 2007/12/21 宮脇文経 源氏物語の世界 再編集版 オリジナル - http://www.sainet.or.jp/~eshibuya/index.html 高千穂大学 渋谷栄一教授 作成、無償公開 V1 - HTML版、CSV版、CHM版 2003年4月~2004年10月 趣味で作成。 V2 - XML版 http://genji.nce.buttobi.net/xml/ 2004年12月~2005年8月 IPA未踏プロジェクトで作成。 クライアント側で動的再編集する基本方式を確立した。 背景:高負荷CGI禁止 (現在は動作しない。∵サーバ:PHP4⇒PHP5) V3 - XML版 http://www.genji-monogatari.net/xml/ 2005年12月~2006年8月 IPA未踏プロジェクトで作成。 機能強化、構造整備、実用性向上
(V2)
V1の既存機能 凡例 目標とする新機能
V1 - HTML版 の 仕掛け 本文 注釈 渋谷栄一訳 ローマ字版 与謝野晶子訳 オリジナルHTMLファイル 固定 静的再編集 プログラム V1 - HTML版 の 仕掛け 本文 注釈 渋谷栄一訳 ローマ字版 与謝野晶子訳 オリジナルHTMLファイル 固定 静的再編集 プログラム 一括生成 一括アップロード 再編集結果 イメージ 挿絵 HTML
V3 - XML版 の 仕掛け ・・・ HTML HTML IE6以降 WordML MS-Word 2003以降 イメージ・音声 挿絵 朗読 V3 - XML版 の 仕掛け 本文 渋谷栄一訳 与謝野晶子訳 注釈 ローマ字版 オリジナルHTMLファイル ルビ 本文 渋谷栄一訳 注釈 ひらがな版 与謝野晶子訳 挿絵リンク 朗読リンク 文節情報 本文と朗読の対応関係 XMLデータ ・・・ 静的再編集 プログラム 動的再編集(XSLT) クライアント側で実行 XMLデータと再編集プログラムは追加可能 固定 動的再編集 プログラム1 (横書き表示) 動的再編集 プログラム2 (縦書き表示) 動的再編集 プログラム3 (縦書き印刷用文書作成) ・・・ HTML HTML IE6以降 WordML MS-Word 2003以降
V3 - 再編集プログラムの構造 再編集仕様設定ページ(PHP) 実行 動的再編集処理ページ生成(PHP) V3 - 再編集プログラムの構造 再編集仕様設定ページ(PHP) 実行 動的再編集処理ページ生成(PHP) MySQLデータベース (会員情報、フォルダ情報等) サーバ側で実行する部分 書式設定 再編集形式 毎に作成 クッキー (書式情報等) OK PHPで生成された 動的再編集処理ページ (HTML/HTA & JavaScript) 動的再編集処理ページ のテンプレート (HTML & JavaScript) 再編集結果 再編集書式設定ページ (HTML & JavaScript) XMLスタイルシート 動的再編集プログラム ルビ 本文 渋谷栄一訳 注釈 ひらがな版 与謝野晶子訳 挿絵リンク 朗読リンク 文節情報 本文と朗読の対応関係 XMLデータ ・・・ WordMLのようにHDDに保存する必要がある場合等でHTAを使用する。 ただし、HTAではクッキー使用不可。
PHPで生成された動的再編集処理ページ 縦書き印刷用Word 2003文書を生成する場合 <HTML xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:my="http://www.genji-monogatari.net"> <META http-equiv="Content-Type" content="text/html; charset=EUC-jp"/> <HEAD> <hta:application ID="myApp"> <TITLE>源氏物語の世界 再編集版 (XML形式) 縦書き印刷用Word 2003文書作成</TITLE> </HEAD><BODY> <SCRIPT> …(中略)… var xmlInput = new Array(); …(中略)… xmlInput[xmlInput.length] = xmlLoad('http://www.genji-monogatari.net/xml/eshibuya/text/text09.1.xml'); xmlInput[xmlInput.length] = xmlLoad('http://www.genji-monogatari.net/xml/eshibuya/notes/notes09.1.xml'); xmlInput[xmlInput.length] = xmlLoad('http://www.genji-monogatari.net/xml/eshibuya/sources/sources09.1.xml'); xmlInput[xmlInput.length] = xmlLoad('http://www.genji-monogatari.net/xml/eshibuya/revices/revices09.1.xml'); xmlInput[xmlInput.length] = xmlLoad('http://www.genji-monogatari.net/xml/eshibuya/version/version09.1.xml'); xmlInput[xmlInput.length] = xmlLoad('http://www.genji-monogatari.net/xml/mywkfmnr/yosano/yosano09.1.xml'); …(中略)… var xslCnv2 = xmlLoad("http://www.genji-monogatari.net/xml/mywkfmnr/tate4Word/tate4Word.xsl.xml"); </SCRIPT> <SCRIPT type="text/xml" id="xmlInput2"> XMLのヒアドキュメント。クッキーに保存されていた書式情報の取り込み等に使用する。 IE6(MSXML3)では <XML>タグ (XML island) も使えるが、MSXML4 で非サポートになったので、使用しない。 <SCRIPT> 処理内容は以下のとおり。 ●使用する3つの文字コード(シフトJIS、EUC、UTF-8)の相違を乗り越えるための処理 ●xmlLoadした複数のXMLデータとXMLのヒアドキュメントを1つのXMLに連結する。 ●連結したXMLをXSLTで変換 ●変換結果をファイルに保存 ●Word 2003起動 </BODY></HTML> 参考リンク 連結したXML XSLT 変換結果(XML)
開発を振り返って <msxsl:script>タグ(非標準)を多用した。 基本: シンタックス⇒XSLT、セマンティック⇒JavaScript XSLTでどう書けば良いか、すぐにはわからなかった所もJavaScript化した。 ただ、安易に走ったところがあり、そこは反省点。(慣れるにつれて減った) JavaScriptの方が書き易い所は多い。文字列操作、正規表現、グローバル変数、変数値の更新、XML-DOM、関数、try~catch、エラー処理、… <msxsl:script>タグ相当機能を XSLT で標準化して欲しい。 XSLTのデバッグに苦労した。 (無償ツールばかりだったから?) Java Scriptなら、MS-Officeのスクリプトエディタ付属デバッガでデバッグできるが、<msxsl:script>タグ内のデバッグはサポートされていない。 Visual Studio 2005のXSLTデバッグ機能も Express ~ Standard Editionには無い。Professional Editionでも、<msxsl:script>タグには対応していない? グチ PHP・ASP・JSPの<%=式%>のような文字列埋め込み機能が欲しい。 namespaceの扱いが難しい。本当は<源:帖>などとしたかったのだが… XMLの連結をXSLTで書いたらエラー処理できずボツ。JavaScriptで書き直した。 "<"はそのまま書けるのに" "をそのまま書けないのはなぜ?。