80 likes | 340 Views
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 未踏プロジェクトで作成。 クライアント側で動的再編集する基本方式を確立した。
E N D
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未踏プロジェクトで作成。 機能強化、構造整備、実用性向上
V1の既存機能 凡例 目標とする新機能
固定 固定 HTML HTML HTML イメージ 挿絵 V1 - HTML版 の 仕掛け 本文 注釈 渋谷栄一訳 ローマ字版 与謝野晶子訳 オリジナルHTMLファイル 静的再編集プログラム • 一括生成 • 一括アップロード 再編集結果
本文 注釈 挿絵リンク 朗読リンク 渋谷栄一訳 本文 注釈 渋谷栄一訳 ローマ字版 与謝野晶子訳 ひらがな版 文節情報 与謝野晶子訳 オリジナルHTMLファイル ルビ 本文と朗読の対応関係 ・・・ XMLデータ イメージ・音声 挿絵 朗読 V3 - XML版 の 仕掛け 静的再編集プログラム • 動的再編集(XSLT) • クライアント側で実行 XMLデータと再編集プログラムは追加可能 固定 動的再編集 プログラム1 (横書き表示) 動的再編集 プログラム2 (縦書き表示) 動的再編集 プログラム3 (縦書き印刷用文書作成) ・・・ HTML HTMLIE6以降 WordMLMS-Word 2003以降
本文 注釈 挿絵リンク 朗読リンク 渋谷栄一訳 与謝野晶子訳 ひらがな版 文節情報 ルビ 本文と朗読の対応関係 ・・・ XMLデータ V3 - 再編集プログラムの構造 再編集仕様設定ページ(PHP) 実行 動的再編集処理ページ生成(PHP) MySQLデータベース(会員情報、フォルダ情報等) サーバ側で実行する部分 書式設定 再編集形式 毎に作成 クッキー(書式情報等) OK PHPで生成された動的再編集処理ページ (HTML/HTA & JavaScript) 動的再編集処理ページのテンプレート(HTML & JavaScript) 再編集結果 再編集書式設定ページ(HTML & JavaScript) 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> <SCRIPT> 処理内容は以下のとおり。 ●使用する3つの文字コード(シフトJIS、EUC、UTF-8)の相違を乗り越えるための処理 ●xmlLoadした複数のXMLデータとXMLのヒアドキュメントを1つのXMLに連結する。 ●連結したXMLをXSLTで変換 ●変換結果をファイルに保存 ●Word 2003起動 </SCRIPT> </BODY></HTML> 参考リンク連結したXMLXSLT変換結果(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で書き直した。 • "<"はそのまま書けるのに" "をそのまま書けないのはなぜ?。