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