Comments
Description
Transcript
webMathematica ユーザガイド
webMathematica ユーザガイド Tom Wickham-Jones Version 2.1 April 2004 Copyright © 1999-2004 Wolfram Research, Inc. All rights reserved. Mathematica, MathLink, and webMathematica are trademarks of Wolfram Research, Inc. Java is a trademark of Sun Microsystems, Inc. All other trademarks used herein are the property of their respective owners. 2 webMathematica User Guide 目次 1. はじめに 1.1 webMathematica について 1.2 なぜWebでMathematica を使うのか 1.2.1 ב算 1.2.2 インタラクティブなプログラミングلؘ 1.2.3 接続性 1.2.4 Mathematica フロントエンド 1.2.5 数式のタイプセットとMathML 1.3 なぜWebのインターフェースか 1.3.1 使いやすさ 1.3.2 サーバベースのध定 1.3.3 Web技術 1.4 webMathematica が使われる領域 1.4.1 Web上でのב算 1.4.2 教育 1.4.3 出版 1.4.4 研究 1.4.5 ߁味 1.5 webMathematica の技術 1.5.1 必要事項 webMathematica User Guide 1.6 webMathematica 2.1の新機能 1.7 webMathematica 2.0の新機能 Mathematica 4.2 のサポート 簡単になったインストール 充実したドキュメントと例題 JSPカスタムタグに基づいた新テンプレートメカニズム MathML,SVG,XMLのサポート メッセージのキャッチとプリント出力のサポート HTTPファイルのアップロードサポート HTTPセッション変数のサポート HTMLフォーマット関数 1.7.1 webMathematica 2.0での変更点 セキュリティध定ファイルの場所 MSP.confの場所 2. インストール 2.1 サーブレットコンテナのध定 2.1.1 Javaのध定 Unix Windows Mac OS X 2.1.2 Tomcatのध定 Unix Windows Mac OS X 2.2 Mathematica のインストールとध定 2.3 webMathematica Webアプリケーションのインストール 2.3.1 Tomcatを使用する場合 2.3.2 Tomcatを使用しない場合 JRun その他のサーブレットエンジン 2.4 X Window Systemのध定(Unixのみ) 2.4.1 XvncとwebMathematica のध定 Xvncのインストール Xvncのӭ動 Xvncのテスト webMathematica のध定 3 4 webMathematica User Guide 2.4.2 X関連のその他の問題 Xサーバとの接続 Xvfb マニュアルでのフォントインストール 2.5 webMathematica 2.0からのアップデート 2.5.1 Mathematica 5.0のインストール 2.5.2 webMathematica Webアプリケーションのインストール 2.5.3 新しいレイアウトのध定 web.xml MSP.conf セキュリティのध定 2.5.4 新しいレイアウトに内容を移動する 2.5.5 インストールの終了 2.6 その他のध定(オプショナル) 2.6.1 MSP Mathematica アプリケーション 2.6.2 webMathematica の自動ӭ動 Unix Windows 2.6.3 Webサーバの接続 ApacheとTomcat MicrosoftサーバとTomcat Apache/MicrosoftサーバとJRun 2.7 テスト 3. 基本的な例題 3.1 Hello.jsp 3.2 変数を使う:Variables.jsp 3.3 MSP関数:Expand.jsp 3.4 グラフィックス:Plot.jsp 3.5 タイプセットの画像:Integrate.jsp 3.6 ライブ3Dプロット:Plot3DLive.jsp 3.7 メッセージを得る:Messages.jsp 3.8 一般的な内容をೊす:Content.jsp 3.9 アプレット:TextApplet.jsp 3.10 Javaスクリプト:PlotScript.jsp 3.11 変数のध定:SetBasic.jsp webMathematica User Guide 3.12 変数の取得:GetBasic.jsp 3.13 MSPとの対話:IncludeMSP.jsp 4. ページの作成 4.1 ページ作成のヒント 4.1.1 変数 4.1.2 ページのコード 4.2 テンプレート 4.2.1 参照例 4.2.2 デザイン例 4.2.3 バナーとボタン 4.3 最小インストール 4.3.1 最小のファイルレイアウト 5. アプリケーション 5.1 XML 5.1.1 XMLとは XMLコンプライアンス 5.1.2 Mathematica のXMLサポート 5.1.3 webMathematica XMLアプリケーション 5.2 MathML 5.2.1 WebのドキュメントにMathMLを埋め込む XHTML XHTMLとMathML XHTMLドキュメントとMathMLドキュメントの描画 5.2.2 webMathematica からMathMLを生成する MathMLを統合した例題 5.2.3 webMathematica にMathMLを送信する MathML入力の例 5.3 SVG 5.3.1 SVGを使ったプロット 5.3.2 SVGアニメーション 5.4 HTMLのフォーマット 5.4.1 HTML関数 HTMLTableForm HTMLFormat HTMLSelect 5 6 webMathematica User Guide HTMLCheckBox 5.4.2 webMathematica の例題 表のフォーマット 選択範囲のフォーマット 5.5 Java APIを使う 5.5.1 サーバAPI 5.5.2 その他のJava API 5.6 データのロードとב算 5.6.1 ファイルのI/O 5.6.2 HTTPアップロード 5.6.3 データベースの接続 5.6.4 Webサービス 5.6.5 データの例 データのロード:Load.jsp データのアップロード:Upload.jsp データセッションの保存:Session.jsp 5.7 Mathematica パッケージとアプリケーション 5.7.1 パッケージをロードする 5.7.2 パッケージを書く 5.7.3 パッケージをインストールする webMathematica アプリケーション $BaseDirectory $UserBaseDirectory スクリプトディレクトリ $TopDirectory PackagesDirectory 絶対ファイル名 5.8 代替サーバ技術 5.8.1 JavaServer Pages 5.8.2 PHP 5.9 PDFドキュメント Mathematica ノートブックの生成 PostScriptへの変換 PostScriptからPDFへの変換 5.9.1 PDFの例題の作成 5.10 一般的な内容をೊす 5.10.1 MSPReturn webMathematica User Guide 5.10.2 MSPURLStore 5.10.3 MSPPageOptions/ContentType 6. よりژ度なトピック 6.1 変数 6.1.1 入力変数 入力変数のЖ釈 Ж釈された値をЖ釈されていない値 MSPBlockとMSPToExpression 6.1.2 ページ変数 6.1.3 セッション変数 6.2 セキュリティ 6.2.1 MSP関数の認証 重要:セキュリティのד告 認証のプロセス 6.2.2 自分のセキュリティモデルのध定 6.2.3 ToExpressionの有効性 6.2.4 アクセス制限 6.3 評価のフォーマット 自動フォーマット MSPフォーマット 文字列のフォーマット グラフィックスのフォーマット 出力をͩす 複数のב算 6.4 JSPの処理 6.5 複数カーネルプール 6.5.1 Mapping JSPs to Pools 6.5.2 Multiple Web Applications 6.6 URLのJSPへのマッピング 6.7 Mathematica の初期化 6.8 ログ 6.9 カーネルモニタ 6.10 webMathematica のデバッグ 6.11 数式やグラフィックスの表示 MSP Functions Returning Images 7 8 webMathematica User Guide 6.12 ऍ的なファイルを含む 7. トラブルシューティング 7.1 最初のチェック 7.1.1 サーバのチェック 7.1.2 URLのチェック 7.1.3 最初のページのチェック 7.1.4 KernelMonitorのチェック 7.1.5 ログファイルのチェック 7.1.6 コンソールシェルのチェック 7.1.7 Mathematica のチェック 7.2 個々の問題 7.2.1 フロントエンドをӭ動する際の問題 7.2.2 Xvncのテストの問題(Unixのみ) 7.2.3 Xvfbのテストの問題『Unixのみ) 7.2.4 画像の問題 7.2.5 Mathematica のパッケージとアプリケーション 7.2.6 カーネルの初期化 7.2.7 フォーマットの際の縦方向の整列 7.2.8 時間切れの問題 7.2.9 UnsatisfiedLinkError 7.2.10 JLink`がロードできない 7.2.11 NoClassDefFoundError:TryCatchFinally 7.2.12 NoClassDefFoundError:JLink Classes 7.2.13 NoSuchMethodError:KernelData 7.3 問題のレポート 8. 以前のwebMathematica 技術 8.1 MSPスクリプトのJSPへの変換 8.1.1 MSPのJSPへの変換 8.1.2 JSPのMSPへの変換 8.2 複数カーネルプールとMSPスクリプト 8.3 MSPスクリプトの処理 8.3.1 HTTPとMSPスクリプト 8.3.2 MSPサーブレット スクリプト名の決定 Mathematica カーネルの獲得 webMathematica User Guide 入力変数の割当て ページとMathletの処理 後処理 応答 画像処理 8.3.3 まとめ 8.4 URLのMSPスクリプトへのマッピング 8.4.1 スクリプトのディレクトリ 8.5 MSPスクリプトとऍ的ファイル 8.6 MSPスクリプトの例題 8.6.1 はじめに:Hello.msp 8.6.2 変数を使う:Variables.msp 8.6.3 MSPの関数を使う:Expand.msp 8.6.4 グラフィックス:Plot.msp 8.6.5 タイプセットの画像:Integrate.msp 8.6.6 ライブ3Dプロット:Plot3DLive.msp 8.6.7 一般的な内容をೊす:Content.msp 8.6.8 アプレット:TextApplet.msp 8.6.9 Javaのコールバック:Request.msp 8.6.10 ファイルのアップロード:UploadFile.msp 9. 付ຉ 9.1 Mathematica 関数のリファレンス 9.1.1 MSPBlock 例外 9.1.2 MSPException 9.1.3 MSPExportImage 9.1.4 MSPFormat HTMLのフォーマット 画像のフォーマット MathML 9.1.5 MSPGetMessages 9.1.6 MSPGetPrintOutput 9.1.7 MSPGetUploadFile Exceptions 9.1.8 MSPGetUploadFileList Exceptions 9 10 webMathematica User Guide 9.1.9 MSPInclude 例外 9.1.10 MSPLive3D 9.1.11 MSPPageDirectory 9.1.12 MSPPageOptions ContentType MinimumVersion 9.1.13 MSPReturn 9.1.14 MSPRootDirectory 9.1.15 MSPSetDefault 例外 9.1.16 MSPSessionVariable 9.1.17 MSPShow 9.1.18 MSPShowAnimation 9.1.19 MSPToExpression 例外 9.1.20 MSPURLStore 9.1.21 MSPValue Exceptions 9.1.22 MSPValueQ 9.1.23 $ExportImageOptions 9.1.24 $MSPFormatType 9.1.25 $PageWidth 9.1.26 $PathInfo 9.1.27 $QueryString 9.1.28 $ScriptName 9.1.29 $ServletConfig 9.1.30 $ServletRequest 9.1.31 $ServletResponse 9.1.32 $ShowAnimationOptions 9.1.33 $TypesetImageWidth 9.1.34 $WebApplication 9.2 MSP Taglibのリファレンス 9.2.1 msp:allocateKernel(タグオープン) プールの決定 カーネルの割当て 入力変数の割当て パラメータの割当て webMathematica User Guide 初期化 9.2.2 msp:evaluate 9.2.3 msp:allocateKernel(タグクローズ) Javaの例外 MSPReturn ContentTypeのध定 カーネルをクリーンにする カーネルのЖ放 9.2.4 msp:set 9.2.5 msp:get 9.2.6 msp:includeClassicMSP 9.2.7 msp:forwardClassicMSP 9.2.8 まとめ 9.3 サイトのध定 9.3.1 MSP.conf CheckToExpression CollectStreams FileCheckPeriod FrontEndGraphics FrontEndLaunchCommand ImageAltText JLinkNativeLibraryDirectory KernelAcquireLimit KernelConnectLimit KernelInitialization KernelNumber KernelPools KernelTimeLimit MathLinkArguments MSPDirectory PackagesDirectory PoolPath RequestLog SecurityConfigurationFile StaticFileExtensions VerboseLogs WebApplicationName 9.3.2 セキュリティのध定 11 12 webMathematica User Guide 9.3.3 Xサーバのध定 9.4 LiveGraphics3D 9.5 動的HTML 9.5.1 サーバ技術 CGIスクリプト ASP (Active Server Pages) サーバプラグイン Perlスクリプト JavaサーブレットとJavaServer Pages 9.5.2 クライアント技術 HTML JavaScript アプレット 今後の開発 9.6 MathMLの技術 9.6.1 MathPlayer 9.6.2 WebEQ 9.6.3 Mozilla 9.6.4 Amaya 9.7 ファイルのレイアウト webMathematica Webアプリケーション MSP Mathematica アプリケーション 9.8 リンク 9.8.1 Mathematica 技術 9.8.2 Mathematica パッケージ 9.8.3 Java 9.8.4 Tomcat 9.8.5 サーバJSPとサーブレット 9.8.6 XML,HTML,MathML,SVG 9.8.7 JavaScript 9.8.8 PDF ツール 9.8.9 X Window System 1. はじめに webMathematica User Guide 13 このドキュメントではwebMathematica のインストールと操作,そしてwebMathematica サイトの開発に ついて説明します. 「はじめに」では,なぜWebサイトでMathematica を使うのかについて考え,どんな領域で使うこと ができるかの例を見てみます.続いて,基礎となるMathematica サーバページの技術について述 べ,webMathematica をӭ動するための必要事項の概略を説明します. 1.1 webMathematica について webMathematica はMathematica と最新のWebサーバ技術を統合し,インタラクティブなב算とビジュ アル化をWebサイトに加えます.下の画像はwebMathematica サイト http://library.wolfram.co.jp/explorations/webUnrisk/index.htmlからのものです. このサイトはWebブラウザのインターフェースにMathematica による金融ב算とビジュアル化を加え るものです. ユーザはこのサイトで異なった入力パラメータを選んでデータを送信しながら一連の ページを進むことで一連の結果を構築します. 14 webMathematica User Guide 1.2 なぜWebサイトでMathematica を使うのか ב算,インタラクティブなプログラミングلؘ,接続性,Mathematica のフロントエンド,MathMLの 拡張サポート等,Mathematica にはWebサイトに提供できる重要な機能がたくさんあります. 1.2.1 ב算 Mathematica は数値ב算,数式処理,グラフィックスのように,ב算を要する数多くの領域のための 大Ӫ模な関数コレクションを有しています.webMathematica によってこれらすべてがWebを介して使 えるようになります. Webテクノロジーは,いろいろな領域で大変優れてはいますが,科学ב算にはあまり適していませ ん.ב算はあまり重要視されていないのです.一方Mathematica は科学ב算に大変適してい て,Web上のב算にもこの特性を提供します. 1.2.2 インタラクティブなプログラミングلؘ Mathematica はژレベルの,インタラクティブな関数型プログラミングلؘでもあります.ژ速でプ ロトタイプを行い,大Ӫ模集中ב算も行います.プログラマの力をあまり使わずに大Ӫ模なサイトを 作り上げることができるので,Webサイトを作る上で有利だといえるでしょう. 1.2.3 接続性 Mathematica はJava,C,Fortran,Perlのようなلؘが提供する外ಊサービスと容易に接続できま す.これらのサービスはב算のデータソースを提供し,Mathematica から結果を受け取ることができ ます.この中でもJavaをMathematica に統合するJ/Link というツールキットを使ってJavaと結合するの が一番簡単です.J/Link の詳細はhttp://www.wolfram.co.jp/solutions/mathlink/jlinkでご覧ください. webMathematica User Guide 15 1.2.4 Mathematica フロントエンド Mathematica のノートブックユーザインターフェース(フロントエンド)は,期に渡って Mathematica カーネルを使って作業するための最ژのメカニズムを提供してきましたが,web Mathematica は Webを介してこれに代るインターフェースを提供します.フロントエンドはWebの環境でも大変便利 なものです.数式にタイプセットを施したり2D・3Dのグラフィカルオブジェクトを画像として描画 したりするのに使われます.これに加えフロントエンドはクライアントへ送るためのノートブックド キュメントをサーバ上に生成することもできます. 1.2.5 数式のタイプセットとMathML Mathematica はインタラクティブな数式のタイプセットのための最良のシステムです.また,数学・ 科学的な内容をWeb上で,また他のアプリケーションで利用・再利用することを目的としてधבされ たMathMLを使うためのパワフルなツールでもあります.これは増え続けているMathML対応ツールと 共に使うことのできるwebMathematica の貴重な要素です. 1.3 なぜWebのインターフェースか WebのインターフェースはMathematica に使いやすさや配信の便利さ,多くのプロのWeb開発者や Web技術等さまざまな利点をもたらします. 1.3.1 使いやすさ webMathematica によるサイトを利用するのに必要なものはWebブラウザだけです.ユーザインターフ ェース要素はすべて,テキストフィールド,チェックボックス,ドロップダウンリストなどの標準 Web GUI要素です.このため,新たなソフトウェアについて学ぶ必要がなくなり,トレーニング時間 が節約できます.多くの場合,Mathematica の経験も必要ありません. 16 webMathematica User Guide 1.3.2 サーバベースのध定 webMathematica サイトを利用するのに,買ったり,インストールしたり,管理したりしなければなら ないソフトウェアはありません.エンドユーザに必要なのはWebブラウザだけ,インタラクティブな 3Dグラフィックスなどの一歩進んだ機能を利用される方でも,それに加えてJavaランタイム環境が必 要になるだけです.これにより,ユーザソフトウェアの購買・保守費用を著しく節約でき,また,す べてのエンドユーザが常に最新版を使っているということが確実になります.また,webMathematica を用いたWebサイトは,いろいろな種์のコンピュータからアクセスすることができます. 1.3.3 Web技術 サーバの技術者や動的なWebサイトの開発者の中にエキスパートは大勢います.そのような人 は,Mathematica に関連したサイトの開発に,数多いWebの技術やツールの中から適当なものを選ぶ ことができます.ですから,開発は簡単ですし,構築されたアプリケーションはよりパワフルなもの になります. 1.4 webMathematica が使われる領域 webMathematica が使われる領域の例として,Web上のב算,教育,出版,研究,߁味としてのב算等 が挙げられます. 1.4.1 Web上でのב算 webMathematica の主な用途はב算とビジュアル化のための組込みツールの構築です.例として webUnriskのWebサイトhttp://library.wolfram.co.jp/explorations/webUnrisk/index.htmlをご覧ください.以 下はwebUnriskからの例です. webMathematica User Guide 17 1.4.2 教育 Mathematica は教育分野で幅広く使われています.教育関連のアプリケーションはweb Mathematica を 使ってWebベースの教育ツールとして展開することができます. The Integrator ( http://integrals.wolfram.com )はWolfram Researchが開発した積分ב算のWebサイトです.Calc101 ( http://www.calc101.com )も教育分野におけるwebMathematica の例といえるでしょう.これは.ژ校・ 大学生を対象とした一ಊ無料一ಊ有料の積分と微分問題のためのサイトです.以下をご覧ください. 18 webMathematica User Guide 1.4.3 出版 多くの出版社がWebベースの副教材,マニュアル,ܚ誌を開発しています.webMathematica は技術的 な分野でのWebベースの出版に適した技術を提供します.The Mathematical ExplorerはWolfram Researchが提供する新しいインタラクティブなテキストで,エッシャーのモチーフや四ѓい輪からフ ェルマの最終定理やリーマン仮説までをカバーします.webMathematica で構築されたWebベースの The Mathematical Explorer用の補助教材はhttp://library.wolfram.co.jp/explorations/explorer/index.htmlでご覧 になれます.以下はその一例です. 1.4.4 研究 世界中の研究者がMathematica を使って専分野の研究を行い問題Ж決のための技術やアルゴリズム を開発しています.このようにMathematica によって開発された業績がライブのインタラクティブな W ebサイトから配信できるようになり,研究結果に接することができる人数が格段に増えまし た.http://library.wolfram.co.jp/webMathematica/MSP/Explore/Mathematics/ConstantCurvature-jp は定曲率の 表面をプロットするWebサイトです. webMathematica User Guide 19 1.4.5 ߁味 webMathematica は,個人的な研究や興味を引くインタラクティブなב算・ビジュアル化を展示する Webベースの新しい方法を提供します.AnalyticCycling.com( http://www.analyticcycling.com/)は,Mathematica エンジンを利用した楽しいWebサイトです.技術志向の自転車愛好家のためにデザインされた AnalyticCycling.comは,サイクリングパフォーマンスのב算に妥協をしない教科書的なアプローチを 取るWebベースのב算機を提供しています.) 20 webMathematica User Guide 1.5 webMathematica の技術 webMathematica はJavaサーブレットとJavaServer Pages (JSP)の2つの標準的なJavaの技術に基づいてい ます.サーブレットは,一般に「サーブレットコンテナ」あるいは「サーブレットエンジン」と呼ば れるJava対応のWebサーバマシンで実行される特別のJavaのプログラムです.サーブレットコンテナ にはさまざまの種์があり,これを使えるオペレーティングシステムやアーキテクチャも多様で す.サーブレットコンテナはApache Webサーバのような他のWebサーバに統合することも可能です. webMathematica の技術を使うと,Mathematica のコマンドによって機能強化されたHTMLページをサ イトに加えることができます.このようなページにリクエストが送られると,Mathematica のコマン ドが評価され,ב算結果がページに置かれます.この一連の動作は,特別なタグを使い,標準的な JavaのテンプレートメカニズムのJavaServer Pages (JSP)によって行われます.これに関する例題は 後の セクションを参照して下さい. webMathematica の技術にはWebサーバのリクエスト/応答標準が使われています.入力はHTML形 式,アプレット,javascript,Web対応のアプリケーション等から送ることができます. webMathematica のサーバにデータファイルを送って処理することもできます.出力はHTML,画像, Mathematica ノートブック,MathML,SVG,XML,PostScript,PDF等のさまざまな形式にすることができま す.このユーザガイドでは,これらの技術について例題を交えて説明します. webMathematica はMathematica を使ってב算するための多様な方法に対応する Mathematica コマンドの 大Ӫ模なライブラリを提供します.強固で効率的かつ安全な方法でMathematica を呼ぶカーネルマ ネージャはwebMathematica の重要な要素です.このマネージャが1つあるいは複数のカーネルの入っ たカーネルプールを管理し,これによって一度に複数のリクエストを処理します.webMathematica は 下記の図に示したように動作しています. webMathematica User Guide 21 webMathematica はMathematica を使ってב算するための多様な方法に対応する Mathematica コマンドの 大Ӫ模なライブラリを提供します.強固で効率的かつ安全な方法でMathematica を呼ぶカーネルマ ネージャはwebMathematica の重要な要素です.このマネージャが1つあるいは複数のカーネルの入っ たカーネルプールを管理し,これによって一度に複数のリクエストを処理します.webMathematica は 下記の図に示したように動作しています. ブラウザがwebMathematica のサーバにリクエストを送る. webMathematica のサーバがプールからMathematica カーネルを獲得する. Mathematica カーネルが入力パラメータで初期化され,ב算し,結果をサーバにೊす. webMathematica のサーバがMathematica カーネルをプールにೊす. webMathematica のサーバが結果をブラウザに送る. 1.5.1 必要事項 webMathematica とMSPテクノロジーは,サイト開発に必要な知ށを最小限にすることを目標にしてい ます.つまり,HTMLとMathematica について知っているだけでよしとすることです.JavaやJavaScriptの特別な知ށは必要ありません.webMathematica のもうひとつの目標は,サイトの運営,保 守,ध定をできるだけ便利にするためにサイト管理を自動化することです.webMathematica サイトの 管理者にはインストール以外のJavaの知ށは必要ありません. webMathematica に必要な最低限の技術要素 † サーブレット仕様2.2以上とJSP仕様1.2以上の両方をサポートするサーブレットコンテナ 22 webMathematica User Guide † Java開発キット(JDK) 1.2以上,Java 2バージョン1.4以上を推奨 上記コンポーネントをサポートするハードウェアとオペレーティングシステムの組合せはఫ常にたく さんあります.Mathematica を運営できるシステムのほとんどがweb Mathematica サイトをサポートし ます.現在のところ,弊社ではIntel/Windows,Intel/Linux,Sun/Solaris,IBM-RISC/AIX,PA-RISC/HPUX,Mac OS X,Alpha/Tru64,Alpha/Linux,AMD64/Linux,Itanium/Linuxを完全サポートしていま す.この他のプラットフォームについてはWolfram Researchまでお問い合せください.web Mathematica はWindows 2000,Windows XP,Windows NT,Windows 98,Windows 95のように多くの Microsoftのオペレーティングシステム上でӭ動しますが,テストやデモンストレーションのみが目的 の場合はWindows 95/98を使われた方がよいでしょう.サーブレットコンテナのध定方法については 別 のセクションで説明します. お使いのサーブレットコンテナがJSP 1.1 APIしかサポートしない場合でも以前のwebMathematica 技術 を使ってwebMathematica を動かすことができます.この方法については後程説明します. 1.6 webMathematica 2.1の新機能 webMathematica 2.1の主な新機能はMathematica 5.0のサポートです.これに加え,内ಊ的に改良された 点も多く,新たな例題も加えられています. 1.7 webMathematica 2.0 の新機能 このセクションでは,webMathematica 2.0の多くの新/改良機能について説明します. Mathematica 4.2のサポート webMathematica 2.0はMathematica 4.2に対応しています.Mathematica 4.2にはWebの操作に関連した多 くの機能があります.中でも重要なのはXMLのサポートです. webMathematica 2.0にはMathMLや SVGのように,XML機能やXMLのアプリケーションを使った例題がたくさんあります. 簡単になったインストール webMathematica 2.0ではインストールのプロセスが簡単になり,web Mathematica Webアプリケーショ ンだけをインストールすればよくなりました.この他に必要なध定も最低限になっています. webMathematica User Guide 23 充実したドキュメントと例題 webMathematica のドキュメントがHTML形式でも提供され,web Mathematica のフロントページからも アクセスできるようになりました.また,新機能を説明する新たな例題もたくさん加えられました. JSPカスタムタグに基づいた新テンプレートメカニズム JavaServer Pagesカスタムタグに基づく新しいHTMLテンプレートメカニズムがઉ加されました. webMathematica の使用に当たっては,現在ではこちらの方法をお勧めしています.このメカニズムの 方が理Жしやすく,また他のJSPカスタムタグライブラリを使用することもできるので,webMathematica を他のサーバアプリケーションに統合することが簡単だからです. MathML,SVG,XMLのサポート webMathematica 2.0にはXMLのアプリケーションMathMLとSVGのサポートがに組み込まれていま す.また,Mathematica 4.2で導入された新しいXMLの処理ツールも使うことができます. メッセージのキャッチとプリント出力のサポート Mathematica のメッセージやプリント出力をキャッチするための 新たな関数が加えられました.これ は資料のデバッグや開発に便利です. HTTPファイルのアップロードのサポート HTTPファイルのアップロードのための新たな関数が加えられました.これはwebMathematica Webサーバに情報を送信する重要な手段です. の HTTPセッション変数のサポート サーバに保存されているHTTPセッション中のマテリアルを保存するための,新たな関数が加えられ ました.これは,あるב算の結果を次のב算まで保存したいときに便利です. HTMLフォーマット関数 結果をHTML形式にする新たな関数が提供されました. 24 webMathematica User Guide 1.7.1 webMathematica 2.0での変更点 このセクションにはMathematica 1.0と2.0の相違点を挙げてあります. セキュリティध定ファイルの場所 セキュリティध定ファイルを見付けるメカニズムが変更されました.2.0ではセキュリティध定ファイ ルはプールध定ファイルで名付けられ,webMathematica/WEB-INF/confの中央ध定ディレクトリ に置かれています.1.0ではध定ファイルをMathematica パスのどこにでも置くことができました. この変更は,中央の単独の場所からセキュリティध定をロードする方がより安全なために行われまし た.webMathematica のデフォルトのセキュリティシステムは大変保守的なので,セキュリティファイ ルを移動しないサイトは予想よりもژいレベルのセキュリティを持って実行されることになりま す.セキュリティについては後のセクションで説明します. MSP.confの場所 MSP.confのデフォルトの場所がwebMathematica/WEB-INF/confの中央の場所に移されまし た.ユーザのサーバは自動的にこの場所を検索するので,これによりユーザ側のサーバध定がはるか に簡単になりました. 25 webMathematica User Guide 2. インストール 以下のインストールの説明はサーブレットコンテナのध定とwebMathematica のインストールに焦点を 当てています.上記の説明の通り,webMathematica はサーブレットと呼ばれる標準的なJavaの技術に 基づいています.サーブレットのサポートは普通サーブレットコンテナというプログラムが提供しま す.webMathematica を加える前に,まず,サーブレットコンテナをध定しなければなりません. インストールは次の手順で行います. † サーブレットコンテナをध定する. † Mathematica CD-ROMを使ってMathematica をध定する. † webMathematica Tools CD-ROMを使ってサーブレットコンテナにweb Mathematica Webアプリ ケーションをインストールする. † Unixの場合はXサーバのध定が必要な場合がある. † 最後にwebMathematica サイトをテストする. webMathematica のインストールについては,Wolfram http://documents.wolfram.com/webmathematica/updates/installをご覧ください. Researchの 2.1 サーブレットコンテナのध定 webMathematica のインストールを始める前に,Javaとサーブレトコンテナをインストールする必要が あります.これらがすでにインストールされている場合は,ここを飛ばして次のステップに進んでく ださい. サーブレットコンテナにもさまざまな種์がありますが,Tomcatはその中でも大変便利なもので す .これはhttp://jakarta.apache.orgで入手できます.JRunも人気のあるサーブレットコンテナ で,http://www.macromedia.com/software/jrun/から入手できます.webMathematica の実行にはTomcatを 使うのが一般的なので,UnixとWindowsにおけるTomcatのインストールとध定についても説明を加え ましたのでご利用ください. webMathematica はTomcat,JRun,それに http://www.wolfram.co.jp/products/webmathematica/technology/specifications.html に列挙されている他のコ ンテナでテストされています.この他のコンテナでwebMathematica を実行したいと特にご希望の 方,あるいは実行した経験がおありの方はWolfram Researchまでご連絡ください.しかし,何らかの 理由で特に使いたいコンテナが決まっている場合を除いては,Apache Tomcatをお使いになることをお 勧めします. webMathematica はTomcat,JRun,それに webMathematica User Guide http://www.wolfram.co.jp/products/webmathematica/technology/specifications.html に列挙されている他のコ ンテナでテストされています.この他のコンテナでwebMathematica を実行したいと特にご希望の 方,あるいは実行した経験がおありの方はWolfram Researchまでご連絡ください.しかし,何らかの 理由で特に使いたいコンテナが決まっている場合を除いては,Apache Tomcatをお使いになることをお 勧めします. 26 サンプルサーブレットをӭ動してサーブレットコンテナが正しく動くことを確認したら,webMathematica のインストールを始めてください.サーブレットコンテナが動かなければweb Mathematica も動 きません.このセクションの後半ではJavaとTomcatのध定について説明します.Tomcatをお使いにな らない場合は後半は飛ばし,ご自分のサーブレットコンテナについての文書をご参照ください. 2.1.1 Javaのध定 Javaバージョン1.2以降をサポートするJava開発キット(JDK)ならどれでも使えます.しかしWindows 2000/NT/XP,Linux,Solarisの場合は,SunのJava 2バージョン1.4のような新しいバージョンのJavaを 使 わ れ る こ と を お 勧 め し ま す . こ れ は S u n の J a v a メ イ ン サ イ ト http://java.sun.com/j2se/downloads/index.htmlで入手できます.このサイトでは,インストールについて プラットフォーム別に細かく説明されています.インストールはどれも比ѕ的簡単で,大抵の場 合,インストーラをダウンロードして実行するだけです.webMathematica をӭ動するのに必要なのは JDKです.Mac OS XにはJava 2のバージョン1.3がプレインストールされています.その他のプラット フォームには製造元から最新バージョンのJavaを入手することができます.役に立つリンクもご覧く ださい. JAVA_HOME環境変数のध定も必要です.これについてはUnixとWindowsの各セクションで説明しま す. Unix JAVA_HOME環境変数をTomcatが実行される環境にध定する必要があります.bashシェルの初期化 ファイルである.bashrcの中に入れるのに適した以下の例をご覧ください. JAVA_HOME=/usr/local/j2sdk1.4 export JAVA_HOME この他のシェルの場合は,それぞれの環境変数ध定の基準に従ってください. Windows Windowsの場合はTomcatのインストーラがインストールされているJavaを見付けるので,JAVA_ HOME環境変数のध定はそれほど重要ではありません.とはؘうものの,このध定はやはりお勧めし たいものです. 「コントロールパネル」の「システム」アイコンを開くと「システムのプロパティ」ウィンドウが現 れます.ここで「詳細ध定」タブを,次いで「環境変数」ボタンを選びます.システム変数として 「J AVA_HOME」と入力し,これをJDKが入っているトップディレクトリにध定します.例え ば,JDKがc:¥j2sdk1.4.0_01にインストールされている場合はこれがJAVA_HOMEのध定になりま す. webMathematica User Guide 27 「コントロールパネル」の「システム」アイコンを開くと「システムのプロパティ」ウィンドウが現 れます.ここで「詳細ध定」タブを,次いで「環境変数」ボタンを選びます.システム変数として 「J AVA_HOME」と入力し,これをJDKが入っているトップディレクトリにध定します.例え ば,JDKがc:¥j2sdk1.4.0_01にインストールされている場合はこれがJAVA_HOMEのध定になりま す. Mac OS X Mac OS X 10.3には出荷時にJava 2バージョン1.4.1が入っています.また,ソフトウェアアップデート 機能を使ってこれ以降のアップデートを入手することも可能です(http://www.apple.com/java/もご覧く ださい).Javaをアップデートした場合は,JAVA_HOME環境変数を適切にध定して,常にJDKの最 新バージョンを使うようにすることができます. 以下をご覧ください. JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home export JAVA_HOME Mac OS X 10.3用のデフォルトのログインシェルは bashなので,上記のコマンドは.bashrcのように適 切なシェル初期化ファイルに入れる必要があります. Mac OS X 10.2には出荷時にJava 2バージョン1.3.1が入っていますが,ソフトウェアアップデート機能 を使ってこれ以降のアップデートを入手することも可能です(http://www.apple.com/java/もご覧くださ い).Javaをアップデートした場合は,JAVA_HOME環境変数を適切にध定して,常にJDKの最新 バージョンを使うようにすることができます. 以下をご覧ください. setenv JAVA_HOME/System/Library/Frameworks/JavaVM.framework/Home Mac OS X 10.2用のデフォルトのログインシェルはtcshなので,上記のコマンドは.tcshrcのように適 切なシェル初期化ファイルに入れる必要があります. 2.1.2 Tomcatのध定 このセクションではUnixとWindowsでのTomcatのध定方法を説明します.TomcatのメインWebサイト はhttp://jakarta.apache.orgです.付ຉのリンクには便利なリンクが載っています. 28 webMathematica User Guide Unix Tomcatを実行するためには,まずマシンにJDKをध定しなければなりません.ध定方法については前 のセクションをご参照ください. T o m c a t の 現 行 バ ー ジ ョ ン の ダ ウ ン ロ ー ド 情 報 は http://documents.wolfram.com/webmathematica/updates/install/tomcat/current をご覧ください.いろいろの アーカイブ形式があります.アーカイブの内適当なものを/usr/localのようなどこか中央の場所でЖ 凍してください.ここでトップレベルのディレクトリの名前を変えることもできます.Tomcatの実際 の場所とトップレベルのディレクトリ名はユーザの一存で決定できます.以下はこのステップのシェ ルインストラクションのサンプルです(tar xvfz archiveは,抽出されたファイルについての情報を 与えます). Tomcatのこの他のバージョンは,ApacheのWebサイト http://jakarta.apache.orgから入手で きます. [server1]$ cd /usr/local [server1]$ tar xfz jakarta-tomcat-4.1.30.tar.gz [server1]$ mv jakarta-tomcat-4.1.30tomcat Solarisのように,プラットフォームによってはデフォルトのtarコマンドを使っても上記のように TomcatのアーカイブがЖ凍できない場合があります. この場合,オプションが使いたければ http://www.gnu.org/directory/GNU/tar.htmlからGNU tarユーティリティをダウンロードするとよいでしょ う. tomcatのように特権レベルの低いアカウントを作ってサーブレットコンテナを実行するとよいでし ょう.また,このアカウントにホームディレクトリがあってXサーバとMathematica の初期ध定情報が 保存できると便利でしょう.この条件に合うアカウントを作ったら,このアカウントから実行できる ようにTomcatレイアウトの所有者を変更する必要があるかもしれません. [server1]$ chown -R tomcat tomcat Tomcatのメインのトップディレクトリには,下記のようないくつかの重要なディレクトリがありま す. tomcat bin conf logs webapps binディレクトリにはTomcatを実行するためのコマンドが入っています.confディレクトリにはサイ トのध定ファイルが入っています.logsディレクトリにはさまざまなログファイルが入っていま す.webappsディレクトリはwebMathematica をインストールするところです.tomcatユーザなら binディレクトリから直接Tomcatを実行することができます. webMathematica User Guide 29 binディレクトリにはTomcatを実行するためのコマンドが入っています.confディレクトリにはサイ トのध定ファイルが入っています.logsディレクトリにはさまざまなログファイルが入っていま す.webappsディレクトリはwebMathematica をインストールするところです.tomcatユーザなら binディレクトリから直接Tomcatを実行することができます. [server1]$ su tomcat [server1]$ cd tomcat/bin [server1]$ ./startup.sh これで,http://localhost:8080のようなURLを介してTomcatに接続できるはずです.これでTomcatのトッ プページがೊされなければ,何かध定に問題があるのかもしれません.ログファイルを見てくださ い.問題の所在が分かるかもしれません.UnixでのJavaのインストールに関するセクションで説明し たように,JAVA_HOME変数がध定されていることも確認してください. binディレクトリにもスクリプトのshutdown.shが入っています.これはTomcatの終了に使われま す. Unix上でのTomcatの自動ӭ動については後ろのセクションで説明します. Windows Tomcatを実行するためには,マシンにJDKがध定されていなければなりません.これについては前の セクションで説明してあります. T o m c a t の 現 行 バ ー ジ ョ ン の ダ ウ ン ロ ー ド 情 報 は http://documents.wolfram.com/webmathematica/updates/install/tomcat/current をご覧ください.Tomcatのイ ンストールには自己インストール型の実行ファイルをダウンロードすると便利です.インストーラを ӭ動し,インストラクションに従ってください.自己インストール型の実行ファイルを使わない場合 は,バイナリファイルを合のよい場所でЖ凍してください.この他のバージョンのTomcatは ApacheのWebサイトhttp://jakarta.apache.orgからどうぞ. インストーラはコンピュータ上の使用可能なJavaをチェックします.インストールされていない場合 はその旨が知らされます. tomcat bin conf logs webapps binディレクトリにはTomcatを実行するためのコマンドが入っています.confディレクトリにはサイ トのध定ファイルが入っています.logsディレクトリにはさまざまなログファイルが入っていま す.webappsディレクトリはwebMathematica をインストールするところです.tomcatユーザなら binディレクトリから直接Tomcatを実行することができます. インストーラがStart Menu Groupを加え,そこからTomcatが実行されます.これを http://localhost:8080のようなURLを使ってテストしてください.Tomcatが正しく実行できない場合はコ マンドプロンプトウィンドウを開き,ディレクトリをbinディレクトリ (Tomcatのメインのトップレ ベルディレクトリ)に変更(cd)し,startup.batバッチファイルを実行してみてください.Windows Explorerからこのファイルをダブルクリックすることもできます.「スタート」メニューを使って Tomcatをスタートしたりストップしたりすることができると大変便利です(これもTomcat 4.1の新機 能です).しかし,Windows のプロダクションサーバとしてTomcatを実行する場合は,Windowsの サービスとして実行した方がいいでしょう.方法はWindowsでのTomcatの自動ӭ動に関するセクショ ンをご覧ください. 30 webMathematica User Guide インストーラがStart Menu Groupを加え,そこからTomcatが実行されます.これを http://localhost:8080のようなURLを使ってテストしてください.Tomcatが正しく実行できない場合はコ マンドプロンプトウィンドウを開き,ディレクトリをbinディレクトリ (Tomcatのメインのトップレ ベルディレクトリ)に変更(cd)し,startup.batバッチファイルを実行してみてください.Windows Explorerからこのファイルをダブルクリックすることもできます.「スタート」メニューを使って Tomcatをスタートしたりストップしたりすることができると大変便利です(これもTomcat 4.1の新機 能です).しかし,Windows のプロダクションサーバとしてTomcatを実行する場合は,Windowsの サービスとして実行した方がいいでしょう.方法はWindowsでのTomcatの自動ӭ動に関するセクショ ンをご覧ください. Mac OS X Tomcatを実行する前にマシンにJDKを正しくध定したかどうか確認する必要があります.これについ ては前のセクションをご参照ください. Mac OS X 10.3にはTomcatが含まれています.これは /Library/Tomcatにあります.ですから,Tomcatを入手・インストールする必要はありません. tomcatのように特権レベルの低いアカウントを作ってサーブレットコンテナを実行するとよいでし ょう.これは「システム環境ध定」パネルで行うことができます.このようなアカウントを作った ら,このアカウントから実行できるようにTomcatレイアウトのオーナーを変更する必要があるかもし れません. [server1]$ sudo chown -R tomcat tomcat Tomcatのメインのトップディレクトリには,下記のようないくつかの重要なディレクトリがありま す. tomcat bin conf logs webapps binディレクトリにはTomcatを実行するためのコマンドが入っています.confディレクトリにはサイ トのध定ファイルが入っています.logsディレクトリにはさまざまなログファイルが入っていま す.webappsディレクトリはwebMathematica をインストールするところです.tomcatユーザなら binディレクトリから直接Tomcatを実行することができます. webMathematica User Guide 31 [server1]$ su Tomcat [server1]$ cd Tomcat/bin [server1]$ ./startup.sh これで,http://localhost:8080のようなURLでTomcatに接続できるはずです.これでTomcatのトップペー ジがೊされなければ,何かध定に問題があるのかもしれません.ログファイルを見てください.問題 の所在が分かるかもしれません.Mac OS XでのJavaのインストールに関するセクションで説明したよ うに,JAVA_HOME変数がध定されていることも確認してください. binディレクトリにもスクリプトshutdown.shが入っています.これはTomcatの終了に使われます. web Mathematica が十全に機能するためにはMac OS Xコンソールからログオンする必要がある点にも ご注意ください.これは,Mathematica のフロントエンドがMac OS Xのウィンドウ環境を必要とする ためです. バージョン10.3よりも古いMac OS XにはTomcatがインストールされていません.最新のTomcatに関す る情報はhttp://documents.wolfram.com/webmathematica/updates/install/tomcat/current で入手できます. い ろいろなアーカイブ形式があります.その中から適当なものを/Libraryのようなどこか中央の場所で Ж凍してください.ここでトップレベルのTomcatディレクトリの名前を変えることもできます.Tomcatの実際の場所とトップレベルのディレクトリ名はユーザの一存で決定できます./Libraryは Finderから見ることができるので便利です.この他のバージョンのTomcatはApacheのWebサイト http://jakarta.apache.orgから入手できます. 以下に示すように,デフォルトのOS X tarコマンドを使ってTomcatのアーカイブをЖ凍することはで きません.下記のオプションを使うためにはGNU tarユーティリティ(gnutar)を/usr/bin/に置く必要が あるかもしれません.*.tar.gzアーカイブがЖ凍できるStuffit Expanderのバージョン7.0.1以降を使うこ ともできます. 以下はこのステップのシェルインストラクションのサンプルです(tar xvfz archiveは,抽出された ファイルについての情報を与えます).この指示は「アプリケーション」- >「ユーティリティ」 ->「ターミナル」を使用していると仮定しています. [server1]$ cd /Library [server1]$ sudo /usr/bin/gnutarxfz jakarta-tomcat-4.1.30.tar.gz [server1]$ sudo mv jakarta-tomcat-4.1.30tomcat 32 webMathematica User Guide 2.2 Mathematica のインストールとध定 「Getting Started Mathematica」のお使いのプラットフォーム用の手順に従って,Webサーバにするコ ンピュータにMathematica CD-ROMからMathematica をインストールしてください.「シングルマシ ン」を選び,マニュアル通りに適切なライセンスをインストールしてください.インストールが終わ ったらMathematica をインタラクティブに動かしてインストールが問題なく終了したことを確認して ください.Mathematica が動かなければwebMathematica も動きません. すでにサーバにMathematica 5.0がインストールしてあれば,再度Mathematica をインストールする必要 はありません.次のステップから行ってください.インストール済みのMathematica 5.0の異なる場所 にwebMathematica のライセンス情報を入力します.これについては「web Mathematica Webアプリケー ション」のインストールのセクションに説明があります.webMathematica のライセンス情報を Mathematica とは異なった位置に置くことで,サーバ上でMathematica をインタラクティブに使っても webMathematica のサイト運営に影՝が出ないようにすることができます.これとは別のディレクトリ としてwebMathematica/WEB-INF/confがあります.これについては「Tomcatを使用する場合」の webMathematica のTomcatへのインストールの箇所で例示してあります.特別なファイルにライセンス をインストールした場合は,webMathematica 以外でMathematica を実行するためには-pwfileオプショ ンをध定しなければなりません.」 2.3 webMathematica Webアプリケーションのインストール このセクションではwebMathematica のコンポーネントをサーブレットコンテナにインストールする方 法について説明します.ほとんどのサーブレットコンテナの場合,これにはwebMathematica ツールの CD-ROMにアーカイブの形式で入っているwebMathematica Webアプリケーションを配置することが関 連してきます.サーブレットコンテナの種์によってはインストールの仕方が異なる場合もあります が,それらについては別途説明します.WebアプリケーションとはHTMLと特別なディレクトリ構造 に置かれているその他のWebの構成要素の集合体です.Webアプリケーションをサポートするサーブ レットコンテナなら,これらのファイルを標準的な方法で使うことができます.Webアプリケーショ ンはWARアーカイブと呼ばれる特別なタイプのアーカイブをサポートしています.サーブレットコン テナによってはこのアーカイブをサポートしているものもあります.webMathematica アーカイブの WARアーカイブはwebMathematica Tools CD-ROMにあります.アーカイブの内容については「付ຉ」 の「ファイルのレイアウト」をご覧ください. webMathematica User Guide 33 2.3.1 Tomcatを使用する場合 このセクションではTomcatでのwebMathematica Webアプリケーションの配置について説明します.こ れには2つの重要なステップがあります.ひとつはwebMathematica アーカイブのЖ凍で,もうひとつ はMSP.confファイルのध定です. まず,webMathematica.zipあるいはwebMathematica.tar.gzのように適切なwebMathematica の アーカイブをTools CD-ROMから1つ選びます.そしてTomcatのwebappsディレクトリにあるweb Mathematica のディレクトリにこのアーカイブをЖ凍します.TomcatのWebアプリケーションのディレクト リは通常Tomcatのトップディレクトリにあります.これでwebMathematica というWebアプリケーショ ンができました.webMathematica Webアプリケーションの内容は後に「付ຉ」で説明します.Tomcatのトップディレクトリにある内容(ಊ分)とwebappsディレクトリとwebMathematica Webアプリ ケーションの場所は次のようになります. tomcat conf bin logs lib webapps webMathematica 次に,WEB-INF/confディレクトリにあるMSP.confファイルをध定します.このファイルにはさま ざまなサイト特有のパラメータが収められているので,場合によってはご自分のサイト用に変更を加 える必要があるかもしれません.MSP.confに置くことのできるध定は「サイトのध定」のセクショ ンで説明します. 最も重要なध定はMathLinkArgumentsです.これはMathematica を立ち上げるコマンドです.webMathematica に付属のMSP.confにはWindows,Unix,Linux,Mac OS Xのデフォルトインストールに適 したध定が入っていますが,Mathematica をデフォルト以外の場所にインストールする場合にはこの ファイルに修正を加える必要があります.例えば,Mathematica をE:¥Mathematicaにインストール するのであれば,MSP.confのMathLinkArgumentsに次のध定をしてください(バックスラッシュ にご注意ください). MathLinkArguments=-linkname'E:¥¥Mathematica¥¥MathKernel.exe -mathlink' -linkmode launch webMathematica のライセンスをそれ自身のパスワードファイル,例えば webMathematica/WEBINF/conf/mathpassに保存したい場合もMSP.confに変更を加える必要があります.その際は MSP.confに修正を加えてMathematica がこの場所を使うようにしなければなりません.以下は,典型 的なWindowsのインストールにおける変更方法です. 34 webMathematica User Guide MathLinkArguments=-linkname'c:¥¥ProgramFiles¥¥Wolfram Research¥¥Mathematica¥¥5.0¥¥MathKernel.exe-mathlink -pwfile "c:/Program Files/tomcat/webapps/webMathematica/WEB-INF/conf/mathpass"' -linkmode launch 典型的なUnixのインストールで,特別のmathpassを使うためのMSP.confのध定は次のようになり ます. MathLinkArguments=-linkname'math -mathlink -pwfile /usr/local/tomcat/webapps/webMathematica/WEF-INF/conf/mathpass' -linkmode launch Unix上ではFrontEndLaunchCommandパラメータをઉ加してフロントエンドが正しく動作するよう にする必要があるかもしれません.以下の例ではフロントエンドはӭ動後固定ジオメトリでサーバ モードのDISPLAY 1を使います.Unixでのフロントエンドのӭ動についての詳細は「X Window Systemのध定」をご覧ください. FrontEndLaunchCommand=mathematica -mathlink -display :1 -nogui -geometry 1000x500+10+10 2.3.2 Tomcatを使用しない場合 JRun JRunはژ度なアプリケーションサーバです.これには,インストールのプロセスを示すWebベースの ウィザードが付いています.このセクションではJRun特有のwebMathematica Webアプリケーションの インストールの方法を説明しますので,インストールの際はこれに従ってください.webMathematica のカスタムタグを使用するためにはJRun 4.0以降が必要です.JRun 3.xでも「以前のwebMathematica技 術」にある方法でwebMathematica を使うことができます.これらのインストールの説明はJRun 4に対 応しています. まず,webMathematica のアーカイブをお使いのサーバで, E:¥webMathematicaのようにJRunがア クセスできる場所にЖ凍します.例えば,Tomcatのインストールに関するセクションにあるように MathLinkArgumentsやFrontEndLaunchCommandをध定したいなら,ここでMSP.confに変更を加 えます. 次にJRunのManagement Consoleを使います.Windowsでは「スタート」->「プログラム」->「 Macromedia JRun4」->「JRun Management Console」となります.また,http://localhost:8000を 使うこともできます.Management Consoleの使用にはJRunをインストールした際のユーザ名とパ スワードを入力しなければならないでしょう.アクセスできたら左側のフレームのデフォルトリンク をクリックして内容を拡大してください.このページのメインフレームにもデフォルトでJ2EE Componentsが表示されます. webMathematica User Guide 35 次にJRunのManagement Consoleを使います.Windowsでは「スタート」->「プログラム」->「 Macromedia JRun4」->「JRun Management Console」となります.また,http://localhost:8000を 使うこともできます.Management Consoleの使用にはJRunをインストールした際のユーザ名とパ スワードを入力しなければならないでしょう.アクセスできたら左側のフレームのデフォルトリンク をクリックして内容を拡大してください.このページのメインフレームにもデフォルトでJ2EE Componentsが表示されます. 「Web Applications」のઉ加ボタンをクリックしてweb Mathematica Webアプリケーションをઉ加しま す.Deploy Web Applicationというタイトルの新しいページとSource File Pathというフィールド が現れます.「Browse」をクリックしてください.ファイルをブラウズするウィンドウが現れま す.webMathematica アーカイブからファイルを抽出した場所(E :¥webMathematica等)まで進 み,webMathematica フォルダアイコンを選択して「Open」ボタンをクリックしてください.これで Source File PathがE:¥webMathematicaに変わります.次に「Deploy」をクリックします.間もな く使用しているJRunの種์別のインストールの詳細がカスタマイズできるスクリーンが現れます.デ フォルト値を選び「Apply」をクリックしてください.webMathematica のध定が成功したことを知ら せるメッセージが表示されます. 次に,「テスト」のセクションで説明してあるようにインストールをテストします.JRunのデフォル トポートは8100なので,http://localhost:8100/webMathematicaのようなURLでのフロントページにアク セスすることができます. その他のサーブレットエンジン サーブレットに不馴れな方はApache Tomcatを使われるのが無難です.これ以外のサーブレットエンジ ンは,以前使った経験がある方以外は使われない方がよいでしょう. 上記以外のサーブレットエンジンをお使いの場合は,Webアプリケーションのインストールに関する それぞれの指示に従ってください.サーブレットによっては特別なツールでサポートされているもの もあります.Webアプリケーションをインストールしたら, Tomcatのインストールの項にあるように MSP.confファイルに修正を加える必要があるでしょう.また, WebApplicationNameやJLinkNa tiveLibraryDirectoryのध定等で様々な変更をMSP.confに加える必要があるかもしれません.これ については「付ຉ」の「MSP.conf」をご覧ください. 36 webMathematica User Guide 2.4 X Window Systemのध定(Unixのみ) Webサーバ内からMathematica のフロントエンドをX上でӭ動する際の特殊な問題がいくつかありま す.これは,通常Webサーバはtomcatのような特別なアカウントとして実行されるからです.つま り,webMathematica がフロントエンドを実行するとき,フロントエンドはそのアカウントとして実行 されているのです.フロントエンドはXサーバに接続されていないと機能できません.そうするため には,Xサーバを実行している特別なアカウントが入っているWebサーバマシンのコンソールにログ インするとよいのですが,このアプローチには問題もあります.まず,マシンのコンソールへのログ インをオープンにしたままの状態にしなければなりません.また,フロントエンドが何かするたびに スクリーンにウィンドウが現れるので,マシンを使っている人のީഴになる可能性があります. Xの標準的な認証システムのもとでは,別のユーザがコンソールにログインしてXサーバをӭ動した ら,特別なwebMathematica のアカウントから実行されているフロントエンドはこのサーバに全く接続 できなくなります.このような接続が可能になるようにサーバをध定することはできますが,それで も十分ではありません.webMathematica がフロントエンドを使う度にスクリーンにウィンドウが表示 されてしまうからです.この件に関しては後ろのセクションでより詳しく説明します. これらの問題は次のセクションで説明するようにXvncのような仮想Xサーバを実行することでЖ決で きます.仮想サーバを実行するとMathematica のフロントエンドが作るウィンドウがMathematica を実 行しているコンピュータのスクリーンコンソールに表示されないようになります. 2.4.1 XvncとwebMathematica のध定 XvncとはUnix VNCサーバのことです.これはwebMathematica によって実行されているMathematica フ ロントエンドのようなアプリケーションが使う仮想Xサーバを提供します.また,VNCサーバも提供 し,VNCビューアを接続してサーバで実行されているアプリケーションを見たりコントロールしたり できるようにします.これはフロントエンドを実行していることでӭこる問題の所在を明らかにする のに役立ち便利です. Xvncはhttp://www.uk.research.att.com/archive/vnc/download.htmlで入手することができます.このページ には,Linux,Solaris,Alphaを含むさまざまなプラットフォーム用のダウンロードが揃っていま す.この他にも,RealVNC, http://www.realvnc.com/とTightVNC, http://www.tightvnc.comがそれぞれの URLからダウンロード可能です.これらはXvncと同じようなアーカイブ形式になっていて,インス トールの手順も似ています.最սのLinuxの中にはRPMパッケージ形式でXvncを含んでいるものもあ ります. webMathematica User Guide 37 Xvncのインストール Xvncのインストールは極めて単純です.アーカイブをЖ凍し,必要なファイルを/usr/local/binのよ うなローカルのbinディレクトリにコピーしてください.最新版のLinuxにはXvncがはじめからインス トールされているものもあります.以下に示すようにXvncバイナリをコピーしてください. [server1]$ cp vncviewer vncserver vncpasswd vncconnectXvnc /usr/local/bin Xvncのӭ動 Xvncのӭ動もインストールと同じように極めて単純です.ӭ動はwebMathematica を実行しているユー ザとして,例えばtomcatとして行ってください.最初にӭ動したときにパスワードが求められま す.下記の例ではサーバはdisplay :1としてӭ動されています. [server1]$ su tomcat [server1]$ vncserver You will require a password to access your desktops. Password: Verify: New'X' desktop is server1:1 Creating default startup script /home/tomcat/.vnc/xstartup Starting applicationsspecified in /home/tomcat/.vnc/xstartup Log file is /home/tomcat/.vnc/server1.wolfram.com:1.log Xvncのテスト ӭ動できたら,次にMathematica のフロントエンドのようにサーバを使うアプリケーションを実行し てサーバをテストしてみるとよいでしょう.以下をご覧ください. [server1]$ su tomcat [server1]$ mathematica-display :1 もちろんこうしても実際のウィンドウはスクリーンに現れません.というのは,これが仮想サーバだ からです.Mathematica フロントエンドからウィンドウが見たければ, vncviewerを実行してくださ い.方法は次の通りです. 38 webMathematica User Guide [server1]$ vncviewer :1 これでスクリーンにフロントエンドのウィンドウが表示されます.フロントエンドに入力して動いて いることを碓認することもできます.webMathematica が動いているときならいつでもvncviewerを使 ってデスクトップで見ることもできます. webMathematica のध定 最 終段階 として M SP . co n fフ ァイ ルを修 正し, フロ ントエ ンドが この サーバ を使う ようにしま す.FrontEndLaunchCommandのध定は付ຉの「サイトध定」の中で説明してあります.次は display :1のXサーバに接続するサンプルのध定です.このध定はMSP.conf中にコメントとして入って います. FrontEndLaunchCommand=mathematica -mathlink -display :1 -nogui -geometry 1000x500+10+10 これでUnixサーバでwebMathematica を実行する準備が整いました. フロントエンドが正しくӭ動できないようなら,ध定ファイルにサーバ名を加えるとよいかもしれま せん.次の例をご覧ください.myserverがwebMathematica とXvncが実行されているマシン名です. FrontEndLaunchCommand=mathematica -mathlink -display myserver:1 -nogui -geometry 1000x500+10+10 2.4.2 X関連のその他の問題 このセクションでは,XサーバでwebMathematica を使う際のその他の問題について説明します. 上記 のようにXvncサーバをध定した場合は,このセクションは飛ばしても構いません. Xサーバとの接続 Mathematica フロントエンドは,実行するときにXサーバと接続されていなければなりません.Xサー バがフロントエンドを実行しているユーザ以外のユーザによって実行されると,Xサーバはこの接続 を拒否します.以下をご覧ください. webMathematica User Guide 39 [root]# su tomcat bash$ mathematica Xlib:connectionto ":0.0" refused by server Xlib:Client is not authorized to connect to Server xset:unable to open display ":0.0" Xlib:connectionto ":0.0" refused by server Xlib:Client is not authorized to connect to Server xset:unable to open display ":0.0" Xlib:connectionto ":0.0" refused by server Xlib:Client is not authorized to connect to Server xset:unable to open display ":0.0" Xlib:connectionto ":0.0" refused by server Xlib:Client is not authorized to connect to Server XMathematica:can'topen display:0.0,exiting... bash$ ローカルマシンからのすべての接続をԴ可すると,この問題を避けることができます. [root]# xhost +localhost localhost being added to access control list [root]# su tomcat bash$ mathematica bash$ しかし,こうするとセキュリティの問題がӭこりかねないので,これは余りよい方法ではありませ ん.また,フロントエンドが実行される度にスクリーンにウィンドウが表示され,システムのユーザ に迷惑がかかるという問題もあります. このような問題を避けるためにはXvncのような仮想Xサーバを実行するのが賢明です. Xvfb Xvfbは仮想フレームバッファサーバです.これについての説明はhttp://www.xfree86.org/4.3.0/Xvfb.1.htmlをご覧ください.これはXvncの代りに使うことができます.しかし,Xvncの方が使いやす く機能も充実しています. Linuxの場合はhttp://www.redhat.comからRPMアーカイブがダウンロードできます.インストールした ら次のようにӭ動してください.この際,rootととして実行する必要があるかもしれません. 40 webMathematica User Guide su tomcat -c "/usr/X11R6/bin/Xvfb:1 -fp unix/:7100,/usr/local/Wolfram/Mathematica/4.2/SystemFiles/Fonts/Type1, /usr/local/Wolfram/Mathematica/4.2/SystemFiles/Fonts/BDF -screen 0 800x600x24" & このコマンドで,Xvfbがポート7100のフォントサーバを参照してӭ動され,Mathematica フォントを 含むディレクトリが加えられます.これとは異なる場所にMathematica がインストールしてある場合 はこのディレクトリを変更する必要があります.インストールによってはMathematica フォントの場 所がフォントサーバのध定に加えられていることがあります.その場合はXvfbをӭ動するときに Mathematica フォントを参照する必要はありません.Xvfbは次のように起動することができます. su tomcat -c "/usr/X11R6/bin/Xvfb:1 -fp unix/:7100"& この例では,Xvfbがフォントサーバとしてローカルマシンのポート7100を使うと想定されていま す.フォントサーバの設定がこれとは異なる場合は,実際の設定に必要な変更を加えてください.例 えばRedhat 6ではフォントサーバがローカルのunixのソケットを使うので,Xvfbは次のように起動し ます. su tomcat -c "/usr/X11R6/bin/Xvfb:1 -fp unix/:-1,/usr/local/Wolfram/Mathematica/4.2/SystemFiles/Fonts/Type1, /usr/local/Wolfram/Mathematica/4.2/SystemFiles/Fonts/BDF -screen 0 800x600x24" & フォントサーバを実行しない場合は,フォントサーバの参照なしにXvfbをӭ動する必要があるでしょ う.その場合は,次の「マニュアルでのフォントインストール」のセクションで説明するよう に,Mathematica のフォントをXのレイアウトにコピーする必要があります. su tomcat -c "/usr/X11R6/bin/Xvfb:1 -screen 0 800x600x24"& 仮想フレームバッファサーバをӭ動したら,実行されているかどうかをテストします.これはrootと として行う必要があるでしょう. [root]# su tomcat bash$ mathematica-display :1 もちろん,フロントエンドがこのサーバで正確に実行されていることを碓認したくても,これをスク リーン上で見ることはできません.このためエラーを示すダイアログボックスも見ることができませ ん.フロントエンドが何を表示しているかを見る方法として,xwdとxwudを使ってダンプをੴべる ことが考えられます.方法は次の通りです. webMathematica User Guide 41 もちろん,フロントエンドがこのサーバで正確に実行されていることを碓認したくても,これをスク リーン上で見ることはできません.このためエラーを示すダイアログボックスも見ることができませ ん.フロントエンドが何を表示しているかを見る方法として,xwdとxwudを使ってダンプをੴべる ことが考えられます.方法は次の通りです. xwd -display :1 -root | xwud これで,フロントエンドが表示しているものが分かります.例えば,パスワードが見付からないとい うメッセージを見たら,pwfileコマンドラインオプションをઉ加すればよいのです. 仮想フレームバッファXサーバが動いているときは,MSP.confファイルに修正を加えフロントエン ドがこのサーバを使うようにしなければなりません.FrontEndLaunchCommandのध定は「付ຉ」 の「サイトध定」をご覧ください.以下はध定のサンプルです. FrontEndLaunchCommand=mathematica -mathlink -display :1 -nogui -geometry 1000x500+10+10 Sun/Solarisのように,システムによってはユーザのtomcatでӭ動した場合に問題のあるXサーバもあ ります.これは/tmp/.X11ディレクトリのԴ可がセキュリティ上の理由で限定されているためで す.リスニングソケットが確立できないというメッセージにより,この問題が生じていることが分か ります.ひとつのЖ決策としてディレクトリに修正を加えtomcatが書き込めるようにすることが考 えられます.この問題に関してはhttp://www.faqs.org/faqs/Solaris2/FAQ/もご参照ください. マニュアルでのフォントインストール Mathematica フォントにアクセスできなければフロントエンドは動きません.vncviewerあるいは xwdを使ったXサーバの出力でフロントエンドがフォントを見付けられないというダイアログボック スを表示していることが分かったら,フォントを見付けるための更なる手段を講じなければなりませ ん.そのための簡単かつ劇的なЖ決策のひとつとして,Mathematica フォントをXにコピーすることが 考えられます. cd /usr/X11R6/lib/X11/fonts cp -r 75dpi 75dpi.orig cd 75dpi cp /usr/local/Wolfram/Mathematica/5.0/SystemFiles/Fonts/X/*.bdf . mkfontdir しかし,これはあまりよいЖ決方法とはいえません.できれば避けた方がよいでしょう.というの も,Mathematica をアップデートしたときにフォントも忘れずにコピーしなければならないからで す.適切なЖ決方法は前述したようにフォントサーバかあるいはフォントパスのध定を使うようにし てXvfbをӭ動することです.なお,この問題はWindowでӭ動している場合にはӭりません. 42 webMathematica User Guide しかし,これはあまりよいЖ決方法とはいえません.できれば避けた方がよいでしょう.というの も,Mathematica をアップデートしたときにフォントも忘れずにコピーしなければならないからで す.適切なЖ決方法は前述したようにフォントサーバかあるいはフォントパスのध定を使うようにし てXvfbをӭ動することです.なお,この問題はWindowでӭ動している場合にはӭりません. 2.5 webMathematica 2.0からのアップグレード このセクションではwebMathematica 2.0からアップグレードされる方が関心を持たれるであろう点を Ж説します.お使いのサーブレットコンテナが旧式の場合は,最新のものにアップグレードされるこ とをお勧めします.サーブレットコンテナをアップグレードする際は,全く初めてwebMathematica 2.1をインストールするつもりで,この章の冒頭ಊ分の説明に従ってください. 2.5.1 Mathematica 5.0のインストール webMathematica 2.1にはMathematica 5.0が付いています.これを「Mathematicaのインストールとध 定」の説明に従ってインストールしてください. Mathematica 4.2にアプリケーションをインストールしてある場合は Mathematica 5.0でもこれが使える ようにしなければならないでしょう.これについては「パッケージをインストールする」で説明しま す.MSPアプリケーションはMathematica 4.2からMathematica 5.0にコピーすべきではありませんので ご注意ください. 2.5.2 webMathematica Webアプリケーションのインストール webMathematica Webアプリケーションのインストールは,使用中のweb Mathematica Webアプリケーシ ョンをサーブレットコンテナから削除してから行ってください.Tomcatの場合は,webappsディレ クトリからwebMathematicaディレクトリを削除するだけでよく,簡単です.この中に必要なものが あるかもしれませんので,どこかアクセス可能な場所に保存しておかれることをお勧めします.削除 が終わったら「webMathematica Webアプリケーションのインストール」の説明に従ってインストール します. 2.5.3 新しいレイアウトのध定 webMathematica の旧バージョンのध定に何か特別の変更を加えていた場合は,web Mathematica 2.0に も同様の変更を加えたいでしょう.関連するファイルはweb.xmlとMSP.confの2つです.これに加 え,セキュリティシステムのध定も変わっています. webMathematica User Guide 43 web.xml web.xmlファイルのध定の変更は,ध定の߁旨を十分理Жしている場合に限って行ってください.ま た,旧バージョンからファイルすべてをコピーするよりも,変更を加えたध定パラメータのಊ分だけ をコピーする方がいいでしょう.webMathematica 2.0の場合もwebMathematica 2.1の場合 も,web.xmlはMathematica/WEB-INFディレクトリにあります. MSP.conf MSP.confは,webMathematica のwebMathematica/WEB-INF/confディレクトリにありま す.MSP.confにはMathematica の場所が保存されているので,ファイル全体を取り出すよりも特定の ध定パラメータだけをコピーして,すでにインストールしてあるMathematica 5.0が確実に参照される ようにした方がよいでしょう. セキュリティシステムのध定も変わっています.これについては次のセクションで説明します. セキュリティのध定 webMathematica 2.0ではセキュリティのध定ファイルを見付けるメカニズムが変更されています.セ キュリティध定ファイルはプールध定ファイルで名付けられ,webMathematica/WEB-INF/confの 中央ध定ディレクトリに置かれるようになりました.以前はMathematica パスのどこにでもध定ファ イルをロードすることができました. この変更は,中央の単一の場所からセキュリティध定をロードした方が安全性がژまるために行われ ました.webMathematica のデフォルトのセキュリティध定は大変保守的なので,セキュリティファイ ルを移動しないサイトならどれでも期待以上のژ度セキュリティレベルで実行できるようになりま す.セキュリティについては後のセクションで説明します. 2.5.4 新しいレイアウトに内容を移動する 次に内容を古いレイアウトから移動します.webMathematica 2.1にはアップデートされた例題が含ま れていますので,その際例題はコピーしないようしてください.ご自分のデータだけを旧レイアウト から新レイアウトにコピーしてください. 44 webMathematica User Guide 2.5.5 インストールの終了 webMathematica 2.1のインストールが終了したら,これをテストします.URL http://localhost:8080/webMathematica/Examples/Specification.jspを使われるとよいでしょう.これはインストールしてあるバー ジョン番号を出力するものです.webMathematica 2.1とMathematica 5.0であることを碓認してくださ い. 2.6 その他のध定(オプショナル) ઉ加的なインストール(オプショナル)を行うことで,さらに多くの機能が使えるようになりま す.webMathematica サーバの使用に必要なものではありませんが,このセクションではこれらについ て説明します. 2.6.1 MSP Mathematica アプリケーション MSP Mathematica アプリケーションには,ドキュメントのような Mathematica のさまざまなパッケージ やユーティリティが含まれています.これはすでにwebMathematica のレイアウトにインストールされ ているので,これ以上の操作をしなくてもwebMathematica を動かすことができます.しかし,特定の 関数を使ったりMathematica のヘルプブラウザでwebMathematica のドキュメントを見たりしたい場合 は,そのアプリケーションをインストールする必要があります.これはwebMathematica を実行するた めに必要なもではないので,このインストールはオプショナルです.アーカイブの内容については 「付ຉ」の「ファイルのレイアウト」をご覧ください. MSP Mathematica アプリケーションはwebMathematica ツールCD-ROMにアーカイブの形で入っていま す.適切なアーカイブをЖ凍し,その内容をMathematica ディレクトリのAddOns/Applicationsディ レクトリに置いてください.これが終了したらMathematica をӭ動して「ヘルプ(Help)」メニューの 「ヘルプ用索引の再構成(Rebuild Help Index)」を選んでください.こうすると,webMathematica の ドキュメントがヘルプブラウザの「アドオン(Add-ons)」セクションで見られるようになります. MSP Mathematica アプリケーションには,Mathematica の式をHTMLの表や選択タグにする便利な関数 が含まれています.また,SVGを使う上での便利なユーティリティも含まれています. webMathematica User Guide 45 2.6.2 webMathematica の自動ӭ動 サーバマシンがスタートされる度にwebMathematica のようなWebアプリケーションが自動的にӭ動さ れるのは一般的なことです.このセクションではこの自動ӭ動の方法について見てみます.もちろん これは一般にシステム管理者が行うことなので,このセクションの内容はご自分のシステムのコンベ ンションに合わせてお使いください.方法はUnixとWindowsで異なります.ここではTomcatのӭ動に 焦点を当てます.これ以外のサーブレットコンテナを使用する場合は,そのサーブレットコンテナの ドキュメントをご参照ください. Unix Tomcatはシステムのスタートアップスクリプトに加えると自動ӭ動できます.ここでの説明はLinux RedHatシステムを例に取っています.まず「Tomcatのध定」でUnixでのध定についての箇所をご覧く ださい. 一般的なӭ動方法は初期化ディレクトリinit.dにスクリプトを加え,rc3.dのような適切なӭ動ディレ クトリにリンクすることです.スクリプトは作成されたtomcatユーザを利用してtomcatのスタート とストップについての定義を行います.次はスクリプトの例です. 46 webMathematica User Guide #!/bin/sh # # tomcat This shell script takes care of starting and stopping # tomcat. # description:tomcat is a servlet/JSP engine, which can be used # standalone or in conjunction with Apache # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network RETVAL=0 export JAVA_HOME=/usr/local/java export CATALINA_HOME=/usr/local/tomcat export PATH=$PATH:/usr/local/bin:$JAVA_HOME/bin # See how we were called. case "$1" in start) # Start daemons. echo -n "Starting tomcat: " cd ~tomcat su tomcat -c '$CATALINA_HOME/bin/catalina.sh start' RETVAL=$? [ $RETVAL -eq 0 ] && touch /var/lock/subsys/tomcat echo ;; stop) # Stop daemons. echo -n "Shutting down tomcat: " cd ~tomcat su tomcat -c '$CATALINA_HOME/bin/catalina.sh stop' RETVAL=$? [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/tomcat echo ;; restart) $0 stop $0 start RETVAL=$? ;; *) echo "Usage: tomcat {start|stop|restart}" exit 1 esac exit $RETVAL cd ~tomcat su tomcat -c '$CATALINA_HOME/bin/catalina.sh stop' RETVAL=$? [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/tomcat echo ;; restart) $0 stop $0 start webMathematica User Guide RETVAL=$? ;; *) echo "Usage: tomcat {start|stop|restart}" exit 1 esac 47 exit $RETVAL これに加え,Xvncのような仮想Xサーバを使用している場合は,これもシステムの初期化時にӭ動す る必要があります.次はXvncをӭ動するサンプルスクリプトです. 48 webMathematica User Guide !/bin/sh # # description:VNC instance for webMathematica # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network RETVAL=0 # See how we were called. case "$1" in start) # Start daemons. echo -n "Starting VNC: " cd ~tomcat su tomcat -c '/usr/bin/vncserver-geometry 800x600 -depth 24 :1 >/dev/null 2>/dev/null' RETVAL=$? [ $RETVAL -eq 0 ] && touch /var/lock/subsys/vnc echo ;; stop) # Stop daemons. echo -n "Shutting down VNC: " cd ~tomcat su tomcat -c '/usr/bin/vncserver-kill :1 >/dev/null 2>/dev/null' RETVAL=$? [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/vnc echo ;; restart) $0 stop $0 start RETVAL=$? ;; *) echo "Usage: vnc {start|stop|restart}" exit 1 esac exit $RETVAL webMathematica User Guide 49 Windows Windowsでプログラムを自動ӭ動したい場合は,そのプログラムをサービスとしてインストールしま す.これはWindows NT/2000/XPでのみ有効です. サービスとしてTomcat をインストールする方法はTomcat 4.1の場合は大変簡単です.Tomcat 4.1では インストーラがサービスとしてインストールするというオプションを示してくれるからです.Tomcatをインストールするときにこのオプションを選ばなかった場合でも,後からインストーラに戻るこ とができます. 「コントロールパネル」の「管理ツール」でインストールしたサービスに関する情報が得られま す.ここにある「サービス」アイコンを開いてください.ダイアログが開いてマシンにインストール したサービスを見ることができます.ここでTomcatを見てください.サービスがスタートされている かどうか,またどのように起動されたかをダイアログが教えてくれます.通常インストーラは Tomcatを,コンピュータが起動されると同時に起動される「自動」タイプにしています.「Tomcat」 という項をクリックして「プロパティ」を選ぶとサービスの設定ができるダイアログが現れます. JDKが1.4の場合,Tomcatはサービスとして問題なく動きます.Windowsのパスでjava.exを探すと JDKが見付かります.インストールしてあるJDKが必ず見付かるようにしてください. 2.6.3 Webサーバの接続 ध定方法によっては中央のアクセス可能なサーバがApache HTTPサーバ,Microsoft Internet Information サーバ,あるいはNetscape Enterpriseサーバのように標準のWebサーバのこともあります.このような サーバをサーブレットコンテナと繋げて使うことも可能です.この種のध定は複ܚになりますが認証 やURLの書き換え等付加的な機能が使える利点があり,既存の多くのWebインフラストラクチャに適 しています.このセクションでは,いくつかの典型的な例を簡単に説明します.ここに書かれている ことを実行する前に,お使いになるサーブレットコンテナをスタンドアロンモードにध定するとよい でしょう. webMathematica を独立したWebのサーバと一緒に使いたい場合は,web Mathematica の全リクエストが webMathematica Webアプリケーションに確実に転送されるようにしなければなりません.これによっ てアプレットアーカイブ,HTMLページ,画像へのリクエストが適切に処理されるからです.サーバ がサーブレットにしかアクセスできないようにध定されていると他のリソースを使うことはできませ ん. Tomcatのようなサーブレットコンテナを通してwebMathematica を直接実行してみたいだけなら,この セクションは飛ばしても構いません. 50 webMathematica User Guide ApacheとTomcat ApacheのWebサーバとTomcatを接続する方法はたくさんあります.中でも便利な方法は,HTTP転送 メカニズムを使ってApacheのWebサーバからTomcatにリクエストを送る方法です.これは,Proxy Passध定指示子を使って行うことができます.以下はApacheのध定ファイル(一般にhttpd.confと 呼ばれるもの)に加えることができるध定例です. <IfModule mod_proxy.c> <Location /webMathematica/KernelMonitor> Order allow,deny deny from all </Location> ProxyPass /webMathematicahttp://tomcatserver:8080/webMathematica ProxyPassReverse/webMathematica http://tomcatserver:8080/webMathematica </IfModule> ProxyPass指示子はパスから外ಊURLへのマッピングを提供し,ProxyPassReverse指示子はプロキ シが透過的なるように応答を修正させます./webMathematicaへの接続はすべてマシンtomcat serverのポート8080へ送られるようになります.このध定ではプロキシからのKernelMonitorへの接 続も拒否されます.カーネルモニタの機能に関しては後ろのセクションをご覧ください. ProxyPass指示子が有効になるためにはモジュールmod_proxyとmod_proxy_httpがロードされて いる必要があります.このロードは,Apacheのध定ファイルにある以下のध定情報を使って行うこと ができます. LoadModule proxy_modulemodules/mod_proxy.so LoadModule proxy_http_modulemodules/mod_proxy_http.so ApacheとTomcatの使用について,さらに詳しく知りたい場合は,それぞれのWebサイト(Apache: http://httpd.apache.org, Tomcat: http://jakarta.apache.org)をご覧ください.ApacheはWindows,Unix,Mac OS Xのどれででも使うことができます. http://www.galatea.com/flashguides/apache-tomcat-4-win32.xmlも 便利なサイトです. webMathematica User Guide 51 MicrosoftサーバとTomcat Microsoft PWSあるいはIISをWebサーバとして配置したい場合,Tomcatをサーブレットコンテナとし て使うことができます. TomcatにはIISおよびPWSのサーブレットコンテナとして使うためのध定説明が付いています.ध定は 手動で行わなければなりません.簡単ですがたくさんのステップをひとつひとつ慎重に行わなければ なりません.中にはWindowsのレジストリを手動で編集するような作業も含まれます.このような手 動操作が含まれるので,これらのサーバではJRunを使った方が簡単でしょう. T o m c a t の ध 定 デ ィ レ ク ト リ に あ るw o r k e r s . p r o p e r t i e sフ ァ イ ル を 忘 れ ず に 編 集 し て,workers.tomcat_homeとworkers.java_homeに値をध定してください.入れる値はファイルの 説明から明らかです. Apache/MicrosoftサーバとJRun JRunにはJRun Management Consoleを介してアクセスできる接続ウィザードが付いています.これは webMathematica にリクエストを転送するためにも使えます. 2.7 テスト これでいよいよ,サーバを再ӭ動してwebMathematica に接続することができます.お使いのサーブレ ットコンテナに接続するためには,このドキュメント中のURLとは異なるURLにする等の必要がある かもしれませんのでご注意ください.例えば,このドキュメントではApache Tomcatに直接アクセスで きるようにデフォルトのボート番号として8080を使用していますが,これを変更しなければならない かもしれません.サーブレットコンテナをテストするためのURLはwebMathematica で使えるように正 しいURLを表示するようにします.大文字・小文字の使い分けも重要です. まず,http://localhost:8080/webMathematicaでweb Mathematica のフロンとページに接続してみるとよい でしょう.下の画像のようなページが開きます.このページには例題,ドキュメント,テンプレー ト,画像,外ಊ参照へのリンクが載っています. 52 webMathematica User Guide 次に,Expandのような実際の例題をݠしてみるとよいでしょう.この例題にはフロントページのリ ンクから,あるいはhttp://localhost:8080/webMathematica/BrowseExamples/Expand.htmlのようなURLで接 続することができます.入力フィールドにパラメータを入力して「Evaluate」を押してください.下 のような画面が現れます. http://localhost:8080/webMathematica/Examples/Plot.jsp等でグラフィックスを検証してみるのもよいでし ょう. Unixで実行している場合はグラフィックスを生成したりのフロントエンドのその他の機能を使 ったりするために,Xサーバを(「X Window Systemのध定」に記したように)特別にध定する必要が あります.このध定もテストしてみるとよいでしょう. うまく接続できない場合は「トラブルシューティング」のセクションをご覧ください. webMathematica User Guide 53 3. 基本的な例題 この章ではwebMathematica の初歩的な例題をいくつか見てみます.例題の多くはユーザの方々がコ ピーしてご自分の作業の基礎にできるものです. これらの例題はMathematica で使うタグの特別なライブラリを使っているJavaServer Pages (JSP)の形式 になっています.JSPはJavaのHTMLへの埋込みをサポートし,大Ӫ模な動的Webサイトの開発のため にしばしばJavaサーブレットと共に使われます.タグのライブラリはMSP Taglibと呼ばれ,対応する どのサーブレットエンジンでも使うことができます.タグライブラリを使用する利点のひとつは,こ れがJavaプログラミングلؘの使用を完全にͩ蔽する点です.MSP Taglibの場合がこれに当たりま す. この章では基本的なwebMathematica スクリプトについて考察します.HTMLに関するある程度の知ށ (form,input要素等)が必要です.このドキュメントの最後にはHTMLのリファレンスが載せてあ ります.form要素に関する知ށがないと,インタラクションを含む例題を書くのは難しいでしょう. では,JSPのサンプルをいくつか見てみましょう.それぞれにJSPの詳細や特徴が現れています.この 全サンプルのソースがwebMathematica WebアプリケーションのExamples(Tomcatでの完全パスは webapps/webMathematica/Examples)ディレクトリに収められています.説明に従ってサーバの インストールを行ったなら,このサンプルをサーバでライブで見ることができます.これらの例題は MSPのテクノロジーを用いてどのようにプログラムを組むかを簡単に示すためにデザインされていて いるので,あまり見栄えがよいものではありませんが,あらかじめご了承ください. これらの例題にはwebMathematica のホームページからアクセスできます.このページには http://localhost:8080/webMathematicaで接続できます(ご自分のサーバへのアクセスにはこれとは異な るURLが必要かもしれません).このホームページには,ページのデザイン性をژめて見栄えをよく できるテンプレートでラップされた例題が載っています.webMathematica のプログラミングの詳細を 検討する上で,このように余分なデザインを加えるのは余り好ましくないでしょう.この例題はテン プレートなしでも作ることができます. この章を終了すると,サイトの開発に役立つアイディアをご紹介する次章「ページの作成」がより興 味深くなるでしょう. 3.1 Hello.jsp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/Hello.jspでこのJSPに接続することができます(ご自分のサーバに接続するURLはこれとは多少異なる 場合もあります). 54 webMathematica User Guide この例ではMathematica のDate[]関数を評価します.結果はこのページにアクセスする度に変化 し,これが実際に動的なプロセスであることを示します.このページのソースはwebMathematica/ Examples/Hello.jspにあります. <%@ page language="java" %> <%@ taglib uri="/webMathematica-taglib"prefix="msp"%> 標準的なJSPのヘッダ <html> なHTMLタグ <head> <title>Hello World (The MSP Taglib)</title> </head> <body> <h1>Hello World (The MSP Taglib)</h1> <msp:allocateKernel> 割当て <h4>Date[]</h4> <msp:evaluate> Date::usage Mathematica による評価 </msp:evaluate> <p>Its current value is:</p> <msp:evaluate> Date[] Mathematica による評価 </msp:evaluate> </msp:allocateKernel> 解放 </body> </html> 標準的 Mathematica カーネルの Mathematica カーネルの このページには標準的なHTMLタグと,<msp:tag>という形式を持った特別のwebMathematica タグが 使われています.webMathematica タグはページの最上ಊから順に実行されます. <msp:allocate> タ グがあるとב算に使うためのMathematica カーネルが割り当てられます.<msp:evaluate>タグの内容 はMathematica に送られてב算され,結果が最終ページに挿入されます. </msp:allocate>タグは次の ב算に備えるためにMathematica カーネルをЖ放します. webMathematica User Guide 55 3.2 変数を使う:Variables.jsp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/Variables.jspでこのMSPに接続することができます(ご自分のサーバに接続するURLはこれとは多少異 なる場合もあります).この例では変数と入力値がどのように連結されるかが示されます.このペー ジのソースはwebMathematica/Examples/Variables.jspにあります. <%@ page language="java" %> <%@ taglib uri="/webMathematica-taglib"prefix="msp"%> <html> <head> <title>AssigningVariables</title> </head> <body bgcolor="#ffffff"> <h1>AssigningVariables</h1> <form action="Variables.jsp"method="post"> HTML form <msp:allocateKernel> Enter something: <br> <input type="text" name="tmp"size="10" /> ユーザ入力フィールド <br> <br> <msp:allocateKernel> <msp:evaluate>$$tmp</msp:evaluate> Mathematica に よる評価 </msp:allocateKernel> <br> <input type="submit"name="submitButton" value="Evaluate"/> formを作動さ せるボタン </msp:allocateKernel> </form> </body> </html> このページにはformとinput要素が入っていて,先程のものよりも複ܚになっていますが,これらの 要素はクライアントとのインタラクションを行う重要な方法です. form要素はinput要素を持つHTMLのブロックです.submitタイプのinputを送ることでformが活性 化されます.submitは各inputタグに関連した名前と値をサーバに送信します.ここでは,form要素 の最初のタグに2つの属性があります.action属性はformが活性化されたときに接続するURLを参照 します.ここではオリジナルのVariablesスクリプトを示す相対URLが参照されています.method属 性はブラウザにどのHTTPメソッドを使うかを指示します.ここではpostメソッド(これが一般的で す)になっています. 56 webMathematica User Guide form要素はinput要素を持つHTMLのブロックです.submitタイプのinputを送ることでformが活性 化されます.submitは各inputタグに関連した名前と値をサーバに送信します.ここでは,form要素 の最初のタグに2つの属性があります.action属性はformが活性化されたときに接続するURLを参照 します.ここではオリジナルのVariablesスクリプトを示す相対URLが参照されています.method属 性はブラウザにどのHTTPメソッドを使うかを指示します.ここではpostメソッド(これが一般的で す)になっています. この例には2つのinputタグがあります.最初のタグはページのユーザがテキストを入力することをԴ 可し,2つ目のタグは,押されるとformを送るボタンを指定します.formは,送信されるとinput要 素からの情報をaction属性で指定されたURLに送ります.この場合は同一のJSPです.inputタグに入 れられたテキストはtmpという名前を使って入力変数$$tmpに割り当てられます. このページに最初にアクセスしたときは,$$tmpの値はありません.テキストフィールドに値が記入 され,「Evaluate」ボタンが押されると,表示された値が$$tmpに与えられます.値はMathematicaの文字列で,「5+7」のようなב算を入力しようとしても実際のב算は行われない点に注意してく ださい.Mathematica で入力をЖ釈し評価したい場合は,後程説明するMSP関数のどれかを使わなけ ればなりません. $$という接頭辞は,入力変数にラベルを付けるために使われます.入力変数とはHTTPのリクエスト によって送られる変数のことです.変数の使い方については「よりژ度なトピック」の「変数」で詳 しく説明します. 3.3 MSP関数:Expand.jsp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/Expand.jspでこのJSPに接続することができます(ご自分のサーバに接続するURLはこれとは多少異な る場合もあります). submitボタンを押すと,多項式がベキ乗され,展開されます.そして,結果が書かれたHTMLページ がೊされます.このページのソースはwebMathematica/Examples/Expand.jspにあります.以下は formタグを示したಊ分です. webMathematica User Guide 57 <%@ page language="java" %> <%@ taglib uri="/webMathematica-taglib"prefix="msp"%> <html> <head> <title>ExpandingPolynomials</title> </head> <body> <h1>ExpandingPolynomials</h1> <form action="Expand.jsp"method="post"> Enter a polynomial (e.g. x+y): <input type="text" name="expr"size="10"> Enter a positive integer (e.g. 4): <input type="text" name="num"size="3"> <br> <msp:allocateKernel> <msp:evaluate> MSPBlock[{$$expr,$$num}, Expand[$$expr^$$num]] 入力変数で計算を確保する </msp:evaluate> </msp:allocateKernel> <input type="submit"name="submitButton"value="Evaluate"> </form> </body> </html> これにも前の例で説明したformとinputのタグが付いています.また,msp:evaluateタグはMSP関数 のMSPBlockを参照しています. formが送られるとサーバはMathematica カーネルに接続します.セッションでは2つのシンボル $$exprと$$numが2つのinput要素からのテキストに割り当てられます.テキストがなければシンボ ルは定義されません. 次にMathematica がmsp:evaluateタグの内容を評価します.MSPBlockコマンドはプログラミングコ ンストラクトで,ここでは$$exprと$$numの2つの入力変数を検査します.もしどちらかに値がな ければMSPBlockはヌル文字列をೊします.ですから,はじめてこのページにアクセスしたときには 結果が見えないのです.次にMathematica が両変数の値をЖ釈します.成功するとЖ釈の結果が第2引 数あるいはMSPBlockのボディに代入されます.この例では$$exprの値がすべて$$exprの値をЖ析 したもので置き換えられています.$$numも同様に処理されます.次に,その結果が評価され,フ ォーマットされてHTMLページに置かれます.そしてそのHTMLページがクライアントにೊされるの です. Mathematica による変数のЖ釈がうまくいかない場合が2つ考えられます.ひとつは入力が f[}のように Mathematica の有効な入力ではない場合,もうひとつは ReadList["/etc/passwd"]のように危؉な入力 である場合です.どちらの場合も入力は拒否され,エラーメッセージが出されます.これは,システ ムのセキュリティ機能を示しています.これについては「セキュリティ」のセクションで説明しま す.変数の使い方については「よりژ度なトピック」の「変数」で詳しく説明します. 58 webMathematica User Guide Mathematica による変数のЖ釈がうまくいかない場合が2つ考えられます.ひとつは入力が f[}のように Mathematica の有効な入力ではない場合,もうひとつは ReadList["/etc/passwd"]のように危؉な入力 である場合です.どちらの場合も入力は拒否され,エラーメッセージが出されます.これは,システ ムのセキュリティ機能を示しています.これについては「セキュリティ」のセクションで説明しま す.変数の使い方については「よりژ度なトピック」の「変数」で詳しく説明します. msp:evaluateタグの結果のフォーマットについては「よりژ度なトピック」の「評価のフォーマッ ト」で詳しく説明します. 3.4 グラフィックス:Plot.jsp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/Plot.jspでこのJSPに接続することができます(ご自分のサーバに接続するURLはこれとは多少異なる 場合もあります). この例題はプロットを生成します.このページのソースはwebMathematica/Examples/Plot.jspに あります.以下はformタグを示しているಊ分です. <form action="Plot.jsp"method="post"> <msp:allocateKernel> Enter a function: <input type="text" name="fun" size="24" value = "<msp:evaluate>MSPValue[$$fun, "Sin[x]^2"] </msp:evaluate>" ひとつの呼出しから次の呼出しまで入力 設定が保存される /> Enter a number: <input type="text" name="x1" size="24" value = "<msp:evaluate>MSPValue[$$x1, "10"] </msp:evaluate>" /> <br> <msp:evaluate> MSPBlock[ {$$fun, $$x1}, MSPShow[ Plot[$$fun, {x,0,$$x1}]]] </msp:evaluate> <hr> </msp:allocateKernel> <input type="submit"name="btnSubmit"value="Evaluate"> </form> この例はMSPの関数MSPBlockとMSPShowの使い方を示しています.MSPBlockは前のセクションで 導入したプログラミングコンストラクトです.MSPShowはMathematica のグラフィックスオブジェク トをPlotコマンドから受け取ってGIF画像を生成します.この画像はサーバに保存され,<img>タグが ೊされます.数式やグラフィックスのフォーマッティングについては「数式やグラフィックスの表 示」で詳しく説明します.ページが使われる度に,ユーザ入力を保存するためにMSPValueがどのよ うに使われているかご注目ください. webMathematica User Guide 59 この例はMSPの関数MSPBlockとMSPShowの使い方を示しています.MSPBlockは前のセクションで 導入したプログラミングコンストラクトです.MSPShowはMathematica のグラフィックスオブジェク トをPlotコマンドから受け取ってGIF画像を生成します.この画像はサーバに保存され,<img>タグが ೊされます.数式やグラフィックスのフォーマッティングについては「数式やグラフィックスの表 示」で詳しく説明します.ページが使われる度に,ユーザ入力を保存するためにMSPValueがどのよ うに使われているかご注目ください. 3.5 タイプセットの画像:Integrate.jsp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/Plot.jspでこのJSPに接続することができます(ご自分のサーバに接続するURLはこれとは多少異なる 場合もあります). この例題では関数を入力し,これを積分することができます.結果はタイプセットシステムでフォー マットされ,画像として保存されます.このページのソースはwebMathematica/Examples/ Integrate.jspにあります.以下はformタグを含むಊ分です. 60 webMathematica User Guide <%@ page language="java" %> <%@ taglib uri="/webMathematica-taglib"prefix="msp"%> <html> <head> <title>Integration</title> </head> <body> <h1>Integratea function</h1> <form action="Integrate.jsp"method="post">Input: <br> <msp:allocateKernel> <msp:evaluate> integrand = Null; 被積分関数を保存するページ変 数 If[ MSPValueQ[$$expr], integrand = 安全な変換で入力を解釈 MSPToExpression[$$expr]] ; </msp:evaluate> <input type="text" name="expr" size="24" value="<msp:evaluate>MSPValue[ $$expr, "Sin[x]^2"]</msp:evaluate>"/> <br/> <br/> <msp:evaluate> 被積分関数を実行 If[ integrand =!= Null, MSPFormat[ Integrate[integrand,x],StandardForm]] </msp:evaluate> </msp:allocateKernel> <br/> <input type="submit"name="btnSubmit"value="Evaluate"> </form> </body> </html> この例ではmsp:evaluateタグが式を積分し,MSPFormatを 使って結果をStandardFormでフォーマ ットします.これが画像を生成し,画像への参照をೊします.これがうまくいくためには,Mathematica のフロントエンドを使わなければなりません. この例はMSPToExpressionを使ったページ変数の使い方も示しています.これは,例えば入力がた くさんのב算に使われるとき等に,特定の構造に適したMSPBlockの使用に代る選択肢です.ページ 変数のintegrandはNullに初期化され,後に,変数の値が変更されると積分が行われます.この入力 変数に実際の値がある場合にのみ$$exprのЖ釈された値が割り当てられます.$$exprをЖ釈してい るときにセキュリティエラーのようなエラーがあると例外が投げられ,integrandはNullのままにな ります. この例はMSPToExpressionを使ったページ変数の使い方も示しています.これは,例えば入力がた webMathematica User Guide 61 くさんのב算に使われるとき等に,特定の構造に適したMSPBlockの使用に代る選択肢です.ページ 変数のintegrandはNullに初期化され,後に,変数の値が変更されると積分が行われます.この入力 変数に実際の値がある場合にのみ$$exprのЖ釈された値が割り当てられます.$$exprをЖ釈してい るときにセキュリティエラーのようなエラーがあると例外が投げられ,integrandはNullのままにな ります. MSPToExpressionは 入力変数にセキュリティチェックを適用します.サイトの危؉の原因となるの は入力変数が多いので,安全な変換関数のMSPBlockとMSPToExpressionを常に使うようにすべき でしょう.特に,入力変数には決してToExpressionを使うべきではありません.セキュリティのシ ステムに関しては「セキュリティ」のセクションで詳しく説明します. MathMLを用いて結果をೊすこともできます.これについては「MathML」のセクションで詳述しま す.数式やグラフィックスのフォーマットについての詳細は「数式やグラフィックスの表示」をご覧 ください. 最初のmsp:evaluateタグで興味深い点は,このタグに2つのMathematica コマンドが含まれているこ とです.セミコロン(;)で区切ると,2つのコマンドをひとつのタグで使うことができます.これに加 え,最後のコマンドにもセミコロンが付いています.こうすることでタグからの出力が出力ページに 挿入されないようにしているのです. webMathematica のページにへのコードの挿入方法については 「ページのコード」で詳しく説明します. 3.6 ライブ3Dプロット:Plot3DLive.jsp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/Plot3DLive.jspでこのJSPに接続することができます(ご自分のサーバに接続するURLはこれとは多少異な る場合もあります).ユーザはここで関数を入力し,LiveGraphics3Dのアプレットを使ってプロッ トすることができます.このページのソースはwebMathematica/Examples/Plot3DLive.jspにあり ます. 62 webMathematica User Guide <%@ page language="java" %> <%@ taglib uri="/webMathematica-taglib"prefix="msp"%> <html> <head> <title>Live 3D Plotting</title> </head> <body text="#171717"bgcolor = "#ffffff"> <msp:allocateKernel> <msp:evaluate> $ImageBackground= "#ffffff"; $ImageSize = {300,300}; </msp:evaluate> <h1>Live 3D Plotting</h1> <form action="Plot3DLive.jsp"method="post"> Plot3D of <input type="text" name="fun" size="22" value = "<msp:evaluate>MSPValue[ $$fun, "Sin[x y]^2"] </msp:evaluate>"> <br> x from: <input type="text" name="x0" size="10" value = "<msp:evaluate>MSPValue[$$x0, "-2"] </msp:evaluate>"> to: <input type="text" name="x1" size="10" value = "<msp:evaluate>MSPValue[$$x1, "2"] </msp:evaluate>"> <br> y from: <input type="text" name="y0" size="10" value = "<msp:evaluate>MSPValue[$$y0, "-2"] </msp:evaluate>"> to: <input type="text" name="y1" size="10" value = "<msp:evaluate>MSPValue[$$y1, "2"] </msp:evaluate>"> <br> Number of points to plot <input type="text" name="pts" size="5" value = "<msp:evaluate>MSPValue[$$pts, "20"] </msp:evaluate>"> <br> <msp:evaluate> MSPBlock[ {$$fun, $$x0, $$x1, $$y0, $$y1, $$pts}, MSPLive3D[ Plot3D[$$fun, {x,$$x0,$$x1},{y,$$y0,$$y1},PlotPoints -> $$pts]]] </msp:evaluate> <br><hr> <input type="submit"name="btnSubmit"value="Evaluate"> </form> </msp:allocateKernel> </body> </html> "<msp:evaluate>MSPValue[$$y1, "2"] </msp:evaluate>"> <br> Number of points to plot <input type="text" name="pts" size="5" value = "<msp:evaluate>MSPValue[$$pts, "20"] </msp:evaluate>"> <br> <msp:evaluate> MSPBlock[ {$$fun, $$x0, $$x1, $$y0, $$y1, $$pts}, MSPLive3D[ webMathematica User Guide Plot3D[$$fun, {x,$$x0,$$x1},{y,$$y0,$$y1},PlotPoints -> $$pts]]] </msp:evaluate> <br><hr> <input type="submit"name="btnSubmit"value="Evaluate"> </form> </msp:allocateKernel> </body> </html> 63 この例ではたくさんの評価を使ってパラメータをध定しています.Plot3Dを呼び出すのに,最後の評 価がこれらのパラメータの値を使っています.この結果はLiveGraphics3Dアプレットを呼び出す MSPLive3Dに伝えられます.これで3Dグラフィックスオブジェクトのリアルタイムの回転ができる ようになります. 3.7 メッセージを得る:Messages.jsp この例ではMathematica が生成するメッセージやプリント出力がWebのページにೊされる仕組みを説 明します.前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/Messages.jspでこのJSPに接続することができます(ご自分のサーバに接続するURLはこれと は 多 少 異 な る 場 合 も あ り ま す) . こ の ペ ー ジ の ソー ス はw e b M a t h e m a t i c a / E xa mp l e s/ Messages.jspにあります. 64 webMathematica User Guide <%@ page language="java" %> <%@ taglib uri="/webMathematica-taglib"prefix="msp"%> <html> <head> <title>Messagesand Print Output</title> </head> <body text="#171717"bgcolor = "#ffffff"> <h1>Messagesand Print Output</h1> <p>These are some evaluationsthat will cause messages to be generated by Mathematica.</p> <msp:allocateKernel> <h4>Input is 1/0</h4> <msp:evaluate> Random[]/0 </msp:evaluate> <h4>Input is Sin[x,1]</h4> <msp:evaluate> Sin[x,1] </msp:evaluate> <h4>Input is Print[ "The result is ", x^2]</h4> <msp:evaluate> Print[ "The result is ", x^2] </msp:evaluate> <hr><p>The messages were:</p> <msp:evaluate> ColumnForm[MSPGetMessages[]] </msp:evaluate> メッセージはここに表示される <hr><p>The print output was:</p> <msp:evaluate> ColumnForm[MSPGetPrintOutput[]] プリント出力はここに表示される </msp:evaluate> <hr> </msp:allocateKernel> </body> </html> <msp:evaluate> ColumnForm[MSPGetMessages[]] </msp:evaluate> メッセージはここに表示される <hr><p>The print output was:</p> <msp:evaluate> ColumnForm[MSPGetPrintOutput[]] プリント出力はここに表示される </msp:evaluate> webMathematica User Guide 65 <hr> </msp:allocateKernel> </body> </html> 内容は極めて単純です.メッセージを生成する評価は2つだけです.メッセージの後ろにMSPGetMessagesとMSPGetPrintOutputが続きます.両方ともColumnFormでフォーマットされます.生成 されたメッセージが結果のページに表示されます. 3.8 一般的な内容をೊす:Content.jsp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/Content.jspでこのJSPに接続することができます(ご自分のサーバに接続するURLはこれとは多少異な る場合もあります). 今まで見てきた例では,どれもHTMLがブラウザにೊされていましたが,いろいろなフォーマットを 使った一般的な内容をWebで扱うこともできます.MSPはMSPReturnを使って任意の内容をೊすこ とができます.次はいろいろなフォーマットがどのようにೊされるかの例です.ソースはweb Mathematica/Examples/Content.jspとwebMathematica/WEB-INF/Applications/Example Utilities/Content.mにあります. 次はこのソースです. 66 webMathematica User Guide <%@ page language="java" %> <%@ taglib uri="/webMathematica-taglib"prefix="msp"%> <html> <head> <title>Live 3D Plotting</title> </head> <body text="#171717"bgcolor = "#ffffff"> <html> <head> <title>GeneralContent</title> </head> <body bgcolor="#ffffff"> <h1>General Content</h1> <form action="Content.jsp"method="post"> This example takes a format type and converts a notebook into this format type. It returns the converted notebook. </p> <msp:allocateKernel> <msp:evaluate> If[ MSPValueQ[$$button], Get[ "ExampleUtilities`Content`"]; MSPReturn @@ GeneralContent[$$button]] </msp:evaluate> </msp:allocateKernel> <p> Please select a format: </p> <input type="submit"name="button"value="Notebook"> <input type="submit"name="button"value="PostScript"> <input type="submit"name="button"value="GIF"> </form> </body> </html> これがMathematica のソースです. webMathematica User Guide 67 MakeNotebook[]:= UseFrontEnd[ Module[ {nb, nbobj}, nb = NotebookCreate[]; NotebookWrite[nb, Cell[ "A DynamicallyCreated Notebook", "Title"]] ; NotebookWrite[nb, Cell[ "Converted to " <> $$button, "Subtitle"]] ; NotebookWrite[nb, Cell[ "The date is " <> ToString[ Date[]], "Text"]] ; nbobj = NotebookGet[nb] ; NotebookClose[nb] ; nbobj]] GeneralContent[fmt_] := Module[ {nbobj}, nbobj = MakeNotebook[]; UseFrontEnd[ Switch[ fmt, "Notebook", {ToString[ nbobj, InputForm], "application/mathematica"}, "PostScript", {DisplayString[nbobj, "EPS"], "application/eps"}, "GIF", {DisplayString[nbobj, "GIF"], "image/gif"}, _, "Unknown format"] ]] この例では1つの評価が変数$$buttonをテストします.この変数がformのボタンの1つをӭ動するこ とで値を持つと,それはೊすフォーマットタイプを指定するのに使われ,関数GeneralContentに渡 されます.この関数のMathematica のコードは,変数がध定されるとロードされるようになっている 別のパッケージにあります.GeneralContentは単純なノートブックを生成する関数MakeNote bookを呼び出します.MakeNotebookはMathematica Notebook APIとJ/Link の関数UseFrontEndを 使 っ て ノ ー ト ブッ ク を 生 成 し ま す .実 際 に は も っ と 面 白い ノ ート ブッ ク が生 成 され るで し ょ う.MSPReturnはノートブックの表現形をコンテントタイプと共にサーバにೊします.これがブラウ ザにೊされます.ブラウザが適切にध定されていれば,必要なヘルパーアプリケーションが配置され ます. よりژ度な例では,動的に生成されたノートブックがクライアントからのリクエストと共に送られた 情報を使います. 68 webMathematica User Guide 特別な内容をೊしたい,またファイル名をその内容と一緒に使いたいという場合は,MSPReturnの引 数が3つあるタイプを使うとよいでしょう.これについては「MSP関数のリファレンス」セクション をご覧ください. MSPPageOptionsを使うと,これとは別の方法でMSPスクリプトからೊされる内容をध定することが できます.この方法については後で詳しく説明します. 3.9 アプレット:TextApplet.jsp 次の例ではMathematica のパワーを使ったWebサイトをアプレットから呼び出してみます.これはク ライアントとサーバプログラミングの組合せで行われます.このセクションにはJavaのプログラミン グも出てきます. 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/TextApplet.jspでこのMSPに接続することができます(ご自分のサーバに接続するURLはこれとは多少異な る場合もあります).このページのソースはwebMathematica/Examples/TextApplet.jspと webMathematica/WEB-INF/src/ExampleApplets/TextApplet.javaにあります. これがJSPのソースです. webMathematica User Guide <%@ page language="java" %> <%@ taglib uri="/webMathematica-taglib"prefix="msp"%> <html> <head> <title>Live 3D Plotting</title> </head> <body text="#171717"bgcolor = "#ffffff"> <html> <title>Applet Test</title> <body bgcolor="#ffffff"> <p> Here is an applet that gets a result from Mathematica: <br> <msp:allocateKernel> <msp:evaluate> If[ MSPValueQ[$$Compute], MSPReturn["Date[] returns " <> ToString[ Date[]], "text/plain"]] </msp:evaluate> <applet code="TextApplet" archive = "<msp:evaluate>$WebApplication<> "/Resources/applets/MSPExamples.jar"</msp:evaluate>" width="400" height="30"> <param name="ArgumentURL"value="TextApplet.jsp?Compute=True"> </applet> </msp:allocateKernel> <p> Hitting refresh will cause the page to update. </body> </html> アプレットのためのソース,TextApplet.javaは次の通りです. 69 70 webMathematica User Guide import java.applet.Applet; import java.awt.*; import java.net.*; import java.io.*; public class TextApplet extends Applet { public void paint(Graphicsg) { super.paint(g); try { URL url=new URL(getDocumentBase(),getParameter("ArgumentURL")); InputStreamin=url.openStream(); ByteArrayOutputStreamout=new ByteArrayOutputStream(); byte[] b=new byte[1024]; int len; while((len=in.read(b,0,1024))!= -1) { out.write(b,0,len); } b=out.toByteArray(); g.drawBytes(b,0,b.length-1,20,20); } catch (Exception e) { System.out.println("Error"+e); } } } これはఫ常に単純なアプレットです.paintメソッドがURLへの接続を開きます.そのURLはアプレッ トをロードしたドキュメントとparamタグから渡されたArgumentURLというパラメータの値によって 名付けられています.これによってTextApplet JSPが呼ばれ,日付けב算がೊされます. 3.10 JavaScript: PlotScript.jsp 次の例ではMathematica のパワーを使ったWebサイトにJavaScriptを統合する方法を見てみます.ま た,クライアントとサーバプログラミングも見ていきます.このセクションにはJavaScriptのプログラ ミングが出てきます. webMathematica User Guide 71 JavaScriptとJavaは異なるلؘである点にご注意ください.JavaScriptはブラウザのドキュメントその他 の機能の操作に優れたスクリプトلؘです.Javaは,アプレットを介してHTML等で使われる一般的 な目的のプログラミングلؘです.JavaScriptはブラウザやブラウザ内のドキュメント操作に優れてお り,Javaはよりژ度な関数のコレクションを備えていてブラウザのウィンドウに描画できるので,こ の2つのلؘは互いに補いあう関係にあります.JavaScriptとJavaを同時に使うことも可能です. 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/PlotScript.jspでこのMSPに接続することができます(ご自分のサーバに接続するURLはこれとは多少異な る場合もあります).このページのソースはwebMathematica/Examples/PlotScript.jspとweb Mathematica/Examples/PlotScript1.jspにあります. まずこれがPlotScript.jspのソースです. 72 webMathematica User Guide <%@ page language="java" %> <%@ taglib uri="/webMathematica-taglib"prefix="msp"%> <html> <head> <title>Live 3D Plotting</title> </head> <body text="#171717"bgcolor = "#ffffff"> <html> <head> <SCRIPT> <!--- Hide script from old browsers function plot(f) { win = window.open("PlotScript1?fun="+ escape(f.fun.value)+ "&x1=" + escape(f.x1.value), "plot","toolbar=none"); win.resizeTo(450, 350); } // end hiding from old browsers --> </SCRIPT> <title>Plot</title> </head> <body> <h1>Plot</h1> <form action="Plot"method="post"> <msp:allocateKernel> Enter a function: <input type="text" name="fun" size="24" value = "<msp:evaluate>MSPValue[ $$fun, "Sin[x]^2"] </msp:evaluate>"> Enter a number: <input type="text" name="x1" size="24" value = "<msp:evaluate>MSPValue[ $$x1, "10"] </msp:evaluate>"> <hr> <input type="button"value="Plot"onClick="plot(this.form)"> </msp:allocateKernel> </form> </body> </html> 次に,これがPlotScript1.jspのソースです. webMathematica User Guide 73 <html> <head> <title>FunctionPlot</title> </head> <body bgcolor="#ffffff"> <msp:allocateKernel> <msp:evaluate> MSPBlock[ {$$fun, $$x1}, MSPShow[ Plot[$$fun, {x,0,$$x1},ImageSize->400]]] </msp:evaluate> </msp:allocateKernel> <form action="Plot"method="post"> <input type="button"value="Close"onClick="window.close()"> </form> </body> </html> これはJSPがJavaScriptをどのように使っているかを示す簡単な例です.最初のページのP l o t Script.jspでは,2つのテキストinput要素のformと1つのsubmitボタンを持つページを形成しま す.このボタンをクリックすると,PlotScript1.jspの出力の載った新しいウィンドウが開きます. 3.11 変数のध定:SetBasic.jsp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/SetBasic.jspでこのJSPに接続することができます(ご自分のサーバに接続するURLはこれとは多少異なる 場合もあります) この例題ではJSPでב算された値をMathematica に渡します.Mathematica はこの値を使ってב算しま す.この例題ではJavaのプログラミングを使っています.この点が,Javaのプログラミングを必要と しないほとんどのwebMathematica との違いです.このページのソースは webMathematica/ Examples/SetBasic.jspにあります.以下はこのソースです. 74 webMathematica User Guide <%@ page language="java" %> <%@ taglib uri="/webMathematica-taglib"prefix="msp"%> <html> <head> <title>Set Example</title> </head> <body bgcolor="#ffffff"> <h1>Set Example</h1> <p> This jsp uses the MSP Taglib to demonstratepassing Java values to Mathematica. </p> <% int num = 10; Object obj = new Object(); %> <msp:allocateKernel> <msp:set name="var1"intValue="<%=num %>" /> <msp:set name="var2"objectValue="Stringfrom java" /> <msp:set name="var3"objectValue="<%=obj %>" /> <msp:evaluate> Nest[ f, x, var1] </msp:evaluate> <msp:evaluate> Characters[var2] </msp:evaluate> <msp:evaluate> var3@hashCode[] </msp:evaluate> </msp:allocateKernel> </body> </html> この例題では変数numがint,strがString(文字列),objがObject(オブジェクト)を表します.この それぞれがJSPで作成され,msp:setタグを使ってMathematica に渡されます.このタグはname属性 とvalue属性の2つの引数を取ります.name属性はMathematica で変数に与えられる名前を与えま す.一方value属性は値を参照するものです.変数がint,char,doubleのようなプリミティブタイプの 場 合 は ,i n t V a l u e, c h a r V a l u e, d o u b l e V a l u eのよ う な 適 切 な 値 属性 を 使う 必要 が あり ま す.msp:setはJava intをMathematica の整数として送りJava StringをMathematica の文字列として送る 方法にご注目ください.Java ObjectはMathematica オブジェクトの参照として送られます.Javaから Mathematica へどのようにタイプが送られるのかを決めているӪ則は, J/Link で使われているӪ則と全 く同じものです. webMathematica User Guide 75 この例題では変数numがint,strがString(文字列),objがObject(オブジェクト)を表します.この それぞれがJSPで作成され,msp:setタグを使ってMathematica に渡されます.このタグはname属性 とvalue属性の2つの引数を取ります.name属性はMathematica で変数に与えられる名前を与えま す.一方value属性は値を参照するものです.変数がint,char,doubleのようなプリミティブタイプの 場 合 は ,i n t V a l u e, c h a r V a l u e, d o u b l e V a l u eのよ う な 適 切 な 値 属性 を 使う 必要 が あり ま す.msp:setはJava intをMathematica の整数として送りJava StringをMathematica の文字列として送る 方法にご注目ください.Java ObjectはMathematica オブジェクトの参照として送られます.Javaから Mathematica へどのようにタイプが送られるのかを決めているӪ則は, J/Link で使われているӪ則と全 く同じものです. 3.12 変数の取得:GetBasic.jsp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/GetBasic.jspでこのJSPに接続することができます(ご自分のサーバに接続するURLはこれとは多少異なる 場合もあります). この例題ではJSPでב算された値をMathematica に渡します.Mathematica はこの値を使ってב算しま す.このページのソースはwebMathematica/Examples/GetBasic.jspにあります.その一ಊ分は以 下のようになっています. 76 webMathematica User Guide <msp:allocateKernel> <msp:evaluate> num = Random[Integer,{1,10}]; list = Table[ Random[], {num}] ; sum = Apply[ Plus, list]/num; </msp:evaluate> <msp:get name="dArray"type="double[]"value="list" /> <msp:get name="dValue"type="Double"value="sum"/> <p> The average is <%= dValue %>. </p> <table border> <% for ( int i = 0; i < dArray.length;i++) { %> <tr><td><%= dArray[i] %></td></tr> <% } %> </table> </msp:allocateKernel> この例ではMathematica が乱数のリストを生成し,その平均値をב算します.JSPは msp:getタグを使 っ て こ れ ら の 値 を 得 ま す .こ の タ グ はn a m e属 性 ,t y p e属 性 そ れ にv a l u e属 性 を 持 っ て い ま す .n a m e属 性は J a v a の 変 数 名を 制御 し ます .t y p e属 性は J a v a で 使 わ れる タイ プ を制 御 しま す.value属性は評価しなければならないMathematica の式を渡します.Object,String,配列のような 参照タイプのみがmsp:getタグで渡されます.これに加え,Javaで与えられるタイプはMathematica が 送ったタイプと互換性がなければなりません.さもなければ例外が投げられます.Mathematica から の伝達Ӫ則は通常のJ/Link タイプの変換が適用されますが,適用されなければオブジェクトはJ/Link が提供する一般的なMathematica 式を表すcom.wolfram.jlink.Exprタイプのオブジェクトに変換されま す. この例題にはJavaとMathematica の両方のプログラミングが必要です.これはweb Mathematica を既存 のJSPフレームワークに統合することがいかに簡単かを示しています. webMathematica User Guide 77 3.13 MSPとの対話:IncludeMSP.jsp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/IncludeMSP.jspでこのJSPに接続することができます(ご自分のサーバに接続するURLはこれとは多少異 なる場合もあります). この例題はJSPがどのようにMSPスクリプトを呼び出すかを示します.MSPスクリプトは,現在は JSPとなっているwebMathematica のインタラクションのもとの形式です.これについては「 以前の webMathematica 技術」で詳述します.このページのソースはwebMathematica/Examples/Include MSP.jspにあります.以下はその一ಊ分です.」 <%@ page language="java" %> <%@ taglib uri="/webMathematica-taglib"prefix="msp"%> <html> <head> <title>MSP Include Example</title> </head> <body> <h1>MSP Include Example</h1> <p> This JSP uses the MSP Taglib to demonstrateincluding the results of an entire MSP. </p> <msp:includeClassicMSPname="Examples/PlotSingle" arguments="fun=Sin[x]&x1=10"/> </body> </html> この例では<msp:includeClassicMSP>タグを使ってMSP Examples/PlotSingle.mspの結果がJSPに 含まれています.属性は2つあります.name属性はMSPが呼び出されるようにし,arguments属性 はMSPにઉ加的な引数を与えます.この機能は既存のMSPをJSPで使いたいときに便利です.これと 緊密な関係を持つタグで,MSPに転送するmsp:forwardClassicMSPタグというものがあります. 78 webMathematica User Guide 4. ページの作成 例題が正しく実行されるようにwebMathematica サーバをインストール・ध定し,前章で説明したよう なwebMathematica のための素材の書き方の基本を理Жしたら,ご自分のページを作成してみましょ う. webMathematica Webアプリケーションにご自分の領域をध定してみることから始めるとよいでしょ う . ここ に, 例え ばN e w S c r ip tsと いうよ うなデ ィレ クトリ を作り ,サンプルの1 つ(例えば Plot.jsp)をExamplesディレクトリからコピーします.こうするとhttp://localhost:8080/web Mathematica/NewScripts/Plot.jspというURLでこのスクリプトにアクセスできるようになりま す. ここでwebMathematica のインデックスページhttp://localhost:8080/webMathematica/index.htmlを見直して みるとよいかもしれません.ここにはwebMathematica の機能へのリンクがたくさんあります.実際に ご自分で何か書いてみようというときは,次の「ページ作成のヒント」をご覧ください.ここには webMathematica に含まれるいろいろなページ作成のユーティリティについての説明があります. 4.1 ページ作成のヒント このセクションには,ユーザがページを作成するときに役立つ項目をまとめてあります.各項目につ いてはこのユーザガイドの後半でより詳しく説明してあります.ここでは重要な項目をまとめ,簡単 な説明を加えました.これらの項目の要点を押さえることで,サイトの開発がよりスムーズになるで しょう. 4.1.1 変数 webMathematica で作業をする際に理Жしておかなければならない変数が2つあります.それは入力変 数とページ変数です. 入力変数は,例えばHTMLフォームの入力フィールドから,HTTPのリクエストに付いてきます.入力 変数には「$$」という接頭辞が付いているため,Mathematica のコードの中でށ別できます.以下の 例題ではsetting変数が入力フィールドでध定されます.これはMathematica のコードでは $$settingになります. webMathematica User Guide 79 <input type="text" name="setting"/> <msp:evaluate> If[ MSPValueQ[$$setting], .... ] </msp:evaluate> 入力変数はユーザのサーバへの潜在的なセキュリティの危؉を含んでいるので,Mathematica の入力 に変換する際は常に特別の関数のMSPBlockとMSPToExpressionを使ってください.特に,ToEx pressionは入力変数には絶対に使わないでください.次はMSPBlockの使用例です. <input type="text" name="fun" /> <msp:evaluate> MSPBlock[ {$$fun}, Integrate[ $$fun, x] ] </msp:evaluate> ページ変数は中間の値を保存するMathematica の変数です.この変数はページ終了と同時にクリアさ れるのでページ変数と呼ばれます.以下の例題ではページ変数のtmpが,テキスト入力フィールド (これは$$exprという入力変数に保存されています)に入力した式を保存するのに使われていま す.安全な関数のMSPToExpressionを使って入力をMathematica の式に変換します. <input type="text" name="expr"/> <msp:evaluate> tmp = Null; tmp = MSPToExpression[$$expr] ; </msp:evaluate> <p> <msp:evaluate> If[ tmp =!= Null, .... ] </msp:evaluate> </p> 80 webMathematica User Guide ご自分の変数をページの終了後も保存したい場合は,これをセッション変数にするとよいでしょ う.セッション変数および変数全般に関する詳細は「よりژ度なトピック」の「変数」に詳しく説明 してあります. 4.1.2 ページのコード webMathematica の目的はMathematica をWeb上のב算に使うことです.そのため,Webページに Mathematica のコードを置くことが重要になります.これは <msp:evaluate>タグを使って次のように します. <msp:evaluate Integrate[ 1/(1-x^3),x] </msp:evaluate> Mathematica のコードはMathematica の標準的な方法で評価を行い,ב算結果がWebのページに表示さ れます.MSPFormatを使って結果のフォーマットを変更することもできます.Mathematica における フォーマットについては「よりژ度なトピック」の「評価のフォーマット」でより詳しく説明してあ ります.次はMSPFormatの例です.積分がTraditionalFormにフォーマットされ,結果がGIF画像で 表示されます. <msp:evaluate MSPFormat[Integrate[ 1/(1-x^3),x],TraditionalForm] </msp:evaluate> 結果をWebで表示したくない場合は,セミコロン(;)を使ってͩすことができます.次の例では変数xに 割当てが行われていますが,出力は表示されません. <msp:evaluate x = 109; </msp:evaluate> webMathematica のページでコードを使う上での最後のヒントは,複数のב算を1つの <msp:evaluate>タグ内でセミコロン(;)を使って区切る方法です.以下をご覧ください. webMathematica User Guide 81 <msp:evaluate x = 109; y = 44.5; {x+y} </msp:evaluate> webMathematica のページでのコードの使い方については,「付ຉ」の「 MSP Taglibのリファレンス」 で詳しく説明してあります.ここにはwebMathematica のタグについての詳しい説明があります. 4.2 テンプレート webMathematica は,webMathematica の素材にデザインを盛り込むための,多くのテンプレートその他 のユーティリティを提供しています. 4.2.1 参照例 webMathematica の例にはwebMathematica のホームページから接続できます.ホームページには http://localhost:8080/webMathematicaで接続できます(ご自分のサーバへのアクセスのURLはこれとは 異なることがあります).このホームページには,ページのデザイン性をژめて見栄えをよくするテ ンプレートでラップされた例題が載っています.このテンプレートはHTMLの枠組みを利用している ので,ご自分のページに変更を加えてこれを利用するのは比ѕ的簡単です. 4.2.2 デザイン例 ご自分のページを作成するときに,デザインの例が見たくなることがあるでしょう.そんなとき は,プロフェッショナルな外観のための色彩,フォント,画像等のサンプルコレクションをご利用く ださい.デザイン例のページには,メインインデックスページ,あるいはhttp://localhost:8080/webMathematica/Examples/DesignTemplates/PurpleSpiral.jsp等のURLからアクセスすることができます.各 例題には他の例題へのリンクがあります. 82 webMathematica User Guide 4.2.3 バナーとボタン http://localhost:8080/webMathematica/Resources/images/banners/とhttp://localhost:8080/webMathematica/Resources/images/buttons/はそれぞれバナーとボタンのページへのリンクです.webm-white.gifのバ ナー等,この中の画像を使用する場合は次のようなimgタグが使えます. <img src="/webMathematica/Resources/images/banners/webm-white.gif" /> ऍ的ファイルのMSPへの入れ方のセクションに,画像を入れるより詳しい説明があります. webMathematica のライセンスオプションにはご自分のサイトに認証を受けたバナーを使う必要のある ものがあります.この条件を満たすためには上記サイトのバナーのひとつを使うとよいでしょう. 4.3 最小インストール ご自分のwebMathematicaサイトが正しく動いていることに確信が持て,ご自分の素材の開発を始めら れたら,ドキュメントや例題を取り除いてインストールを最小にしたいと思われるかもしれませ ん.webMathematicaで必要な最低限のファイルのレイアウトは以下の通りです.標準的なファイルの レイアウトは「付ຉ」の「ファイルのレイアウト」をご覧ください. 83 webMathematica User Guide 4.3.1 最小のファイルレイアウト webMathematica WEB-INF web.xml Applications JLink JLink.m Kernel (Mathematicacode for J/Link) MSP MSP.m Security.m Kernel init.m conf MSP.conf webMathematica.tld lib kernelpool.jar JLink.jar servlets.jar tags.jar webutils.jar SystemFiles Libraries $SystemID (JLink native library) システムに必要なライブラリ以外のすべてのJ/Link ネイティブライブラリをwebMathematica/WEBINF/lib/SystemFiles/Librariesから取り除くことができます.システムに必要なライブラリは $SystemIDというディレクトリに入っています. 84 webMathematica User Guide 5. アプリケーション このセクションでは,特定のアプリケーションでのwebMathematica の使い方について説明します. 5.1 XML XMLは,徐々に重要度が増してきている一般的なデータ形式です.XML形式のデータは,この形式 を処理できるアプリケーションで容易に使用することができます.ですから,XML形式を選ぶと開発 の手間が大幅に削減できることになります.また,XMLを使うデータ形式も増加しています.数学的 ・科学的見地からより重要な点は,XHTML(HTMLのXML対応バージョン),MathML(数学的情報 を保存する方法),SVG(グラフィックス形式)でしょう.XMLアプリケーションのリストは http://www.xml.orgでご覧ください. Mathematica はXMLと共に使うための数多くの機能を導入しましたが,これらの機能はすべてweb Mathematica でも使えます.XMLは特殊なXMLアプリケーションをサポートしており,データ交換の 一般的なフォーマットとしてもwebMathematica にとって大変重宝なものです.MathML,SVG,XHTMLの使用方法についてはそれぞれのセクションで説明します.このセクションではXMLと Mathematica におけるXMLの機能について概観します.また,この機能がweb Mathematica でどのよう に役に立つのかの例題もいくつか見てみます. 5.1.1 XMLとは このセクションではXMLについて簡単に説明します.詳細はhttp://www.w3.org/XML/の,例えば http://www.w3.org/XML/1999/XML-in-10-pointsのような詳しい説明のページをご覧ください. 以下はXMLドキュメントのサンプルです. webMathematica User Guide 85 <?xml version="1.0"?> <library> <book> <title>A New Kind of Science</title> <author>StephenWolfram</author> </book> <book> <title>The Lord of the Rings</title> <author>J.R.R.Tolkien</author> </book> </library> 上記の例のデータ形式はライブラリ用のものです.ライブラリには本(book)が収められています.そ れぞれの本には著者(author)と書名(title)があります.このことからも,XMLが構造化されたデータに 適していることが分かるでしょう.これに加え,XMLがHTMLに少し似ていることも分かります.違 いは,XMLでは特定のアプリケーションに適したタグ(「<」と「>」で囲まれている)لを導入する ことができるので,決められたタグに限られないことです.有効なXMLドキュメントはHTMLには適 用されないӪ則に従わなければならないという点で,XMLのフォーマットはHTMLより厳密であると ؘえます.これについては次のセクションで説明します. XMLコンプライアンス XMLの重要な点に,ドキュメントがXMLのӪ則に則った整形式でなければならないということが挙 げられます.このセクションではコンプライアンスの基本例を見ていきます. XMLドキュメントにはヘッダがなければなりません.XMLドキュメントは,例えば,次のように始 まらなければなりません. <?xml version="1.0"?> 空要素は終了タグを持つか,開始タグが />で終わるかしていなければなりません.このӪ則から次は 整形式であることが分かります. <br/><hr/> しかし,次は整形式ではありません. 86 webMathematica User Guide <br><hr> 空白ではないタグに関しては,終了タグが必要です.ですから,以下は整形式です. <p>Here is a paragraph.</p><p>Hereis another.</p> しかし次は整形式ではありません. <p>Here is a paragraph.<p>Hereis another. 5.1.2 Mathematica のXMLサポート このセクションではXMLで使うMathematica ツールを簡単に紹介します.詳細はオンラインのドキュ メントをご覧ください.重要な点のひとつはXMLが構造化されたデータを入れるのに適している点で す.これはMathematica の式(Mathematica の基本的なデータタイプ)にも当てはまります.このた め,XMLのデータをMathematica にインポートするのが簡単なのです. 次は簡単な例題です. In[7]:= xml = "<?xml version=\"1.0\"?>\n <library>\n <book>\n <title> A New Kind of Science<êtitle><author>Stephen Wolfram<êauthor> \n <êbook>\n <book> \n <title>The Lord of the Rings<ê title> <author>J.R.R. Tolkien<êauthor>\n <êbook>\n<êlibrary>"; このXMLはMathematica にインポートすることができます.Mathematicaはインポートしたデータを Symbolic XMLで表します.Mathematica 式の性ޑ上,Symbolic XMLはテキストXMLのMathematica ネ イティブの形になります. In[9]:= Out[9]= sym = ImportString@ xml, "XML"D XMLObject@DocumentD@ 8XMLObject@DeclarationD@Version Ø 1.0D<, XMLElement@library, 8<, 8XMLElement@book, 8<, 8XMLElement@title, 8<, 8A New Kind of Science<D, XMLElement@author, 8<, 8Stephen Wolfram<D<D, XMLElement@book, 8<, 8XMLElement@title, 8<, 8The Lord of the Rings<D, XMLElement@author, 8<, 8J.R.R. Tolkien<D<D<D, 8<D webMathematica User Guide 87 Mathematica の基本的なプログラミング機能を使ってSymbolic XMLを処理することができます.例え ば,著者(author)を全ಊ抽出することができます. In[10]:= Cases@sym, XMLElement@ "author", a_, 8d_<D Ø d, InfinityD Out[10]= 8Stephen Wolfram, J.R.R. Tolkien< In[16]:= newSym = sym ê. XMLElement@ t_, a_, 8d_<D Ø XMLElement@t, a, 8ToLowerCase@dD<D Out[16]= XMLObject@DocumentD@ 8XMLObject@DeclarationD@Version Ø 1.0D<, XMLElement@library, 8<, 8XMLElement@book, 8<, 8XMLElement@title, 8<, 8a new kind of science<D, XMLElement@author, 8<, 8stephen wolfram<D<D, XMLElement@book, 8<, 8XMLElement@title, 8<, 8the lord of the rings<D, XMLElement@author, 8<, 8j.r.r. tolkien<D<D<D, 8<D 次に,もとの入力に修正を加えて新たなXML形式を生成します. In[17]:= ExportString@newSym, "XML"D Out[17]= <?xml version='1.0'?> <library> <book> <title>a new kind of science<êtitle> <author>stephen wolfram<êauthor> <êbook> <book> <title>the lord of the rings<êtitle> <author>j.r.r. tolkien<êauthor> <êbook> <êlibrary> もちろんこの種の変形は他の方法でも行えます.例えば,XSLTスタイルシート技術を使うことがで きます.しかし,XSLTスタイルシートをध定して変形を行うようにするのはオーバーヘッドになり ます.統一されたプログラミング原理を持つMathematica を使う方が,早く簡単にタスクを行えるこ とがよくあります. Mathematica のXMLツールにはこの他にも,例えば属性,実体,名前空間,認証,CDATAの使い方等 多くの特徴があります.詳しくはMathematica のドキュメントをご覧ください. 88 webMathematica User Guide 5.1.3 webMathematica XMLアプリケーション webMathematica アプリケーションの多くはすぐにブラウザで使うことのできるHTMLを生成しま す.しかし,webMathematica サイトからの出力はブラウザに送られないこともあります.アプリケー ションが何らかのデータを読み取りその後で更に処理が行われることもあるのです.このセクション ではこのような処理がどのように行われるのかを見てみます. この例題のソースはwebMathematica/Examples/XML/Phone.jspにあります.この例ではXMLフ ァイルwebMathematica/Examples/XML/phone.xmlも使います.前述のようにwebMathematica を インストールするとhttp://localhost:8080/webMathematica/Examples/XML/Phone.jsp でこのJSPに接続する ことができます(ご自分のサーバに接続するURLはこれとは多少異なる場合もあります). まず,XMLのデータを見てみます. <?xml version="1.0"?> <EmployeeList> <Person Name="Tom Jones" Email="tomj"Phone="235-1231"/> <Person Name="JanetRogers" Email="jrogers"Phone="235-1129"/> <Person Name="Bob Norris" Email="bobn"Phone="235-1237"/> <Person Name="Kit Smithers" Email="ksmit"Phone="235-0729"/> <Person Name="JamieLemay" Email="jlemay"Phone="235-6393"/> </EmployeeList> Phone.jspの内容は以下の通りです. <%@ page language="java" %> <%@ taglib uri="/webMathematica-taglib"prefix="msp"%> <msp:evaluate> xml = Import[ ToFileName[MSPPageDirectory[],"phone.xml"],"XML"] ; If[ MSPValueQ[$$name], patt = "*" <> $$name <> "*"; xml = DeleteCases[xml, XMLElement["Person", {___, "Name"->n_/;!StringMatchQ[n, patt],___},_ ], Infinity]] ; MSPReturn[ExportString[xml, "XML"], "text/xml"] </msp:evaluate> この例題では,最初にXMLファイルをMathematica にインポートします.XMLのデータが Phone.jspと同じディレクトリにあるのでコマンドMSPPageDirectoryが使われています.次にパラ メータnameが送られたがどうかが検証されます.送られていた場合には,この名前に一致しない XML要素を消去するためにこれが使われます.http://localhost:8080/webMathematica/Examples/XML/Phone.jsp?name=T等のURLでこのパラメータの操作を見ることができます(ご自分のサーバに接続す るURLはこれとは多少異なる場合もあります). webMathematica User Guide 89 この例題では,最初にXMLファイルをMathematica にインポートします.XMLのデータが Phone.jspと同じディレクトリにあるのでコマンドMSPPageDirectoryが使われています.次にパラ メータnameが送られたがどうかが検証されます.送られていた場合には,この名前に一致しない XML要素を消去するためにこれが使われます.http://localhost:8080/webMathematica/Examples/XML/Phone.jsp?name=T等のURLでこのパラメータの操作を見ることができます(ご自分のサーバに接続す るURLはこれとは多少異なる場合もあります). もちろんこのXMLデータをさらに処理したいこともあるでしょう.XMLを認ށするシステムがある なら,これは極めて簡単に行えます.無論,XMLを認ށするアプリケーションで便利なもののひとつ はMathematica です.例えば次でwebMathematica サイトを呼び出して情報を取り出します. In[1]:= Out[1]= XML`Parser`XMLGet@ "http:êêlocalhost:8080êwebMathematicaêExamplesêXMLêPhone.jsp"D XMLObject@DocumentD@ 8XMLObject@DeclarationD@Version Ø 1.0D<, XMLElement@EmployeeList, 8<, 8XMLElement@Person, 8Name Ø Tom Jones, Email Ø tomj, Phone Ø 235-1231<, 8<D, XMLElement@Person, 8Name Ø Janet Rogers, Email Ø jrogers, Phone Ø 235-1129<, 8<D, XMLElement@Person, 8Name Ø Bob Norris, Email Ø bobn, Phone Ø 235-1237<, 8<D<D, 8<D Mathematica のプログラムでこれを使うこともできます. In[2]:= Contact@query_StringD := Cases@XML`Parser`XMLGet@ "http:êêlocalhost:8080êwebMathematicaêExamplesêXMLêPhone.jsp?name=" <> queryD, XMLElement@"Person", x_List, 8<D ß x, InfinityD In[3]:= Contact@ "Tom"D Out[3]= 88Name Ø Tom Jones, Email Ø tomj, Phone Ø 235-1231<< もちろん,クライアントがVisual Basic,Python,JavaのようなMathematica 以外のシステムで書かれて いても大丈夫です. 90 webMathematica User Guide 5.2 MathML MathMLは数学,科学,その他の技術情報をWeb上で送受信したり処理したりできるようにधבされ ています.World Wide Web Consortium (W3C)の数学専委員会が公式に推薦している形式です.web Mathematica のユーザはMathMLを使うことで多くの恩恵に浴することができます.MathMLを使って 数式とテキストが混ざったドキュメントを扱ったり,webMathematica のサイトで動的にMathMLを生 成したり,MathMLのエントリーメカニズムを使ってWebのブラウザに数式を入力したり,これを webMathematica に送ってב算したりすることができます. Wolfram Researchは年に渡り,W3C数学専委員会のध立メンバーとして,また2000年 (http://www.mathmlconference.org/2000)と2002年(http://www.mathmlconference.org/2002)に開催された公 式MathMLコンファレンスの主催者として,MathMLの開発に関わってきました.Mathematica には MathMLを使うためのさまざまな機能が含まれており,Mathematica のタイプセットシステムと MathMLには緊密な関係があります. MathMLについてもっとお知りになりたい場合はWolfram Researchが提供しているWebサイト http://www.mathmlcentral.comもご覧ください.MathMLの進化やMathematica のようなב算システムに 適した数学لؘの開発に関連した問題はhttp://www.mathmlcentral.com/history.htmlでご覧ください. MathMLの具体的な仕組みについてはあまり興味がなく,出力でこれを使うことにのみ関心がある方 は,「MathMLの生成」と「MathMLの送信」に関するセクションにお進みください. 5.2.1 WebのドキュメントにMathMLを埋め込む このセクションでは数式とテキストが混ざったドキュメントの書き方を説明します.このようなドキ ュメントはXML形式で,MathMLとXHTML(HTMLのXML対応形式)の両方を使って書きます.webMathematica にはこれらすべてを自動的に行う関数が含まれています.ですからブラウザがどのよう にMathMLをサポートしているのかに特に興味がない場合は以下は読み飛ばされて結構です. XHTML XHTMLはXMLのHTML対応形式で,W3Cが正式に推薦しているものです(http://www.w3.org/MarkUp).これは,ドキュメントが有効であるためにはXHTMLの方はXMLのӪ則に従わなければな らない点が違う他は,HTMLに大変よく似ています(このXMLのӪ則の一ಊについては前のセクショ ンで説明してあります).テキストと数式が混ざったドキュメントを使う際にはXHTMLが必要で す.W3Cにはこれ以上HTMLを開発する意向はないので,いずれにしろXHTMLを使わなければなら ないでしょう. 下記で例示してあるXHTMLドキュメントはHTMLに大変よく似ています.異なる点は最初のXML宣 ؘとDTD参照だけです.DTD参照はXMLパーサで入力ドキュメントが本当に有効なXHTMLであると 認証するのに使われます.これはXHTML技術の有用性の一端を示しています.つまり,特定の XML形式を指定しなくてもパーサがドキュメントを検証し,タグが正しく使われているかどうか,引 数の数が適切であるかどうか等の細ಊを確かめることができるのです.DTDの参照は必ࣆのものでは ありません.しかし,ドキュメントを検証するのであればこの参照が必要になります. webMathematica User Guide 91 下記で例示してあるXHTMLドキュメントはHTMLに大変よく似ています.異なる点は最初のXML宣 ؘとDTD参照だけです.DTD参照はXMLパーサで入力ドキュメントが本当に有効なXHTMLであると 認証するのに使われます.これはXHTML技術の有用性の一端を示しています.つまり,特定の XML形式を指定しなくてもパーサがドキュメントを検証し,タグが正しく使われているかどうか,引 数の数が適切であるかどうか等の細ಊを確かめることができるのです.DTDの参照は必ࣆのものでは ありません.しかし,ドキュメントを検証するのであればこの参照が必要になります. <?xml version="1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Basic XHTML Document</title> </head> <body> <h1>XHTML</h1> <p>This is a basic XHTML document.</p> </body> </html> 最սのブラウザは,このドキュメントを読み,あるべき姿で表示することができます. XHTMLとMathML テキストドキュメントに数式その他の技術表記を加える場合は,XHTMLとMathMLが両方入ったドキ ュメントを書くことができます.次はそのサンプルドキュメントです. 92 webMathematica User Guide <?xml version="1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd" [ <!ENTITY mathml "http://www.w3.org/1998/Math/MathML"> ]> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Basic XHTML+MathMLDocument</title> </head> <body> <h1>XHTML+MathML</h1> <p>Here is a math expression.</p> <math xmlns='http://www.w3.org/1998/Math/MathML'> <msup> <mi>x</mi> <mn>2</mn> </msup></math> </body> </html> これをMathMLをネイティブにサポートするブラウザに読み込むと希望通りに読むことができま す.MathMLをXHTMLに埋め込んでXHTML+MathMLドキュメントを可能にするDTDへの参照にご注 目ください. 残 念 な が ら す べ て の ブ ラ ウ ザ が ネイ テ ィ ブ に M a t h M Lを サ ポ ー ト し てい る わ け で は あ り ませ ん.Mozilla,AmayaそれにNetscapeの最新バージョンはMathMLをネイティブにサポートしていますが Internet Explorerはサポートしていません. Internet ExplorerやNetscapeの旧バージョンでMathMLを使いたければ,プラグインを使う必要がありま す.これについて次のセクションで説明します. XHTMLドキュメントとMathMLドキュメントの描画 前のセクションではMathMLをXHTMLに埋め込みテキストと数式の混ざったドキュメントを作成する 方法を見てみました.また,この方法はプラグインを使わなければならないブラウザでは使えないこ とも説明しました.このセクションでは,より多くのブラウザで使えるドキュメントの作成方法を説 明します. プラグインを使ってブラウザでMathMLをサポートする方法では,使用している特定のプラグインに 関連する特別のタグをドキュメント中で使わなければなりません.ブラウザがMathMLをネイティブ にサポートしている場合は,特別なタグは必要ありません.当然のことながら,ひとつのドキュメン トを 各描画技術専用バージョンに書き分けたい人はいないでしょう.このЖ決策となるの が,XSLTスタイルシート技術を使って各ブラウザ用にドキュメントを描画前に変換する方法で す.この技術を使うと自動的にプラグインが必要とする特別タグが挿入されます.このЖ決策を実装 したXSLTスタイルシートはW3Cのメインサイトhttp://www.w3.org/Math/XSLからダウンロードできま す. プラグインを使ってブラウザでMathMLをサポートする方法では,使用している特定のプラグインに 関連する特別のタグをドキュメント中で使わなければなりません.ブラウザがMathMLをネイティブ webMathematica User Guide 93 にサポートしている場合は,特別なタグは必要ありません.当然のことながら,ひとつのドキュメン トを 各描画技術専用バージョンに書き分けたい人はいないでしょう.このЖ決策となるの が,XSLTスタイルシート技術を使って各ブラウザ用にドキュメントを描画前に変換する方法で す.この技術を使うと自動的にプラグインが必要とする特別タグが挿入されます.このЖ決策を実装 したXSLTスタイルシートはW3Cのメインサイトhttp://www.w3.org/Math/XSLからダウンロードできま す. 次はMathMLのスタイルシートを使ったドキュメントです. <?xml version="1.0"?> <?xml-stylesheettype="text/xsl" href="http://www.w3.org/Math/XSL/mathml.xsl"?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Basic XHTML+MathMLDocument</title> </head> <body> <h1>XHTML+MathML</h1> <p>Here is a math expression.</p> <math xmlns='http://www.w3.org/1998/Math/MathML'> <msup> <mi>x</mi> <mn>2</mn> </msup> </math> </body> </html> このドキュメントはスタイルシートがサポートしているすべてのブラウザで描画することができま す.現在サポートされているのは次の通りです. Windows † Internet Explorer 6.0(MathPlayerプラグイン付き) † Internet Explorer 5.5(MathPlayerプラグイン付き) † Netscape 7.0 以降 † Amaya(表示MathMLのみ) † Mozilla 1.0以降 Macintosh † Netscape 7.0以降 † Mozilla 1.1以降 Linux/Unix 94 webMathematica User Guide † Netscape 7.0以降 † Mozilla 1.0以降 † Amaya(表示MathMLのみ) アップデート情報はhttp://www.w3.org/Math/XSLをご覧ください.特定の描画技術に関しては後のセク ションで説明します. スタイルシートの絶対参照を使うと,W3Cのサイトにあるスタイルシートを使ったドキュメントをあ るサーバから別のサーバへ移動しても,ローカルに保存して作業を続けても大丈夫です.スタイル シートの絶対参照に関する問題として,ध定の関係でInternet Explorerがד告を出したりスタイルシー トを拒否したりする可能性があります(結果としてMathMLの描画は失敗します).この問題はスタ イルシートへの相対参照を使い,ドキュメントと同じサーバ上にスタイルシートのコピーを置くこと でЖ決できます.例えば,ドキュメントの書き出しを次のようにします. <?xml version="1.0"?> <?xml-stylesheettype="text/xsl" href="/webMathematica/Resources/XSL/mathml.xsl"?> これは,ドキュメントを取り出したサーバのルートと相対的な/webMathematica/Resources/ XSL/mathml.xslというURLにスタイルシートがあることを示しています.これがサーバで可能であ ればInternet Explorerも使うことができますが,常にサーバに最新のスタイルシートを置いておく必要 があります.この方法ではドキュメントを特定のサーバから別のサーバに移動するのもさほど簡単で はなくなります. MathMLのスタイルシートを使った上記のXHTML+MathMLドキュメントにはDOCTYPE宣ؘが入って いません.このためドキュメントの検証ができなくなってしまうので,これは制限事項ということに なります.この他にも描画するXMLシステムに特別の実体名が認ށできないという問題がありま す.Internet ExplorerはMathML DTDにあるすべての実体を受け入れるわけではないのでDTDはありま せん.Ж決方法は名前付きの実体ではなく数値を参照するMathMLを使うことです. 以下は⁡という名前付きの実体を参照する例題です. webMathematica User Guide 95 <math xmlns='http://www.w3.org/1998/Math/MathML'> <mrow> <mi>sin</mi> <mo>⁡</mo> <mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo> </mrow> </mrow> </math> 次の例題では数値⁡が使われています.推薦できるのはこちらです. <math xmlns='http://www.w3.org/1998/Math/MathML'> <mrow> <mi>sin</mi> <mo>⁡</mo> <mrow> <mo>(</mo> <mi>x</mi> <mo>)</mo> </mrow> </mrow> </math> 任意の文字の数値的値を求めたい場合はMathematica の関数ToCharacterCodeを使ってその値が生成 でき,BaseFormを使って16進形式が生成ができます.例えば,アルファの大文字のunicodeの値が求 めたければ,次のようにすることができます. In[1]:= BaseForm@ToCharacterCode@"A"D, 16D 839116 < Out[1]//BaseForm= 96 webMathematica User Guide 適 切 な 数 値 的 値 に 関 す る よ り 詳 し い 情 報 は M a t h M L の サ イ トh t t p : / / w w w . w 3 . o r g / T R / M a t hML2/chapter6.htmlおよびユニコードのサイトhttp://www.unicode.orgをご覧ください. 5.2.2 webMathematica からMathMLを生成する webMathematica アプリケーションの中にはMathMLでフォーマットするのに適した数式を含む結果を 生成するものがあります.このセクションではwebMathematica でMathMLを生成し,前のセクション で説明した描画方法を利用する方法を説明します. webMathematica のメインドキュメントには,MSPFormatのMathMLがフォーマットスタイルの MathMLFormを使ってどのように生成されるのかが説明されています.次は式exprをMathMLにフ ォーマットする方法です. <msp:evaluate> MSPFormat[expr, MathMLForm] </msp:evaluate> MathMLにはMathMLの見え方を指定する表示MathMLとMathMLの意味内容を指定する内容MathMLと いう2つの形があります.MathMLには一般的な拡張メカニズムはないので,内容MathMLでエンコー ドできる情報量は限られています.しかし,Mathematica から生成された表示MathMLがMathematica に送りೊされても問題はӭりません. StandardFormやTraditionalFormのような他のフォーマットスタイルを使うこともできます.この 場合は以下のようにRawMathMLフォーマットタイプが選ばれます. これは表示MathMLの生成方法を示しています. <msp:evaluate> MSPFormat[expr, TraditionalForm,PresentationMathML] </msp:evaluate> 以下では内容MathMLが生成されます. <msp:evaluate> MSPFormat[expr, TraditionalForm,ContentMathML] </msp:evaluate> webMathematica User Guide 97 MathMLで使うツールは一般に表示と内容の両方をサポートします. MathMLを統合した例題 このJSPの例題ではMathMLスタイルシートを使用しています.このページは実際にはJavaScriptを使う IntegrateForm.jspとIntegrateXSLT.jspの2つのJSPを組み合せたものです.標準的なwebMathematica の例題PlotScript.jspとPlotScript1.jspにかなり似ています.これらのMathML例題のソースはweb Mathematica/Examples/MathMLにあります.前述のようにwebMathematica をインストールすると http://localhost:8080/webMathematica/Examples/MathML/IntegrateForm.jsp でこのJSPに接続することがで きます(ご自分のサーバに接続するURLはこれとは多少異なる場合もあります). まず最初に入力ページIntegrateForm.jspのソースを見てみます. <html> <head> <script> function integrate(f) { win = window.open("IntegrateXSLT?fun="+ f.fun.value, "integrate", "toolbar=none,resizeable=yes,width=450,height=350"); } </script> <title>IntegrateTool</title> </head> <body bgcolor="#ffffff"> <h1>IntegrateTool</h1> <form action="IntegrateXSLT"method="post"> <p> Enter a function: <msp:allocateKernel> <input type="text" name="fun" size="24" value = "<msp:evaluate>MSPValue[ $$fun, "Sin[x]^2"] </msp:evaluate>" > </msp:allocateKernel> </p> <br/> <input type="button"value="Integrate"onClick="integrate(this.form)"/> </form> </body> </html> 98 webMathematica User Guide これは標準的なHTMLです.入力ボタンがクリックされると入力フィールドから入力を抽出する JavaScript関数が呼ばれJSPIntegrateXSLT.jspを呼びます.このJSPは新しいウィンドウで開かれま す.下記はIntegrateXSLT.jspの内容です. <?xml version="1.0"?> <?xml-stylesheettype="text/xsl" href="/webMathematica/Resources/XSL/mathml.xsl"?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>IntegrateResult</title> </head> <body> <msp:allocateKernel> <msp:evaluate> MSPPageOptions["ContentType"-> "text/xml"]; res = Null; If[ MSPValueQ[$$fun], fun = MSPToExpression[$$fun]; int = Integrate[ fun, x]; If[ Head[int ] === Integrate, int = "Unknown"]]; </msp:evaluate> <p> Integration of a function, formatting into MathML. </p> <table border="2" rules="all"> <thead> <tr> <th>Function</th><th>Integral</th> </tr> </thead> <tr> <td align="center"><msp:evaluate>MSPFormat[fun, MathMLForm]<msp:evaluate></td> <td align="center"><msp:evaluate>MSPFormat[int, MathMLForm]<msp:evaluate></td> </tr> </table> </msp:allocateKernel> </body> </html> webMathematica User Guide 99 これはMathMLのスタイルシートを使っています.このスタイルシートはwebMathematica Webアプリ ケーションのディレクトリXSLにインストールされていると仮定されています.出力のコンテントタ イプはtext/xmlにध定されているて,Mathematica で行う必要のあるב算が行われます. この例題がうまくいったらブラウザのメニュー項目「View Source(ソース)」を使ってみるのも面 白いかもしれません.MathMLがXHTMLに自然に溶け込んでいるのが分かるでしょう.ドキュメント に各々の数式の物理的なサイズが宣ؘされていないことにも気付かれるでしょう.サイズはドキュメ ントがブラウザに実際に描画されて初めて分かるので,これは大変便利です. webMathematica が配信する例題の実際のコードは,MathPlayerを直接使った描画方法やXHTML+ MathMLの生成方法等に代るものを含むのでもう少し複ܚです.しかし,上で示したMathMLスタイル シートを使うコードが最も一般的なЖ決策です.その他はデモのために収ຉしたものです. 5.2.3 webMathematica にMathMLを送信する webMathematica の例題の多くはユーザが入力できるようにXHTML形式で提供されています.これに よる制限も生まれます.例えば入力は1次元のシンタックスでなければなりません.また,実際は特 殊文字も使えません.また,特別なパレットを使って必要事項を入れるだけのテンプレートを入力す ることが望ましいことがよくあります.これらはMathematica のフロントエンドが提供する機能 で,Webブラウザで使用することはできません. Internet Explorerのような純粋なブラウザに代替入力メカニズムを提供することはできませんが,プラ グインを使うとより強力な機能が使えます.これに適したプラグインのひとつにInput Controlがあり ます.これはWebEQのツールセットに含まれています.WebEQは動的な数学を含むWebページを作る ためのツールセットです.詳しくは「付ຉ」の「MathMLの技術」をご覧ください. MathML入力の例 これは入力にWebEQを使うJSPの例です.これは実際はJavaScriptを使うIntegrateWebEQ.jspと Integr ateX SL T. jspの 2つのJS Pを組 み合せたものです.2番目のJS Pは前の例でも使ったもの で,MathMLの出力を描画します.この2つのJSPは標準的なwebMathematica の例題PlotScript.jspと PlotScript1.jspに極めてսく作られています.前述のようにwebMathematica をインストールすると http://localhost:8080/webMathematica/Examples/MathML/IntegrateWebEQ.jsp 経由でこのJSPに接続するこ とができます(ご自分のサーバに接続するURLはこれとは多少異なる場合もあります).この場 合,ご使用のブラウザにWebEQがインストールしてあることが前提になっています.WebEQがイン ストールされていなければこの例題は動きません. IntegrateWebEQ.jspのテキストは以下をご覧ください. 100 webMathematica User Guide <html> <head> <script> function integrate(f) { win = window.open("IntegrateOutput?fun="+ f.fun.value, "integrate", "toolbar=none,resizeable=yes,width=450,height=350"); } </script> <title>IntegrateTool</title> </head> <body bgcolor="#ffffff"> <h1>IntegrateTool</h1> <p> Enter a function: <msp:allocateKernel> <applet code="webeq3.editor.InputControl" height=150width=400 name="editor"> <param name="toolbar" value=",<tb><btn>SUP</btn><btn>FRAC</btn><btn>SQRT</btn> <btn>SIN</btn><btn>COS</btn><btn>TAN</btn></tb>"> <param name=eq value= "<msp:evaluate>If[MSPValueQ[$$mml],$$mml,"<math><mrow></mrow></math>"] </msp:evaluate>"> </applet> </msp:allocateKernel> </p> <br/> <form action="IntegrateXSLT"method="post"> <input type="button"value="Integrate"onClick="integrate()"/> </form> </body> </html> これは,入力するのにXHTMLの要素ではなくWebEQが使われている点を除いてはIntegrateForm.jspと ఫ常によく似ています. webMathematica User Guide 101 ここで重要な点に,IntegrateXSLT.jspはWebEQからのMathML入力形式とその他の形式からのテキ スト入力の両方を受け入れることが挙げられます.入力処理関数のMSPToExpressionはMathMLと テキスト入力の両方を受け入れるので,これが可能になっています.MSPToExpressionはまた引数 のセキュリティチェックも行い,フィルタされていない危؉なコマンドをMathematica が処理するこ とをഛぎます. この例題を扱うクライアントマシンはW ebEQをインストールしたものでなければなりませ ん.WebEQの入手とインストールについてはhttp://www.dessci.com/webmath/webeq/features.stmをご覧 ください.この例題はWebEQアーカイブをサーバから配信するように簡単に変更できます. 5.3 SVG SVGはXML中の2Dグラフィックスを表現するلؘです.SVGもMathMLと同じようにW3Cが公式に推 薦しています(http://www.w3.org/Graphics/SVG/).SVGはwebMathematica のユーザに数多くの利点を提 供します.まず,ベクトルベースのフォーマットなので結果が一般的な画像形式によるよりもژ品ޑ であることがしばしばあります.これは,印刷を考慮した際に特に重要な点です.次に,いろいろな タイプの画像で,実際のファイルサイズが特にイメージフォーマットに比べて小さくなります.さら に,SVGは数多くの動的・インタラクティブな機能をサポートします.Mathematica はグラフィック スからSVGを生成することができます.このセクションではSVGを使ったWebの使い方の例を見てみ ます.このセクションの例題を見るためにはSVGをサポートするブラウザを使う必要があります.こ れにはネイティブサポートを提供するAmayaブラウザ(http://www.w3.org/Amaya/)を使うか,あるいは Adobeのプラグイン(http://www.adobe.com/svg)を使うとよいでしょう. webMathematica には,Adobeのプラグインに接続するために必要なタグを加えるサポートをするユー ティリティパッケージが付いています.このセクションではwebMathematica でのこのパッケージの使 い方についても簡単な例題で説明します. 5.3.1 SVGを使ったプロット この例題のソースはwebMathematica/Examples/SVG/Plot.jspにあります.これは基本的な例題 Plot.jspに大変よく似ています.前述のようにwebMathematica をインストールすると http://localhost:8080/webMathematica/Examples/SVG/Plot.jspでこのJSPに接続することができます(ご自 分のサーバに接続するURLはこれとは多少異なる場合もあります). 以下はソースからの抜粋です. 102 webMathematica User Guide <form action="Plot.jsp"method="post"> <msp:allocateKernel> <msp:evaluate> Get["MSP`SVG`"]; </msp:evaluate> Enter a function: <input type="text" name="fun" size="24" value = "<msp:evaluate>MSPValue[ $$fun, "Sin[x]^2"] </msp:evaluate>" > Enter a number: <input type="text" name="x1" size="24" value = "<msp:evaluate> MSPValue[ $$x1, "10"] </msp:evaluate>"> <br> <br> <msp:evaluate> MSPBlock[ {$$fun, $$x1}, SVGShow[ Plot[$$fun, {x,0,$$x1}]]] </msp:evaluate> <hr> <input type="submit"name="btnSubmit"value="Evaluate"> </msp:allocateKernel> </form> これは基本的な例題Plot.jspにఫ常に似ています.違いは,こちらではSVGのサポートパッケージが ロードされており,SVGのプロット関数SVGShowが使われている点です.これがうまくできたな ら,Adobeのプラグインが提供する機能を使ってみたいと思われるでしょう. 5.3.2 SVGアニメーション SVGは多くのアニメーションとインタラクション機能をサポートしています.この例ではSVGのアニ メーションの使い方を見てみましょう. この例題のソースはwebMathematica/Examples/SVG/NDSolvePlot.jspにあります.前述のように webMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/SVG/NDSolvePlot.jspでこのJSPに接続することができます(ご自分のサーバに接続するURLはこれとは多少異なる 場合もあります). ソースには方程式,始点と終点,初期条件を集めるたくさんの入力フィールドをध定するHTMLフ ォームが含まれています.これらは,微分方程式をЖき結果をSVGでフォーマットしたプロットにし てೊす関数にフィードされます.このSVGは関数SVGDisplayを使って表示されます.SVGDisplayは パッケージMSP`SVG`で定義されています.以下はプロットを挿入するコードです. webMathematica User Guide 103 <msp:evaluate> MSPBlock[ {$$eqn, $$t0, $$init1, $$init2, $$t1}, svg = NDSolveToSVG[$$eqn, {$$init1, $$init2}, {$$t0,$$t1}]; SVGDisplay[ svg, {400, 300}]] </msp:evaluate> SVGを作る関数の実際の定義は下記をご覧ください.これは微分方程式をЖき結果をプロットし,そ れから関数XML`SVG`GraphicsToSymbolicSVGを使って結果のSVGを表すシンボリックXMLを生 成します.次に,結果のプロットを表す点を求め,これらの点を使ってこれらの点上を動くञいボー ルのSVGのアニメーションを作ります.このアニメーションがSVGに挿入され新しい結果を形成 し,プロットされます. NDSolveToSVG[eqn_, init_, lims_List]:= Module[ {sol, dep, t, int, t0, t1}, {o,dep,t} = EquationToVariables[eqn] ; {t0, t1} = lims ; sol=NDSolve[Append[init,eqn],dep,{t,t0,t1}]; {int0, int1} = Part[dep /. First[ sol],1,1]; If[ t0 < int0, t0 = int0]; If[ t1 > int1, t1 = int1]; p=ParametricPlot[{dep[t],dep'[t]}/. sol,{t,t0,t1},ImageSize -> 400]; xml = XML`SVG`GraphicsToSymbolicSVG[p]; pts="M"<> First[Cases[ xml, XMLElement["polyline",{"fill"-> _,"points" -> x_},_]->x, Infinity]]; newElem=XMLElement["circle", {"cx"->"0","cy"->"0","r"->".1","fill"->"red", "stroke"->"blue", "stroke-width"->"0.01"}, {XMLElement[ "animateMotion",{"dur"->"6s","repeatCount"->"indefinite", "rotate"->"auto","path" -> pts},{}]}]; newXML=xml/.x:XMLElement["polyline",___] -> Sequence[x,newElem]; ExportString[newXML,"XML"] ] SVGを使ってインタラクティブな結果を得る方法は他にもたくさんあります.例えば,JavaScriptは SVGツリーとインタラクトしこれを操作して,マウスがグラフィック上に来たときにポップアップす るようなインタラクティブな機能をサポートすることができます. 104 webMathematica User Guide 5.4 HTMLのフォーマット webMathematica が提供するHTMLのテンプレート技術の利点のひとつに,ほとんどの場合Mathematica のプログラムを使ってHTML形式を生成してみる必要がないことがあります.事実,HTMLのフ ォーマットに関連する問題の多くは標準的なツールが使えるWebのデザイナーに任せることができま す.しかし,Mathematica の式にHTMLをフォーマットできる関数が適用できると便利なこともありま す.これは特にHTMLの表の場合に顕著です.webMathematica にはTableフォーマット関数をサポート するHTMLユーティリティパッケージが付いているので,HTMLをフォーマットすることができま す.このセクションではこのHTMLのフォーマットについて見ていきます.出力に関するより一般的 な説明は「 評価のフォーマット」をご覧ください. 「HTML関数」で生成されたものではないHTMLをೊしたい場合は,自分でHTMLを構築し下記の例 のようにこれをೊさなければなりません. <msp:evaluate> StringJoin[ "<b>", ToString[ x], "</b>"] </msp:evaluate> 5.4.1 HTML関数 HTML関数はwebMathematica のレイアウトの一ಊであるパッケージMSP`HTML`に含まれていま す.このパッケージはwebMathematica がӭ動されると自動的にロードされるので,これを手動でロー ドする必要はありません.しかし,このパッケージをwebMathematica とは関係なく使いたい場合 は,これをMathematica のAddOns/Applicationsディレクトリにコピーしてください.コピーの仕方 は前のセクションをご覧ください. HTMLTableForm 上記のようにMSP`HTML`パッケージはwebMathematica で使うことができ,通常のMathematica にイ ンストールすることもできます.パッケージは以下のようにロードします. In[1]:= Needs@"MSP`HTML`"D 関数HTMLTableFormは入力を受け入れ,これをHTMLの表にフォーマットします. In[2]:= HTMLTableForm@ 88a, b, c<, 8d, e, f<<D webMathematica User Guide 105 Out[2]= <table border='1'> <tr> <td>a</td> <td>b</td> <td>c</td> </tr> <tr> <td>d</td> <td>e</td> <td>f</td> </tr> </table> これはTableFormのTableHeadingsオプションと同じように働くTableHeadingsオプションを取り ます. In[3]:= HTMLTableForm@ 88a, b, c<, 8d, e, f<<, TableHeadings Ø 88r1, r2<, 8c1, c2, c3< <D Out[3]= <table border='1'> <th/> <th>c1</th> <th>c2</th> <th>c3</th> <tr> <th>r1</th> <td>a</td> <td>b</td> <td>c</td> </tr> <tr> <th>r2</th> <td>d</td> <td>e</td> <td>f</td> </tr> </table> 各要素に特別の書式ध定を施したければ第2要素として書式ध定関数を与えることができます.書式 ध定関数は文字列をೊさなければなりません.以下ではすべての要素がMathMLにフォーマットされ ています. In[4]:= HTMLTableForm@ 88x ^ 2, Sin@xD<<, ExportString@#, "MathML"D &D 106 webMathematica User Guide Out[4]= <table border='1'> <tr> <td><math xmlns='http://www.w3.org/1998/Math/MathML'> <semantics> <msup> <mi>x</mi> <mn>2</mn> </msup> <annotation-xml encoding='MathML-Content'> <apply> <power/> <ci>x</ci> <cn type='integer'>2</cn> </apply> </annotation-xml> </semantics> </math></td> <td><math xmlns='http://www.w3.org/1998/Math/MathML'> <semantics> <mrow> <mi>sin</mi> <mo>⁡</mo> <mo>(</mo> <mi>x</mi> <mo>)</mo> </mrow> <annotation-xml encoding='MathML-Content'> <apply> <sin/> <ci>x</ci> </apply> </annotation-xml> </semantics> </math></td> </tr> </table> HTMLTableFormのデフォルトの書式ध定関数はHTMLFormatです.これについては次項をご覧く ださい. HTMLTableFormの文字列の引数はどれもすでにフォーマットが施されており,それ以上のフォーマ ットはされません.このため,これはMSPShowやMSPFormatのような他のMSP関数の出力を取る ことができます. HTMLFormat 上記のようにMSP`HTML`パッケージはwebMathematica で使うことができ,通常のMathematica にイ ンストールすることもできます.パッケージは以下のようにロードします. In[1]:= Needs@ "MSP`HTML`"D webMathematica User Guide 107 関数HTMLFormatは便利なフォーマッティング関数をHTMLに持ち込みます.これは次に示すよう に,数値のような小さな式をフォーマットするのに適しています. In[2]:= HTMLFormat@ x ^ 2D Out[2]= x<sup>2</sup> In[3]:= HTMLFormat@10. !D Out[3]= 3.6288 10<sup>6</sup> すべてがInputFormになるので,大きな式のフォーマットにはあまり適していません. In[4]:= Out[4]= In[5]:= Nest@ 1 ê H1 - #L &, x, 5D 1 ---------------------------------------1 1 - -------------------------------1 1 - -----------------------1 1 - ---------------1 1 - -------1 - x HTMLFormat@% D Out[5]= 1 - 1 - 1 - 1 - 1 - x<sup>-1</sup><sup>-1< up>-1</sup><sup>-1</sup> 大きな式には書式ध定関数MSPFormatのバージョンのいずれかを使って画像形式かMathML形式で 結果を得るとよいでしょう. HTMLSelect 上記のようにMSP`HTML`パッケージはwebMathematica で使うことができ,通常のMathematica にイ ンストールすることもできます.パッケージは以下のようにロードします. In[1]:= Needs@ "MSP`HTML`"D 関数HTMLSelectはwebMathematica で選択タグを生成する便利な方法を提供します.この関数は異な るオプションのリストと,選択が送る際に使う名前を取ります.操作は次のようになります. In[2]:= HTMLSelect@ 8"a", "b", "c"<, "arg1"D 108 Out[2]= webMathematica User Guide <select name='arg1'> <option value='1'>a<êoption> <option value='2'>b<êoption> <option value='3'>c<êoption> <êselect> オプションSelectedOptionsを使って選択することもできます.この例では'a'というラベルが付いた オプションが選ばれています. In[3]:= Out[3]= HTMLSelect@ 8"a", "b", "c"<, "arg1", SelectedOptions Ø aD <select name='arg1'> <option value='1' selected='selected'>a<êoption> <option value='2'>b<êoption> <option value='3'>c<êoption> <êselect> デフォルトでオプションタグの値は自動的に選ばれます.引数を使ってध定することもできます. In[4]:= Out[4]= HTMLSelect@ 8"a", "b", "c"<, 8"x", "y", "z"<, "arg1"D <select name='arg1'> <option value='x'>a<êoption> <option value='y'>b<êoption> <option value='z'>c<êoption> <êselect> オプションSelectedValuesは値に基づいた選択に使われます. In[5]:= Out[5]= HTMLSelect@ 8"a", "b", "c"<, 8"x", "y", "z"<, "arg1", SelectedValues Ø yD <select name='arg1'> <option value='x'>a<êoption> <option value='y' selected='selected'>b<êoption> <option value='z'>c<êoption> <êselect> 選択オプションは,値のリストを使って複数の選択値をध定することができます. In[6]:= Out[6]= HTMLSelect@ 8"a", "b", "c"<, 8"x", "y", "z"<, "arg1", SelectedValues Ø 8x, y<D <select name='arg1'> <option value='x' selected='selected'>a<êoption> <option value='y' selected='selected'>b<êoption> <option value='z'>c<êoption> <êselect> webMathematica User Guide 109 値が与えられていなければ,SelectedValuesオプションは数値を使います. In[7]:= Out[7]= HTMLSelect@ 8"a", "b", "c"<, "arg1", SelectedValues Ø 83<D <select name='arg1'> <option value='1'>a<êoption> <option value='2'>b<êoption> <option value='3' selected='selected'>c<êoption> <êselect> HTMLCheckBox 上記の説明のようにMSP`HTML`パッケージはwebMathematica で使うことができ,普通のMathematica にインストールすることもできます.このパッケージは次のようにロードすることができます. In[1]:= Needs@ "MSP`HTML`"D 関数HTMLCheckBoxは,webMathematica で入力をチェックするタグを生成する便利な機能を提供し ます.この関数はチェックボックスが引数として送信されるとその名前を使います.操作は次のよう になります. In[2]:= HTMLCheckBox@ boxnameD Out[2]= <input type='checkbox' name='boxname'ê> 第2引数があった場合は,ボックスをチェックするかどうかを決定するのに使われます.次の例では チェックボックスがチェックされています. In[3]:= HTMLCheckBox@boxname, 10 > 5D Out[3]= <input type='checkbox' name='boxname' checked='checked'ê> 5.4.2 webMathematica の例題 HTML書式ध定パッケージを使うたくさんwebMathematica の例題が提供されています.このセクショ ンではそれを見てみます. 110 webMathematica User Guide 表のフォーマット 最初の例は簡単なTable.jspです.このソースはwebMathematica/Examples/HTMLにあります.前 述のようにwebMathematica Webアプリケーションをインストールすると http://localhost:8080/webMathematica/Examples/HTML/Table.jspでこのJSPに接続することができます(ご自分のサーバに接続す るURLはこれとは多少異なる場合もあります). 2番目の例題はRegressTable.jspです.このソースはwebMathematica/Examples/HTMLにありま す.前述のようにwebMathematica Webアプリケーションをインストールすると http://localhost:8080/webMathematica/Examples/HTML/RegressTable.jspでこのJSPに接続することができます(ご自分のサーバに 接続するURLはこれとは多少異なる場合もあります). <msp:evaluate> Needs["Statistics`LinearRegression`"]; Needs["Statistics`Common`RegressionCommon`"]; </msp:evaluate> <msp:evaluate> data = {{0.055, 90}, {0.091, 97}, {0.138, 107}, {0.167, 124}, {0.182, 142}, {0.211, 150}, {0.232, 172}, {0.248, 189}, {0.284, 209}, {0.351, 253}}; regress = Chop[ Regress[data,{1, x^2}, x], 10^-6]; pTable = ParameterTable/. regress ; aTable = ANOVATable/. regress ; rSq = RSquared /. regress ; aSq = AdjustedRSquared/. regress ; eVar = EstimatedVariance/. regress ; </msp:evaluate> <br/> <msp:evaluate> HTMLTableForm[MSPShow[ ListPlot[ data, Frame -> True]], TableHeadings-> {"Data to be fitted"}] </msp:evaluate> <br/> <msp:evaluate> HTMLTableForm[HTMLTableForm[pTable], TableAttributes-> {}, TableHeadings->{"ParameterTable"}] </msp:evaluate> パッケージは上記のようにロードされます.サブパッケージも同様にロードしなければなりませ ん.データが割り当てられ(通常はこれは何らかの動的な方法でロードされます),回帰Ж析が行わ れます.続いてHTMLTableFormが2回使用されます.1回目でMSPShowの結果がヘディング付きで 表にされます.これはあるものにヘッディングや縁取りを付ける便利な方法です.2回目でパラメー タテーブルpTableが表にされます.この表自体が,ヘッディングが付くように別の表に入れられま す. webMathematica User Guide 111 パッケージは上記のようにロードされます.サブパッケージも同様にロードしなければなりませ ん.データが割り当てられ(通常はこれは何らかの動的な方法でロードされます),回帰Ж析が行わ れます.続いてHTMLTableFormが2回使用されます.1回目でMSPShowの結果がヘディング付きで 表にされます.これはあるものにヘッディングや縁取りを付ける便利な方法です.2回目でパラメー タテーブルpTableが表にされます.この表自体が,ヘッディングが付くように別の表に入れられま す. 選択範囲のフォーマット H TMLSelectの使用法の例題はSelect.jspにあります.これのソースはwebMathematica/ Examples/HTMLにあります.前述のようにwebMathematica Webアプリケーションをインストールす るとhttp://localhost:8080/webMathematica/Examples/HTML/Select.jsp でこのJSPに接続することができま す(ご自分のサーバに接続するURLはこれとは多少異なる場合もあります).以下はこのソースで す. 112 webMathematica User Guide <form action="Select.jsp"method="post"> <msp:allocateKernel> <msp:evaluate> days = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"}; day = Null; If[ MSPValueQ[$$daySelected], dayPT = MSPToExpression[$$daySelected]; day = Part[ days, dayPT]]; </msp:evaluate> <msp:evaluate> HTMLSelect[days, daySelected,day] </msp:evaluate> <msp:evaluate> If[ day =!= Null, dayPT = Mod[ dayPT+1,7,1]; "The day after the day selected is " <> Part[ days, dayPT]] </msp:evaluate> </msp:allocateKernel> <br> <br> <input type="submit"name="btnSubmit"value="Evaluate"> </form> この例題では入力パラメータの$$daySelectedがੴべられ,どの日付けが選ばれたかが判別されま す.2番目の評価で実際に選んだタグが付けられます.これで,その簡単さが分かります.最後の評 価で変数dayPTが増分され,7に対するその係数がオフセット1で取られて選ばれた日の次の日がב算 されます. 113 webMathematica User Guide 5.5 Java APIを使う webMathematica の目的はWebサーバでMathematica のב算が行えるようにすることです.このような ב算には,数値ב算や数式処理のようにMathematica が適している多くのタスクのどれかひとつが含 まれるのが一般的です.しかし,時にはwebMathematica のב算にMathematica 以外のものを呼び出し て,ઉ加的な機能を補いたい場合もあります.このための最も便利な方法はJavaを使うことです.普 通のインタラクティブなMathematica はJ/Link ツールキットを使ってఫ常に簡単にJavaを呼び出すこと ができますし,webMathematica もこれと同じことができます.Java APIの使用やMathematica 内ಊから Javaオブジェクトを参照することに関するより詳しい情報は,J/Link のドキュメントをご覧くださ い. webMathematica には2つのクラスのコールがあります.一方はサーバ関連のAPIでもう一方はより一般 的なJava APIです.詳しくは以下をご覧ください. 5.5.1 サーバAPI 特定のwebMathematica サイトの操作や詳細を制御するサーバ独自のAPIの呼出しは,次に挙げたサー バオブジェクトの定義で簡単に行うことができます. $ServletRequest このリクエストのためのHttpServletRequestオブジェクト $ServletResponse このリクエストのためのHttpServletResponseオブジェクÖ ト $ServletConfig このサーバのためのServletConfigオブジェクト これらはすべてJ/Linkが持っていて,典型的なJ/Link の方式で使うことができる,Javaオブジェクトの 参照です.$ServletRequestはサーブレットHTTPServletRequestオブジェクトへの参照を保持しま す.$ServletResponseはサーブレットHTTPServletResponseオブジェクトへの参照を保持しま す.そして$ServletConfigはServletConfigオブジェクトへの参照を保持します.これらのオブジェ クトのいろいろなメソッドについてはサーブレットAPIに関するಊ分で触れてあり,その他のサーブ レットに関するಊ分でも触れています.例えば,リクエストオブジェクトにはgetRemoteAddrとい うメソッドがあり,このメソッドはMSPで次のように使うことができます. <msp:evaluate> $ServletRequest@getRemoteAddr[] </msp:evaluate> 114 webMathematica User Guide これがリクエストを送ったクライアントのIPアドレスをೊします.これはCGI変数REM OTE_ ADDRに相当するものです. Request.jspにはもっと複ܚな例があります.これのソースはwebMathematica/Examplesにありま す.前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/Request.jspでこれに接続することができます(ご自分のサーバに接続するURLはこれとは多少異なる 場合もあります).この例題はHTTPのリクエストから名前と値を抽出します. 特定のページを処理しているときに作られるJavaオブジェクトの参照は,ページ全体の処理が終わる とЖ放されます.カーネルの初期化の際に作られるJavaオブジェクトはЖ放されず,ひとつのコール から次のコールに生き残るJavaオブジェクトを保持するメカニズムを提供します.Javaオブジェクト は自動的にЖ放されるのですが,それでもなお,すべてのJavaオブジェクトをJavaBlockへのコール の中で作成するか,ReleaseObjectを明示的に使うかすることをお勧めします.J/Link のドキュメン トにJavaBlockとReleaseObjectに関する詳しい説明があります. 5.5.2 その他のJava API webMathematica で使えるJavaのAPIはこの他にもたくさんあります.その中にはデータベースの接続 性用,XMLの処理用,スピーチの生成用,データ形式I/O用,HTTPを使った他のWebサービスの呼出 し用等のAPIがあります.これらすべてがwebMathematica ですぐに使えます.これらに関する詳細 は,適当なJavaの参考文献をご覧ください.例えばデータベース技術については http://java.sun.com/docs/books/tutorial/jdbc/index.html のチュートリアルが役に立ちます. 5.6 データのロードとב算 Mathematica にはデータをロードするさまざまな関数が入っています.これらの関数は関数 Importか ら使うことができます.Importはコンマやタブを区切りにしたテキストデータやグラフィックス,科 学,サウンド,XMLのようにより特殊なフォーマットまでをサポートします.バイナリデータは関数 Experimental`BinaryImportでロードすることができます.使いたいデータ形式がMathematica では 直接サポートされていない場合でも,前のセクションで説明したJava APIを使ってデータがロードで きるかもしれません. データをロードする技術を開発するためには,データをロードする関数がどのように動作するのかを 理ЖするためにインタラクティブなMathematica を使うのがよいでしょう.こうするとご自分の Webアプリケーションにデータのロードをઉ加することができます.まずはじめにデータのソースを 決める必要があります.以下のセクションではいくつかの可能性を検討します. webMathematica User Guide 115 5.6.1 ファイルのI/O データファイルがwebMathematica のサーバが動いているコンピュータのファイルシステムから入手で きる場合は,そのファイルをImportのようなコマンドで読むことができます.このためにはデータフ ァイルの名前と場所が指定されなければなりません.指定方法はいくつかあります.ひとつはファイ ルをディレクトリに入れ,このディレクトリまでの完全パス名をध定する方法です.この方法を取る と,ディレクトリの名前を変更した場合に,この名前を使っている全スクリプトを書き換えなければ ならないので大変不便です.ディレクトリ名を初期ध定パラメータでध定するとこの点が改善されま す.下記に示すようにMSP.confでパラメータのKernelInitializationを使うと,こうすることができま す. KernelInitialization=MyApplication`DataDirectory="C:¥¥Work¥¥Data" これでMathematica のシンボルMyApplication`DataDirectoryに"C:¥Work¥Data"を割り当てま す.ここでは完全コンテキスト名を使っていますが,シンボルがカーネルのクリーニングメカニズム で消去されてしまわないためにはこうする必要があるのです.この後これをwebMathematica のב算に ロードします.ロードの方法は以下の例をご覧ください. <msp:evaluate> data = Import[ ToFileName[MyApplication`DataDirectory],"file.dat", "Table"]; </msp:evaluate> データファイルをMathematica のパスध定$Pathに置く方法も考えられます.これが次に示す例題 Data1.jspのアプローチです.データファイルをスクリプトと同じディレクトリに置き,MSPScript Directory[]を使う方法もあります(下記をご覧ください). <msp:evaluate> data = Import[ ToFileName[MSPScriptDirectory[]], "file.dat", "Table"]; </msp:evaluate> これは前に説明したXMLの例題Phone.jspで使った方法です.MSPScriptDirectory[]を使うのは データとスクリプトが同じディレクトリに置かれるので特に便利な方法です.こうするとWebのアプ リケーション全体をあるサーバから別のサーバへ最小限のध定で移動することができます.この方法 の欠点は,JSPの側から見るとデータファイルがサーバへの直接のリクエストでロードされるの で,データファイルに特殊な情報がない場合にしか使えない点です.ある種の情報が各リクエストへ のೊ信のみで使われるのに適している場合がこれに当たるでしょう. 116 webMathematica User Guide 5.6.2 HTTPアップロード webMathematica サーバにデータをロードするまた別の方法に,HTTPのリクエストを使ってクライア ントマシンから送るというものがあります.webMathematica には関数MSPGetUploadFileを使ってこ れをサポートするツールが含まれています.これは以下に示す例題Upload.jspでご覧ください. 5.6.3 データベースの接続 webMathematica でのב算に使うデータの重要なソースにデータベースがあります.Javaのデータベー ス接続ツールボックスJDBCを使って,上記のようにJavaをコールしてデータベースとインタラクトす ることができます.WindowsではMathematica Database Access Kitを使うことができます. 5.6.4 Webサービス Mathematica のב算のための最後のデータソースは他のWebサイトです.現在のところ,これは URLの接続を開き,リクエストを送ってその応答を読むことで行います.これも上記のようなJavaへ のコールで行えます.データがXML形式で入手できるなら,XMLのセクションで説明したように XML`Parser`XMLGetを使うこともできます. 5.6.5 データの例 以下はwebMathematica でデータを使う例題集です. データのロード:Load.jsp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/Data/Load.jspでこのJSPに接続することができます(ご自分のサーバに接続するURLはこれとは多少異なる 場合もあります). この例題はMathematica のパッケージのロード方法とサーバに保存されているファイルの読み方を示 しています.データはデータの平滑化アルゴリズムで処理され,2つのプロットが作られます.この ページのソースはwebMathematica/Examples/Data/Load.jspにあります.以下はformタグを示し ているಊ分です. webMathematica User Guide 117 <form action="Load.jsp"method="post"> <msp:allocateKernel> <msp:evaluate> Needs[ "Graphics`MultipleListPlot`"]; Needs[ "Statistics`DataSmoothing`"]; </msp:evaluate> <msp:evaluate> data = Flatten[ N[ Import[ "Data/DataFile1.dat"]]]; term = 4; If[ MSPValueQ[$$term], term = MSPToExpression[$$term]]; </msp:evaluate> <msp:evaluate> dataSmooth = MovingAverage[data, term]; MSPShow[ MultipleListPlot[data,dataSmooth, PlotJoined ->{False,True}, SymbolShape-> Point, SymbolStyle -> {{PointSize[0.008],Hue[0]}, {PointSize[0.001]}}, ImageSize -> 600]] </msp:evaluate> <br /> <br /> Number of smoothing terms: <input type="text" name="term"size="3" value="<msp:evaluate>MSPValue[$$term, "3"]</msp:evaluate>" /> </msp:allocateKernel> <br /> <br /> <input type="submit"name="btnSubmit"value="Evaluate"> </form> この例題ではmsp:evaluateタグが2つのMathematica パッケージをロードするのに使われていま す.パッケージは常にそれ自身のタグを使ってロードするようにするとよい練習になるでしょう.次 のmsp:evaluateタグは,Importコマンドを使ってデータセットData/DataFile1.datをロードしま す.これはMathematica $Path上のデータファイルを探し,MSPScriptsディレクトリの中のDataデ ィレクトリを見付けます.MSPScriptsディレクトリはデフォルトではwebMathematica/WEBINFにあります.ご自分のwebMathematica Webアプリケ-ションの内ಊを見てデータファイルの場所を 確かめるとよいでしょう.例題は移動平均をב算し,もとのデータと平滑化したデータをプロットし ます.項数が変更できるように,これらはすべてform要素の中に置かれます. 118 この例題ではmsp:evaluateタグが2つのMathematica webMathematica User Guide パッケージをロードするのに使われていま す.パッケージは常にそれ自身のタグを使ってロードするようにするとよい練習になるでしょう.次 のmsp:evaluateタグは,Importコマンドを使ってデータセットData/DataFile1.datをロードしま す.これはMathematica $Path上のデータファイルを探し,MSPScriptsディレクトリの中のDataデ ィレクトリを見付けます.MSPScriptsディレクトリはデフォルトではwebMathematica/WEBINFにあります.ご自分のwebMathematica Webアプリケ-ションの内ಊを見てデータファイルの場所を 確かめるとよいでしょう.例題は移動平均をב算し,もとのデータと平滑化したデータをプロットし ます.項数が変更できるように,これらはすべてform要素の中に置かれます. この例題の弱点のひとつは,それぞれのב算についてデータをデータファイルからロードしなければ ならない点です.データを何らかの形で保存しておければ便利でしょう.また,クライアントから データがロードできるようだと便利でしょう.これについては次のセクションで考えましょう. データのアップロード:Upload.jsp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/Data/Upload.htmlでこの例題に接続することができます(ご自分のサーバに接続するURLはこれとは多少異 なる場合もあります). この例題ではユーザが積分する関数を入力することができます.結果はタイプセットのシステムでフ ォーマットされ,画像として保存されます.このページのソースはwebMathematica/Examples/ Data/Upload.htmlとwebMathematica/Examples/Data/Upload.jspにあります.Upload.htmlの 内容は以下の通りです. <html> <head> <title>UploadFile</title> </head> <body> <form method=postenctype="multipart/form-data"action="Upload.jsp"> <p> Enter a file to upload: </p> <input type="file" size=40 name="file"> <br /> <br /> <input type="reset"value="Clear"> <input type="submit"value="Submit"> </form> <i> To generate suitable data, <a href="DataGenerate.jsp">clickhere</a> </i> </body> </html> まず,これがHTMLページであることにご注目ください.ここにはJavaやMathematica は挿入されてい ません.サーブレットコンテナはJPSを配信するのと同じようにHTMLのページを配信します.どの ページもwebappの同じディレクトリに一緒に入れることができます.このwebappには画像や動画等が 入っているその他のファイルも入れることができます.このファイルにはmultipart/form-dataの enctype属性を使ってデータファイルを送信するध定を行うform要素が1つとタイプfileのinput要素 があります.送信ボタンがクリックされると,フォームはファイルと一緒にUpload.jspに送られま す.以下はUpload.jspから選んだものです. webMathematica User Guide 119 まず,これがHTMLページであることにご注目ください.ここにはJavaやMathematica は挿入されてい ません.サーブレットコンテナはJPSを配信するのと同じようにHTMLのページを配信します.どの ページもwebappの同じディレクトリに一緒に入れることができます.このwebappには画像や動画等が 入っているその他のファイルも入れることができます.このファイルにはmultipart/form-dataの enctype属性を使ってデータファイルを送信するध定を行うform要素が1つとタイプfileのinput要素 があります.送信ボタンがクリックされると,フォームはファイルと一緒にUpload.jspに送られま す.以下はUpload.jspから選んだものです. <msp:allocateKernel> <msp:evaluate> Needs[ "Graphics`MultipleListPlot`"]; Needs[ "Statistics`DataSmoothing`"]; </msp:evaluate> <msp:evaluate> file = "FileName" /. MSPGetUploadFile[]; data = Flatten[ N[ Import[ file, "Table"]]]; term = 4; </msp:evaluate> <msp:evaluate> If[ StringQ[ file], dataSmooth = MovingAverage[data, term]; MSPShow[ MultipleListPlot[data,dataSmooth, PlotJoined ->{False,True}, SymbolShape-> Point, SymbolStyle -> {{PointSize[0.008],Hue[0]}, {PointSize[0.001]}}, ImageSize -> 600]]] </msp:evaluate> </msp:allocateKernel> これを見るとMSPの関数MSPGetUploadFileがサーバ上でファイルを保存しているデータファイルの 名前をどうやって抽出するかが分かります.このファイル名は前の例で行ったようにデータを読むの に使われ,続けてב算が行われます.このЖ決策には限界があります.データは1つのב算につき1回 しか使えません.また,例えばデータの平滑化をコントロールするためのパラメータを変更する機能 は加えられていません.このため,データはセッション変数に保存される必要があります.これにつ いては次の例題で見てみます. この例ではファイル名が実際に文字列かどうかを判定するテストが行われます.これでデータファイ ルが実際にアップロードされたかどうかが検証されます.ページUpload.jspがUpload.htmlへのリク エストからではなく直接アクセスされるのであればファイルはアップロードされません. MSPGetUploadFileはサーバで使われるファイル名,クライアントで使われるもとのファイル名,コ ンテントタイプ等の便利な情報をೊします.アップロードするファイルが複数の場合,MSPGetUp loadFileは例外を投げます.複数のファイルをアップロードしたい場合はMSPGetUploadFileListを 使うとよいでしょう. 120 webMathematica User Guide MSPGetUploadFileはサーバで使われるファイル名,クライアントで使われるもとのファイル名,コ ンテントタイプ等の便利な情報をೊします.アップロードするファイルが複数の場合,MSPGetUp loadFileは例外を投げます.複数のファイルをアップロードしたい場合はMSPGetUploadFileListを 使うとよいでしょう. データのセッション保存:Session.jsp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/Data/Session.htmlでこのJSPに接続することができます(ご自分サーバに接続するURLはこれとは多少異な る場合もあります). この例題でユーザは積分する関数を入力することができます.結果はタイプセットシステムでフォー マットされ画像として保存されます.このページのソースはwebMathematica/Examples/Data/ Session.html,webMathematica/Examples/Data/Session.jsp,webMathematica/Examples/D ata/SessionProcess.jspにあります.Session.htmlの内容は以下の通りです. <html> <head> <title>UploadFile</title> </head> <body> <form method=postenctype="multipart/form-data"action="Session.jsp"> <p> Enter a file to upload: </p> <input type="file" size=40 name="file"> <br /> <br /> <input type="reset"value="Clear"> <input type="submit"value="Submit"> </form> <i> To generate suitable data, <a href="DataGenerate.jsp">clickhere</a> </i> </body> </html> こ れ はUpload.htmlに大変よく似ています.違いは,こちらの場合はフォームが送信されると Session.jspを呼ぶ点です.次はSession.jspです. webMathematica User Guide 121 <%@ page language="java" %> <%@ taglib uri="/webMathematica-taglib"prefix="msp"%> <msp:allocateKernel> <msp:evaluate> file = "FileName" /. MSPGetUploadFile[]; data = Flatten[ N[ Import[ file, "Table"]]]; MSPSessionVariable[UploadedData,Null]; UploadedData= data; </msp:evaluate> </msp:allocateKernel> <jsp:forward page="SessionProcess.jsp"/> この短いJSPはアップロードされたデータを読み,MSPSessionVariableを使ってデータをUploadedDataという名前のセッション変数に保存します.これはあるHTTPのリクエストから他のHTTPへのリ クエストへ継続的にデータを保存する便利な方法です.データは実際にはサーバに保存されるの で,たとえMathematica のカーネルが再ӭ動されてもデータを使うことができます.保存にはHTTPセ ッションとして知られているものが使われます.また,サーバは実際にデータを保存するためにクッ キーその他のメカニズム使うことがあります.Eコマ-スのWebサイトのショッピングカートはこのよ うなメカニズムになっているのです.webMathematica Webサイトの開発者に関する限り,これは大変 単純です.開発者はただ関数MSPSessionVariableを使い,それに変数の名前と初期値を渡せばいい のです.データを読み終わったら,jsp:forwardで実際にב算とプロットをするページData3.jspに転送 します.すべて異なるタスクを行うたくさんの別々のページにコードを分割するのはよいधב原理で す.開発しているページにたくさんの複ܚなコードが入っている場合は,再分割することでシステム が改善されるかもしれません.次はSessionProcess.jspからの抜粋です. 122 webMathematica User Guide <form action="SessionProcess.jsp"method="post"> <msp:allocateKernel> <msp:evaluate> Needs[ "Graphics`MultipleListPlot`"]; Needs[ "Statistics`DataSmoothing`"]; </msp:evaluate> <msp:evaluate> MSPSessionVariable[UploadedData,Null]; term = 4; If[ MSPValueQ[$$term], term = MSPToExpression[$$term]]; </msp:evaluate> <msp:evaluate> If[ UploadedData=!= Null, dataSmooth = MovingAverage[UploadedData,term]; MSPShow[ MultipleListPlot[UploadedData,dataSmooth, PlotJoined ->{False,True}, SymbolShape-> Point, SymbolStyle -> {{PointSize[0.008],Hue[0]}, {PointSize[0.001]}}, ImageSize -> 600]]] </msp:evaluate> <br /><br /> Number of smoothing terms: <input type="text" name="term"size="3" value="<msp:evaluate>MSPValue[$$term, "3"]</msp:evaluate>" /> </msp:allocateKernel> <br /><br /> <input type="submit"name="btnSubmit"value="Evaluate"> </form> SessionProcess.jspはLoad.jspにఫ常によく似ています.主な違いはデータを入手する行です.Ses sionProcess.jspはデータをファイルから読む代りにセッション変数のUploadedDataを使いま す .U pl o ad edDataは 前のJS P のS essi o n. jspでデータ を割り当てられています.Se ssio n Process.jspが直接アクセスされた場合に考えられるようにUploadedDataが前もって定義されてい ない場合,UploadedDataはNullという値を持つことになります.ここでは,このためにプロットが 生成されないだけですが,エラーページを表示するのに使われることもあります. webMathematica User Guide 123 このセクションにさらに変更を加えると,データを永久にサーバに保存できるようになります.単純 なデータファイルの場合,これはMathematica のファイル出力操作で簡単にできます.よりژ度なア プリケーションの場合はJavaデータベースの接続性を使ってデータや特定の情報を保存します. セッション変数については「よりژ度なトピック」の「変数」で詳しく説明します. 5.7 Mathematica パッケージとアプリケーション webMathematica はMathematica のコードをHTMLに埋め込む方法を提供します.コードの量が多い場 合は,コードをMathematica のパッケージに入れてこのパッケージを参照するようにする方が便利で しょう.また,既存のMathematica のパッケージやアプリケーションを使用するためにはスクリプト が必要な場合もあります.たくさんのMathematica のパッケージが収ຉされているものの例としては 標準アドオンパッケージが挙げられます.このセクションでは,Mathematica のコードとパッケージ の使い方について説明します. 5.7.1 パッケージをロードする パッケージをロードするコードを加えるのは比ѕ的簡単です.簡単な例をご覧ください. 124 webMathematica User Guide <%@ page language="java" %> <%@ taglib uri="/webMathematica-taglib"prefix="msp"%> <html> <head> <title>Live 3D Plotting</title> </head> <body text="#171717"bgcolor = "#ffffff"> <html> <head> <title>ConvexHullComputation</title> </head> <body bgcolor="#FFFFFF"> <h1>ConvexHullComputation</h1> <msp:allocateKernel> <msp:evaluate>Needs["DiscreteMath`ComputationalGeometry`"]; </msp:evaluate> <msp:evaluate>ConvexHull[{{1,5},{4,1},{10,2},{5,4}}]</msp:evaluate> </msp:allocateKernel> </body> </html> <msp:evaluate>というタグはNeedsを使ってパッケージをロードします.これとは別のあまりお勧 めできない方法に,Getを使うものがあります.この方法ではページがロードされる度にパッケージ がロードされるので,あまり効率的ではありません.Needsを使うと,パッケージのロードは初回だ けになります. ここで重要な点は,一方のタグがパッケージをロードし,他方がパッケージの関数を使う点です.パ ッケージをロードするタグはパッケージの関数を使うべきではありません.もしもタグがパッケージ の関数を使うと,シンボルのシャドーイング(ͩ蔽)の問題がӭり,使いたい関数をͩしてしまいま す.シンボルのシャドーイングに関してはMathematica ブックをご参照ください.ͩされたシンボル ができると,ד告メッセージが出されます.このメッセージのテキストはMSPGetMessagesで見ること ができます.また,VerboseLogがオンになっていると,このד告メッセージがログファイルに表示さ れます.verbose logging(詳細ログ情報)とログファイルについての詳細は「 ログ」と「カーネルモ ニタ」のセクションをご覧ください. 最後にパッケージのサブコンテキストの使い方の問題があります.Mathematica のアプリケーション パッケージにはサブコンテキストにシンボルを置くものも多いので,サブコンテキストの使い方が問 題となる場合もあるでしょう.例えば,画像処理のパッケージではサブコンテキストが使われていま す.この例はImageProcessingアプリケーションパッケージをインストールしていないシステムでは動 きませんのでご了承ください. webMathematica User Guide In[1]:= Needs@"ImageProcessing`"D In[2]:= Context@ ImageReadD Out[2]= ImageProcessing`ImageData` 125 ここで,ImageRead関数はImageProcessing`ImageData`コンテキストで定義されています.webMathematica のコードのためには, <msp:evaluate>タグの中に直接使いたいシンボルを含むコンテキ スト全ಊにNeeds文を含めなければなりません.ですから,ImageRead関数が使いたければImage Processing`アプリケーションとImageRead関数を含むコンテキストにNeeds文を挿入しなければ ならなくなります.次の例をご覧ください. <msp:evaluate> Needs["ImageProcessing`"]; Needs["ImageProcessing`ImageData`"];</msp:evaluate> <msp:evaluate> ImageRead["datafile"]</msp:evaluate> パッケージが正しく使われていないと感じたら,使っているシンボルのコンテキストにNeeds文があ るかどうかੴべてみるとよいでしょう.ひとつのੴべ方として,使っている関数のコンテキストをチ ェックする簡単なページを書いてみることが考えられます. <msp:evaluate> Needs["ImageProcessing`"]; Needs["ImageProcessing`ImageData`"];</msp:evaluate> <msp:evaluate> Context[ ImageRead]</msp:evaluate> 画像処理のアプリケーションをインストールしてこのスクリプトをサーバで実行するとImage Processing`ImageData`が結果として戻されます.これで,画像処理のアプリケーションから関数 を適切にロードしていることが分かります. パッケージのロードにMasterメカニズムを使う場合にもこれと同様の問題があります.この場合も 個々のコンテキストにNeeds文を含めるか,あるいはシンボルの完全コンテキスト名を参照するかし なければならないでしょう.もちろん,前者を使うとMasterメカニズムを使う利点がなくなってし まいます.以下は完全コンテキストを使った例です. 126 webMathematica User Guide <msp:evaluate> Needs["Graphics`Master`"];</msp:evaluate> <msp:evaluate> color = Graphics`Color`Red</msp:evaluate> 5.7.2 パッケージを書く 一定量のコードをご自分でお書きになる場合は,これをMathematica のパッケージとしてまとめ,webMathematica にロードすると便利です.webMathematica ページに入れるMathematica のコードはなるべ く少なくしたいでしょうから,これは特にwebMathematica にとって重要なことです.パッケージの書 き方に関する参照文書はたくさんあります.「付ຉ」にある「リンク」の「Mathematica パッケー ジ」をご覧ください.パッケージのロードの仕方は前のセクションをご覧ください.パッケージを置 く場所は次のセクションで説明します. ご自分のコードにMathematica のパッケージ形式は使わず大域的な定義を使われる場合は,スクリプ トにアクセスする度にこれをロードする必要があります.これは,スクリプトにアクセスした際の後 処理の問題のためです.コードはMathematica のパッケージにお入れになるようお勧めします. 5.7.3 パッケージをインストールする Mathematica コードのパッケージが使えるときは,これをweb Mathematica が使える場所にインストー ルしてください.方法はたくさんあります.続くセクションではこのことについて見てみます. webMathematica アプリケーション webMathematica はwebMathematica/WEB-INF/ApplicationsにあるApplicationsディレクトリを提供 します.このディレクトリはパッケージやアプリケーションをઉ加するのに使うことができます.こ こにઉ加されたリソースはwebMathematica だけが使えます. $BaseDirectory $BaseDirectoryディレクトリは,パッケージやアプリケーション等のリソースをMathematica の全 ユーザと1つのマシンにインストールされた全Mathematica で使えるようにインストールするための場 所です.パッケージやアプリケーションは$BaseDirectory/Applicationsにインストールすることが できます.ここだとwebMathematica から使うことができます. webMathematica User Guide 127 $UserBaseDirectory $UserBaseDirectoryディレクトリは,パッケージやアプリケーションを任意のマシンの特定のユー ザが使えるようにするためのインストール場所です.パッケージやアプリケーションは$UserBase Directory/Applicationsにインストールすることができます.ここに置かれたパッケージやアプリ ケーションには,webMathematica サーバを実行している任意のユーザしかアクセスすることができま せん. スクリプトディレクトリ パッケージやアプリケーションを置くこの他の場所に,JSPのスクリプトが置かれているディレクト リ が あ り ま す .デ フ ォ ル ト で は こ のデ ィ レ ク ト リ か ら ファ イ ルを ロー ド する こ とは でき ま せ ん.MSPの関数MSPPageDirectoryを使えばMathematica のパスにこの場所を加えることができま す.下記ではNeedsを使ってパッケージをロードし,Getを使ってデータファイルをロードしていま す. <msp:evaluate> Block[{$Path=Append[$Path,MSPPageDirectory[]]}, Needs["MyPackage`"]; Get[ "Data.m"]; ] </msp:evaluate> こうすると,最小限の再配列でJSPのディレクトリとコードを別にインストールしてあるwebMathematica に移動することができるようになります. この方法の欠点は,直接リクエストすればMyFile.mというコードがWebサーバから直接ダウンロード できてしまう点です.ここにプライベート情報が含まれていると,セキュリティ問題になる可能性が あります. $TopDirectory パッケージやアプリケーションをMathematica のレイアウト内にインストールすることもできま す.こうすると,これらはそのMathematica のインストールでしか使えません.一般に,これはあま りお勧めできません. 128 webMathematica User Guide PackagesDirectory パッケージやアプリケーションをPackagesDirectoryध定パラメータで指定されたディレクトリに置く ことも可能です. 絶対ファイル名 コードをインストールする最後の方法は,絶対パス名を使うことです.次の例をご覧ください. <msp:evaluate>Get["d:¥¥My Work¥¥LastOneThatWorked¥¥MyFile.m"]</msp:evaluate> このようなロード方法は大変一般的ですが,通常あまりよい方法ではありません.こうするとコード が不安定になり,管理に手間がかかるようになります.ほんのちょっと手間をかけるだけで,前述の 方法のどれかを使うことができます. 5.8 代替サーバ技術 サーバ技術には,webMathematica と一緒に使うことのできるさまざまなものがあります.基本的な使 い方のひとつに,webMathematica サーバでのב算を参照するURLを使うというものがあります.これ はどんなサーバでも使えるテクニックです.これは特にimgタグでは簡単です. これはwebMathematica で行われたב算を参照するimgタグで,どんなサーバ技術を使っていても結果 に埋め込むことができます. <img src="http://myserver:8080/webMathematica/MSP/test?arg1=val1&arg2=val 2"/> webMathematica と特定のサーバ技術との間にもっと緊密な関係を持たせることも可能です.web Mathematica はサーブレットに基づいていますから,サーバ技術とweb Mathematica の相互作用に関わる問題 はどんなものでも,実際は,サーバ技術,JavaサーブレットそしてJavaServer Pagesの相互作用の問題 だということをお忘れにならないでください.後に積分の例を挙げますのでご覧ください. webMathematica User Guide 129 5.8.1 JavaServer Pages JavaServer Pages(JSP)の技術はJavaサーブレットの技術を拡張したものです.MSP技術のJava版とも呼 べるもので,JavaのコードをHTMLのページに埋め込むことを可能にします.webMathematica はJSPを 実装しているので,JSPと大変強固に結びついています. 5.8.2 PHP P H P は サー バ サ イ ド の , ク ロ スプ ラ ッ ト フ ォ ー ム の, H TM L が 埋 め 込 ま れた ス ク リ プ ト ل ؘ (http://www.php.net)です.PHPの拡張子にはPHPとサーブレットのインタラクションを可能にするもの があります(http://cvs.php.net/cvs.php/php4.fubar/sapi/servlet).このリンクにはREADMEファイルが含ま れています.このファイルはPHPとwebMathematica を統合するよい出発点となるでしょう. 5.9 PDFドキュメント Mathematica の使用法で重要なもののひとつに,技術文書のためのૣ子形式があります.この大ಊ分 はMathematica ノートブックのプロパティに由来します. Mathematica ノートブックは,テキスト,数 式,グラフィックスを組み合せる多くの技術分野に適したドキュメント形式です.webMathematica サ イトで技術ドキュメントを生成することができます.簡単に生成できるフォーマットのひとつに Mathematica ノートブックがあります.また,クライアントに Mathematica ノートブックをೊすことで 実行できるwebMathematica の例題もたくさんあります.Content.jspはそのような例題のひとつで す.Mathematica のノートブックを使うと,クライアントに届いた後でもさらにドキュメントで作業 が続けられるという利点があります.欠点は,クライアントの側がMathematica あるいはMathReader http://www.wolfram.co.jp/products/mathreader/のようなノートブックが読めるアプリケーションにアクセ スできなければならない点です.ノートブックの代りにPDFを使うこともできます.PDFには大半の クライアントがこれを描画できるという利点があります.このセクションではwebMathematica で PDFドキュメントを生成する方法について説明します. 現在のところ,Mathematica はPDFを生成する組込み技術を有していません.このため,外ಊツールが 必要になります.PDFの生成は,Mathematica ノートブックの生成,ノートブックのPostScriptへの変 換,PostScriptのPDFヘの変換の3段階からなります.次のセクションではこれらの各段階について説 明します. 130 webMathematica User Guide Mathematica ノートブックの生成 Mathematica ノートブックを生成する一般的な方法は,ノートブック生成のための Mathematica コマン ドを用いることです.以下に例となる関数を挙げましたのでご覧ください(これはContent.jspで使わ れているソースから取ったものです). MakeNotebook[]:= UseFrontEnd[ Module[ {nb, nbobj}, nb = NotebookCreate[]; NotebookWrite[nb, Cell[ "A DynamicallyCreated Notebook", "Title"]] ; NotebookWrite[nb, Cell[ "Converted to " <> $$button, "Subtitle"]] ; NotebookWrite[nb, Cell[ "The date is " <> ToString[ Date[]], "Text"]] ; nbobj = NotebookGet[nb] ; NotebookClose[nb] ; nbobj]] この例は,NotebookCreateでノートブックオブジェクトがどのように作られるか,またNotebook Writeで内容がどのように加えられるかを示しています.ノートブックが完成するとNotebookGetで ノートブックを持っているMathematica の式が得られ,これがೊされます.実際には,ドキュメント にグラフィックスやテキスト,ב算等が入れられます.Mathematica のドキュメントには,ノートブ ックを生成するコマンドに関する情報がたくさん載っています. Mathematica ノートブックを使う主な利点は,フォントの選択,グラフィクス,数式等の細ಊに十分 な注意が払われるので,製作者がそれほど気を؇わなくてもよい点です. PostScriptへの変換 この変換は関数NotebookPrintを使うと極めて簡単に行えます.次はノートブックオブジェクトを file.psというPostScriptでの表現にします.ノートブックオブジェクトは,前のセクションで説明した 方法で生成することができます. NotebookPrint[nb, file.ps] webMathematica User Guide 131 PostScriptからPDFへの変換 PostScriptをPDFに変換するツールはたくさんあります.ݠしてみたのは ps2pdf(http://www.cs.wisc.edu/~ghost/doc/AFPL/8.00/Ps2pdf.htm )とPStill(http://www.pstill.com)の2つで す.これらはサードパーティによるツールでWolfram Researchはサポートしていません.しかし,極 めて満できるものです.どちらを使う場合も,Mathematica が使う特殊フォント全ಊにアクセスで きるようにしなければなりません.Mathematica のレイアウトに含まれるઉ加フォントの加え方 は,それぞれのコンバータについてのドキュメントをご覧ください. 5.9.1 PDFの例題の作成 このセクションでは,ノートブックを生成し,これをPDFに変換する例題について説明します.この 例題が動くためには前のセクションで説明したPDFツールがインストールされていなければなりませ ん.前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/Examples/PDF/Generate.jspでこのJSPに接続することができます(ご自分のサーバに接続するURLはこれとは多 少異なる場合もあります).ソースはwebMathematica/Examples/PDF/Generate.jspとweb Mathematica/WEB-INF/Applications/ExampleUtilities/PDF.mにあります. まず,これがJSPのソースです. 132 webMathematica User Guide <form action="Generate.jsp"method="post"> This example generates a notebook, converts it to PDF and returns the PDF. </p> <msp:allocateKernel> <msp:evaluate> If[ MSPValueQ[$$button], Get[ "ExampleUtilities`Content`"]; Get[ "ExampleUtilities`PDF`"]; nb = MakeNotebook[]; pdf = NotebookToPDF[nb] ; If[ StringQ[ pdf], MSPReturn[pdf, "application/pdf"], "Conversionfailed, perhaps the PDF tools are not installed."]] </msp:evaluate> </msp:allocateKernel> <br> <br> <input type="submit"name="button"value="Generate"> </form> このコードで,ノートブックを作成してこれをPDFに変換する2つのパッケージをロードします.この コードは関数MakeNotebookを呼び出します.この関数は大変単純なノートブックを生成しま す.次に,作成されたノートブックオブジェクトを関数NotebookToPDFに渡します.これが文字列 をೊすと,その文字列がMSPReturnを使ってクライアントにೊされます. 次は関数NotebookToPDFのMathematica のソースです. webMathematica User Guide 133 $PStillCommand= "/usr/local/pstill_dist/pstill" PDFCommand[out_, in_] := $PStillCommand<> " -o " <> out <> " " <> in NotebookToPDF[nb_]:= Module[ {stm1,stm2,file1,file2,res}, stm1= OpenTemporary[]; stm2=OpenTemporary[]; Close[stm1]; Close[stm2]; file1=First[stm1]; file2=First[stm2]; UseFrontEnd[NotebookPrint[nb,file1]]; Run[ PDFCommand[file2, file1]]; res=Read[file2,Record,RecordSeparators-> {}]; DeleteFile[file1]; DeleteFile[file2]; res ] これには変換ツールの場所を示す定義が必要です.ここではPStillを使うध定が行われています が,ps2pdfを使うように簡単に変更することができます.また,コマンドはUnixのファイルシステ ムに適しています.Windowsでは下記のようにध定するとよいでしょう. コマンドの前後のダブルク ォートと2重になったバックスラッシュにご注意ください. $PStillCommand="¥"C:¥¥ProgramFiles¥¥GPStill¥¥pstill.exe¥"" このコードは最初にいくつかの一時的なファイルを作り,コマンドNotebookPrintを使ってPostScriptをファイルの1つに送ります.それからRunコマンドを使ってPostScriptのPDFへの変換を誘発し ます.最後にこのPDFをMathematica の文字列に読み込んで,これを結果としてೊします. PostScriptからPDFへの変換ツールとなるこれらの簡単な関数をさらに拡張することができます.例え ば,いろいろなオプションをコンバータに渡すようにすることができます. 134 webMathematica User Guide 5.10 一般的な内容をೊす webMathematica のリクエストの典型的な結果はHTMLページです.HTMLページには画像の参照が含 まれることがあります.webMathematica で使えるコマンドは,このようなタイプのリクエストが簡単 にできるようにधבされています.しかし,例えばMathematica ノートブックやTeXの文書のよう に,これ以外の形式のものをೊせると大変便利です.このような形式のものを生成するための Mathematica コマンドはExportとExportStringです.ブラウザにこれらの形式のものがೊされる と,その形式のための特別な機能を提供するヘルパーアプリケーションがӭ動されることがよくあり ます.このセクションでは,webMathematica を使って一般的な内容を異なった形式でどうやってೊす かを説明します.この機能は2つの重要なコマンドMSPReturnとMSPURLStoreに基づいています. 5.10.1 MSPReturn MSPスクリプトがMSPReturnを評価すると,スクリプトのプロセスは中止され,第1引数が直ちにೊ されます.第2引数はコンテントタイプを指定します.この例ではノートブックオブジェクトがೊさ れ,結果はapplication/mathematicaとध定されています. MSPReturn[ "Notebook[Cell[¥"Hello¥",¥"Title¥"]]","application/mathematica"] HTTPクライアントの種์によってはヘルパーアプリケーションをӭ動するコンテントタイプが使え ます.しかし,リクエストに関連したファイル名が必要なクライアントもあります.この目的のため にMSPReturnはHTTPヘッダのファイル名をध定する第3引数を取ります. MSPReturn[ "Notebook[Cell[¥"Hello¥",¥"Title¥"]]", "application/mathematica","notebook.nb"] しかしInternet Explorerのように,HTTPクライアントによってはこれが2つの OpenあるいはSaveダイ アログボックスを開いてしまうという好ましからざる結果を生むこともあります.ほとんどのクライ アントはMSPReturnを含むスクリプトのリクエストに適切な拡張子を持ったファイル名が付いてい るとはるかにうまく機能します.webMathematica の拡張子は.jspでなければならないので,これは不 可能です.しかし,適切な拡張子を持ったURLを生成することなら可能です.この機能はMSPURL Storeが提供しています. webMathematica User Guide 135 5.10.2 MSPURLStore MSPURLStoreはMSPShowのようなコマンドで生成された画像を保存する,webMathematica が提供 するメカニズムを使います.これは実際にサーバに引数を保存し,この引数を参照するURLをೊしま す. In[1]:= Needs@"MSP`"D; In[2]:= m = DisplayString@Graphics@Line@ 880, 0<, 81, 1<<DD, "JPEG"D; In[3]:= MSPURLStore@m, "imageêjpeg"D Out[3]= êwebMathematicaêMSP?MSPStoreID=FileNameBase_186159533&MSPStoreType=imageêjpeg このURLはMSPURLStoreを含んでいたリクエストと相対的な関係にあります.これは独自のށ別子 とコンテントタイプの記述を持っています.サーバは貯えられた情報を着実に削除していくので,こ の情報はサーバに恒久的には残りません.このメカニズムは特にプラグインやアプレットの入力を準 備するのに便利です. MSPURLStoreはファイル名をध定するために第3引数を取ることもできます.このファイル名はೊ されるURLに入れられます.例えば,notebook.nbのファイル名が例の中でध定されています. In[4]:= Out[4]= MSPURLStore@ "Notebook@Cell@\"Hello\",\"Title\"DD", "applicationêmathematica", "notebook.nb"D êwebMathematicaêMSPênotebook.nb?MSPStoreID= FileNameBase_682425268&MSPStoreType=applicationêmathematica スクリプトの例Examples/ContentStore.jspにMSPURLStoreの使用例があります. 5.10.3 MSPPageOptions/ContentType MSPPageOptionsのContentTypeオプションを使って任意のページのコンテントタイプをध定する こ と が で き ま す. こ れ は 一 般 に ペ ージ の 一 番 上 に 置 か れま す .次 の例 で はペ ー ジの 戻り 型 を MathMLにする方法を見てみましょう. 136 webMathematica User Guide <msp:evaluate> MSPPageOptions[ContentType-> "text/mathml"] </msp:evaluate> <msp:evaluate> MSPFormat[Integrate[ 1/(1-x^3),x],StandardForm,RawMathML] </msp:evaluate> もちろんこれはMSPReturnに大変似ています.違いは,これがページ全体をೊすのに対しMSPRe turnは第1引数しかೊさない点です. webMathematica User Guide 137 6. よりژ度なトピック このセクションではwebMathematica サイトのより複ܚでژ度な内容を扱います. 6.1 変数 このセクションではwebMathematica のページにおける変数の使い方について説明します.入力変数の 処理や,スコープのようにwebMathematica のページのコードで局所変数を使う問題を取り上げます. webMathematica には入力変数,ページ変数,セッション変数の3つの変数があります.$$で始まる変 数は入力変数です.この変数はHTTPリクエストによって値を与えられ,ページが終了してカーネル がクリーンにされるとクリアされます.$$で始まらない変数は値を割り当てられたときにしか値を取 りません.ページ変数の場合,ページがクリアされるときにこの割当てもなくなります.セッション 変数の場合,値はHTTPセッションが終わるまで残ります. 以下で,これらの変数について詳しく説明します. 6.1.1 入力変数 入力変数は$$で始まり,名前がHTTPのリクエストで送られているものには値が与えられます.どれ が入力変数かを知るのは重要なことなので,入力変数には特別の名前が与えられています.以下の例 では,入力変数$$settingに入力要素に入れられた値が与えられます(入力要素がsettingという名前 を使うからです).変数に値があるかどうかはMSP関数のMSPValueQを使ってੴべることができま す. <input type="text" name="setting"/> <msp:evaluate> If[ MSPValueQ[$$setting], .... ] </msp:evaluate> 入力変数の値をЖ釈すべきかどうかは重大なことです.変数の実際の文字列の値がユーザに適切なも のであれば,それを使うべきでしょう.また,文字列の値がMathematica コマンドへの入力を表して いるのなら,それをЖ釈する必要があるでしょう.Ж釈するためにはMathematica がЖ釈できるもの でなければならず,結果はセキュリティシステムの認証をパスするようなものでなければなりませ ん.セキュリティシステムに変更を加えるようなら,Ж釈しない値を使うことを考えた方がよいでし ょう. 138 webMathematica User Guide 入力変数の値をЖ釈すべきかどうかは重大なことです.変数の実際の文字列の値がユーザに適切なも のであれば,それを使うべきでしょう.また,文字列の値がMathematica コマンドへの入力を表して いるのなら,それをЖ釈する必要があるでしょう.Ж釈するためにはMathematica がЖ釈できるもの でなければならず,結果はセキュリティシステムの認証をパスするようなものでなければなりませ ん.セキュリティシステムに変更を加えるようなら,Ж釈しない値を使うことを考えた方がよいでし ょう. 入力変数のЖ釈 Mathematica で入力変数をב算したい場合は,これをЖ釈しなければなりません.web Mathematica に はЖ釈のためのいろいろな関数があります.これらの関数はセキュリティ機能を使うので,他ではな くこれらを使うことが重要です.セキュリティ機能をバイパスすることはシステムのセキュリティを 危؉に晒すことになります. MSPBlockとMSPToExpressionは入力変数から式を得るために提供されているものです.もちろん これはどんなタイプのインタラクティビティにも不可欠なことです.このプロセスには2つの段階が あります.第1段階ではЖ釈が,第2段階では認証が行われます.Ж釈によってMathematica への入力 が決定され,認証によって実行されるMathematica のコマンドがサイトのセキュリティを危؉に晒さ ないことが保証されます. Ж釈は,Mathematica への入力を決定するパーサを呼び出すMathematica の関数ToExpressionに基づ いて行われます.MSPBlockとMSPToExpressionへの有効な入力は,Mathematica ブックにあるよ うな通常のMathematica の入力かMathMLのどちらかです.次の例ではMathematica とMathMLの両方の 入力を示しながら,MSPToExpressionを使って入力を処理しています. まずMSPアプリケーションをロードし,次にセキュリティシステムをロックします.「セキュリテ ィ」については該当箇所をご覧ください. In[1]:= Needs@ "MSP`"D; In[2]:= SetSecurity@D これでMSPToExpressionを使ってMathematica の入力の一ಊがЖ釈できます. In[3]:= $$e1 = "x^y" Out[3]= x^y In[4]:= MSPToExpression@ $$e1D Out[4]= xy 次の入力はMathMLです. In[5]:= $$e2 = "<math><msup><mi>x<êmi><mn>2<êmn><êmsup><êmath>" webMathematica User Guide Out[5]= <math><msup><mi>x<êmi><mn>2<êmn><êmsup><êmath> In[6]:= MSPToExpression@ $$e2D Out[6]= x2 139 MSPBlockは入力変数のЖ釈された値を使うઉ加機能を提供します.これについては「Mathematica 関数のリファレンス」セクションでより詳しく説明してあります. webMathematica はシステムのセキュリティを守るために検証を行います.検証ではサーバに送られた すべての入力をチェックして,Mathematica のב算で使っても安全かどうかを確かめます.「 セキュ リティ」のセクションにはこの件に関するより詳しい情報があります. Ж釈された値とЖ釈されていない値 上述のように,入力変数を使うときは,常にその値をどのように扱うかを決めなければなりませ ん.Ж釈されていない値を使ってध定に基づいて選択することも可能です(これは文字列になりま す).また,Mathematica でのב算に使えるように値をЖ釈することもできます.このセクションで はЖ釈された値とЖ釈されていない値の両方について説明します.前述のようにwebMathematica をイ ンストールするとhttp://localhost:8080/webMathematica/Examples/SimplifyIntegrate.jspでこのMSPに接続 することができます. 次はJSP SimplifyIntegrate.jspのform要素のリストです. 140 webMathematica User Guide <form action="SimplifyIntegrate.jsp"method="post"> <msp:allocateKernel> Input: <br> <msp:evaluate> integrand = Null; If[ MSPValueQ[$$expr], integrand = MSPToExpression[$$expr]] ; </msp:evaluate> <input type="text" name="expr" size="24" value="<msp:evaluate>MSPValue[ $$expr, "Sin[x]^2"]</msp:evaluate>"/> <br/> <br/> <msp:evaluate> If[ integrand =!= Null, res = Integrate[ integrand,x] ; If[ $$simplify === "on", res = Simplify[ res]] ; MSPFormat[res,StandardForm]] </msp:evaluate> <br/> <input type="submit"name="btnSubmit"value="Evaluate"> <br/> Simplify result: <input type="checkbox"name="simplify" <msp:evaluate>If[ $$simplify === "on", "checked=¥"checked¥""]</msp:evaluate>> <br> </msp:allocateKernel> </form> この例題にはリクエストで送信されるsimplifyとexprの2つの入力変数があります.このうち最初の ものはЖ釈されずӭしたいアクションを選択するのに使われます.2番目のものだけが,実際の Mathematica の入力としてЖ釈されます.これは内容の $$exprがMSPToExpressionでЖ釈されてい るಊ分に現れています.これは通常のMathematica の式を表しており,Mathematica の関数Inte grateへの入力として使われるので,こうする必要があるのです.チェックボックスのध定は変数 $$simplifyによって実行され,値「on」があるかどうかテストされます.ですからЖ釈する必要はあ りません.一般に,必要がない場合はЖ釈しない方がよいでしょう. webMathematica User Guide 141 MSPBlockとMSPToExpression webMathematica は入力変数をЖ釈するためのMSPBlockとMSPToExpressionの2つのMSP関数を提 供します.このセクションでは両者を比ѕ検討します. MSPBlockは2者のうちの単純な方です.この関数は下記のように,値をЖ釈して使うためのコンパ クトで簡単な方法を提供します. <msp:evaluate> MSPBlock[ {$$expr, $$num}, Expand[ $$expr^$$num]] </msp:evaluate> ボディの$$exprは,ここではExpandב算に使われていますが,入力変数$$exprのЖ釈された値を 参照しています.$$exprの値がЖ釈できなかったりセキュリティテストに通らなかったりした場合 は例外が投げられます.$$exprに値がない場合はMSPBlockは評価されず,nullという結果がೊされ ます. 入力をЖ釈する別の方法にMSPToExpressionを使うものがあります.この方法は,ページ変数を使 ってЖ釈の結果を持てるようにします.これはMSPBlockの使用ほどきちんとしたものではありませ んが,より表現に富んでいます.次の例をご覧ください. <msp:evaluate> poly = Null; exponent = Null; If[ MSPValueQ[$$expr, $$num], poly = MSPToExpression[$$expr] ; exponent = MSPToExpression[$$num]] ; </msp:evaluate> <msp:evaluate> If[ poly =!= Null && exponent =!= Null, Expand[ poly^exponent]] </msp:evaluate> この例題はwebMathematica が$$exprのЖ釈された値をどのように取り出し,これをページ変数 polyでどうやって保存するかを示しています.これは多くの異なる場所でЖ釈された値を使う場合に 特に便利です. 142 webMathematica User Guide 6.1.2 ページ変数 Block,Module,Functionのような標準的なMathematica のプログラミングコンストラクトはどれ も,局所化とスコープという点に関してそれぞれ独自の動き方をします.その操作に関する詳細 は,標準的なMathematica の参考文献でご覧ください. msp:evaluateタグの中のMathematica コードにある変数を使うことができます.この変数は中間値を 保存してב算に使うことができます.この変数はカーネルがクリアにされるときに一緒にクリアされ るので,ModuleやBlockのような正ӪのMathematica プログラム構造に入れるのは大切なことではあ りません.このため,これらはページ変数と呼ばれます. 以下の例ではページ変数tmpがNullという値を持っています.この変数は次に入力変数$$exprに MSPToExpressionをコールした結果を与えられます.MSPToExpressionが,例えばセキュリティ エラー等のためにタスクを完了できなければ,例外が投げられ,tmpはNullという値を持ち続けま す.tmpがNullでなくなっていれば,入力が問題なく処理されたことが分かるので,これをב算に使 うことができます. <msp:evaluate> tmp = Null; tmp = MSPToExpression[$$expr] ; </msp:evaluate> <p> <msp:evaluate> If[ tmp =!= Null, .... ] </msp:evaluate> </p> ページが終了するとtmpもクリアされます. 6.1.3 セッション変数 あるページから次のページまで任意の値を保存したい場合は,MSPSessionVariableを使ってセッシ ョン変数を作ります.こうすると値をサーバに保存して別のページで使うことができます.これは HTTPセッションを使うので,特定のユーザのセッション変数は他のユーザには見えません(イン ターネットショッピングのショッピングカートが自分以外のユーザに見えないのと同じです). webMathematica User Guide 143 以下のコード(ಊ分)には2つの変数があります.このうちsavedInputはMSPSessionVariableで宣 ؘされたセッション変数で,xInputはページ変数です.2つめの評価でxInputに値があればその値は savedInputに加えられます. <msp:evaluate> MSPSessionVariable[savedInput,{}]; xInput = Null; xInput = MSPToExpression[$$expr] ; </msp:evaluate> <p> <msp:evaluate> If[ xInput =!= Null, savedInput = Append[ savedInput,xInput]]; </msp:evaluate> </p> セッション変数はב算の結果を割り当てて,後でそれを削除するというようにページ変数と同じよう に使うことができます.違いは,セッション変数の方はそのページが終了しても生き残る点です. MSPSessionVariableの例題がSession.jspの項にありますので,そちらもご覧ください. 6.2 セキュリティ インターネットのセキュリティはクライアントにとってもサーバにとっても重要ですが,webMathematica は完全にサーバの技術なので,webMathematica JSPに関連したクライアントのセキュリティ問 題はありません.もちろんクライアントの側のセキュリティも重要ですが,Mathematica はクライア ントの側のセキュリティに関する問題は特に引きӭしません.問題なのはサーバのセキュリティなの です. 重要なまとめ セキュリティのセクションを全ಊ読む時間がなかったり,分からない用لがあるようなら,セキュリ ティに関する重要なポイント「決してToExpressionを使わない.安全な関数のMSPToExpres sionを常に使う」をђえておいてください. Mathematica のように一般的なב算システムをWebサイトの中でӭ動することは,サーバのセキュリ ティに大きな問題をӭす危؉性を含んでいます.Mathematica にはファイルを検証したり削除したり するコマンドや,任意のプロセスを開始するコマンドがあります.webMathematica ツールにはたくさ んのセキュリティ機能が組み込まれていますが,これは他のセキュリティ機能と連携して作動するよ うに できています.セキュリティ面が重要な場合は,ファイアウォール,信頼できるホス ト,HTTPに特化したセキュリティ機能等を適切に使うことが大切です. Mathematica のように一般的なב算システムをWebサイトの中でӭ動することは,サーバのセキュリ webMathematica User Guide ティに大きな問題をӭす危؉性を含んでいます.Mathematica にはファイルを検証したり削除したり するコマンドや,任意のプロセスを開始するコマンドがあります.webMathematica ツールにはたくさ んのセキュリティ機能が組み込まれていますが,これは他のセキュリティ機能と連携して作動するよ うに できています.セキュリティ面が重要な場合は,ファイアウォール,信頼できるホス ト,HTTPに特化したセキュリティ機能等を適切に使うことが大切です. 144 Mathematica サイトの主な危؉性は,サーバのセキュリティを脅かすようなコマンドをかが Mathematica に送ってくることです.このようなコマンドは入力変数の値としてサーバから送ることができ ます.「入力のЖ釈」に関するセクションではシステムが入力をЖ釈する方法について説明しました が,このセクションでは認証プロセスを説明します.システムは, ReadList@ "êetcêpasswd"D あるいは Run@"telnetd -d"D のような入力を受けることがあり得ます.Mathematica も,攻撃してくる可能性もあります. の無害なコマンドの引数として使われていて これらのどれかをhttp://localhost:8080/webMathematica/Examples/Expand.jspのような例題の入力として 使ってみてください. Mathematica への入力の値がサーバから文字列で送られているので,これは成功しません.このよう な文字列は,Mathematicaカーネルでは入力をЖ釈する安全な方法を提供するMSPBlockあるいは MSPToExpressionのような特別なMSP関数を使って処理されなければなりません.また,Mathematica のコマンドToExpressionにセキュリティ機能が組み込まれており,セキュリティシステムをバイ パスする危؉な呼出しをഛぎます. 6.2.1 MSP関数の認証 MSP関数のMSPBlockとMSPToExpressionはwebMathematicaのサイトに送られる入力を安全に使う ために提供されています.これらは式をЖ析し,式の評価前に認証します.認証が終わると入力はב 算に使われます.しかし,認証されないと,MSPExceptionが投げられます.次の例をご覧くださ い. In[1]:= Needs@"MSP`"D; In[2]:= SetSecurity@D In[3]:= $$e = "ReadList@\"êetcêpasswd\"D"; In[4]:= MSPToExpression@$$eD Throw::nocatch : Uncaught Throw@8$$e, ReadList@"êetcêpasswd"D<, MSPException@S … orDD returned to top level. webMathematica User Guide Out[4]= 145 Hold@Throw@8$$e, ReadList@"êetcêpasswd"D<, MSPException@SecurityErrorDDD Catch文を使わなかったので,受け取られなかったThrowに関するメッセージが出されます.ページ の処理中にこのメッセージが出されると,デフォルトハンドラがこれを捕えます.この際,一般的に は何らかの適切なテキストが挿入されます.ページの作者がこれらの例外を受け取って,何らかの特 別なエラーメッセージを発することも可能です. 重要:セキュリティのד告 自分のページが攻撃を受けないようにしたければ,ページでב算するものを理Жすることが大切で す . 特 に , 他 のフ ァ イ ル を 開 い た り閉 じ た り そ の 他 の 操作 を 実行 した り する よ うな コマ ン ド は,RunやLinkOpen等のプロセスを開始するコマンドと同様に十分に注意して扱うことが大切で す.ToExpressionを使う場合は以下のような注意も必要です. 認証のプロセス 認証プロセスは大変ストレートに行われます.これをカスタマイズすることでセキュリティの程度を ੴ節することができます.この操作は以下のようになります. まずMSPMathematica アプリケーションをロードし,次にセキュリティモデルをロックします.この セキュリティモデルはSetSecurityを呼び出した後では修正できません.SetSecurityはサーバが Mathematica を初期化するときに呼び出されます. In[5]:= Needs@"MSP`"D; In[6]:= SetSecurity@D これで,式を認証できるかどうかテストすることができます.まず,安全で無害な数式を検証してみ ましょう. In[7]:= InsecureExprQ@ HoldComplete@ Sin@6DDD Out[7]= False ここに,攻撃として送られそうな,扱いにくい式があります. In[8]:= InsecureExprQ@ HoldComplete@ Run@ "telnetd"DDD Out[8]= True 妥当性の検証は,全シンボルをリストにして,そのリストを短くしていくことで実行されます.実行 後も残っているシンボルがあれば,その式は安全ではありません.このプロセスは一連のシンボルと コンテキスト名のリストを次の手順で認証/否認する形で行われます. 146 webMathematica User Guide † AllowedContextsがリストの場合,このリストに含まれるコンテキストのシンボルを除く. † AllowedContextsがリストでなければ,DisallowedContextsの中に含まれないコンテキス トのシンボルを除く. † AllowedSymbolsがリストなら,このリストの中のシンボルを除く. † AllowedSymbolsがリストでなければ,DisallowedSymbolsの中にはないシンボルを除く. † シンボルが残らなければ,式は安全である.その他の場合,式は安全ではない. このテストは限定的にも柔୬にも使えます.「allowed」のリストを使うと,限定的になり,セキュリ ティもژまります.「disallowed」のリストを使うと限定度は下がり,セキュリティも低くなりま す.どのようにバランスを取るかは個々のサイトによります. サーバがスタートするとデフォルトのセキュリティモデルがインストールされます.これは以下のよ うなものです. In[9]:= Out[9]= MSP`Utility`AllowedContexts 8Global`< In[10]:= MSP`Utility`DisallowedContexts Out[10]= MSP`Utility`DisallowedContexts In[11]:= MSP`Utility`AllowedSymbols Out[11]= HoldComplete@Plus, Times, Power, Sqrt, Log, Exp, HoldComplete, ¶, p, ‰, °, GoldenRatio, Catalan, EulerGamma, OutputForm, StandardForm, List, Sin, Cos, Tan, Sec, Csc, Cot, Sinh, Cosh, Tanh, Sech, Csch, Coth, ArcSin, ArcCos, ArcTan, ArcSec, ArcCsc, ArcCot, ArcSinh, ArcCosh, ArcTanh, ArcSech, ArcCsch, ArcCoth, True, False, Derivative, D, Dt, Â, Greater, Less, GreaterEqual, LessEqual, Inequality, Equal, Re, Im, Abs, Sign, Conjugate, Arg, Round, Floor, Ceiling, Max, Min, Mod, Quotient, Not, And, Or, Xor, AiryAi, AiryAiPrime, AiryBi, AiryBiPrime, BesselJ, BesselK, BesselI, BesselY, Factorial, Binomial, Multinomial, Gamma, Beta, LogGamma, PolyGamma, LegendreP, SphericalHarmonicY, HermiteH, LaguerreL, Erf, Erfc, Erfi, InverseErf, InverseErfc, ClebschGordan, ThreeJSymbol, SixJSymbol, Zeta, FresnelS, FresnelC, CosIntegral, SinIntegral, ExpIntegralE, ExpIntegralEi, SinhIntegral, CoshIntegral, HypergeometricPFQ, Hypergeometric0F1, Hypergeometric1F1, Hypergeometric2F1, HypergeometricPFQRegularized, MeijerG, MSP`Security`Private`AppelF1, EllipticK, EllipticF, EllipticE, EllipticPi, JacobiZeta, EllipticNomeQ, EllipticLog, InverseEllipticNomeQ, JacobiAmplitude, EllipticExp, DiracDelta, UnitStep, DiscreteDelta, KroneckerDelta, Identity, Function, Slot, GrayLevel, Hue, RGBColor, CMYKColor, Automatic, None, All, NullD webMathematica User Guide In[12]:= MSP`Utility`DisallowedSymbols Out[12]= MSP`Utility`DisallowedSymbols 147 このモデルでは,Global`コンテキストに含まれるシンボルすべてと,多くの特別なシンボルが認め られます.これはژ度のセキュリティを提供する,かなり限定的なモデルです. 6.2.2 自分のセキュリティモデルのध定 自分でMSP`Utility`AllowedContexts,MSP`Utility`DisallowedContexts,MSP`Utility`AllowedSymbols, MSP`Utility`DisallowedSymbolsを定義することができます.この定義は/WEB-INF/confディレクトリの ファイルに置き,ファイルの名前はध定パラメータSecurityConfigurationFileで ध定してくだ さい.例えば,ध定情報がSecurityConfiguration.mとうい名前のファイルにある場合は,次のもの をMSP.confに加えてください. SecurityConfigurationFile=SecurityConfiguration.m 以下はセキュリティध定ファイルの例です.これはPlus,Times,Powerの他にはGlobal`コンテキ ストのシンボルしかԴ可しません.これは特に制限の度合いの強いセキュリティシステムですが,場 合によってはこのようなシステムが適しているかもしれません. MSP`Utility`AllowedSymbols= HoldComplete[Plus, Times, Power] MSP`Utility`AllowedContexts= {"Global`"} 「複数カーネルプール」のセクションで説明してあるように,異なるURLのリクエストには異なるध 定の詳細を使うことも可能です.これらの異なるプールには独自のध定ファイルがあり,従ってセキ ュリティシステムも独自にध定できるのです. Mathematica カーネルがӭ動される度に,上記の4つのセキュリティパラメータがログシステムに送ら れます. ご自分のセキュリティモデルをMathematica からテストすることができます.このためには,MSP Mathematica アプリケーションがMathematica のレイアウトにインストールされていなければなりませ ん.これはwebMathematica の実行には必要ありません.Mathematica のインタラクティブなセッショ ンでこの関数を使いたい場合にのみ必要なものです.これについては前の説明をご覧ください. Mathematica セッションから関数を実行します.まず,MSPアプリケーションをロードします. 148 In[1]:= webMathematica User Guide << MSP` 次にご自分のセキュリティध定をファイルに収め,これをMathematica にロードします.例題では上 記のध定情報を用い,ファイルをC:¥Tempディレクトリに置いています. In[2]:= SetSecurity@"C:\\Temp", "MySecurity.m"D Out[2]= True この入力が持っているのはGlobal`コンテキストにあるシンボルとPlusなので,セキュリティモデル を通過します. In[3]:= MSPToExpression@ "x+y"D Out[3]= x+y しかし,次ぎ入力はセキュリティシステムがԴ可しないSinというシンボルも持っているので,セキ ュリティシステムは通過しません. In[4]:= MSPToExpression@ "Sin@xD+y"D Throw::nocatch : Uncaught Short@Throw@8Sin@xD+y, Sin@xD+y<, MSPException@SecurityErrorDDD returned to top level. Out[4]= Hold@Throw@8Sin@xD+y, Sin@xD+y<, MSPException@SecurityErrorDDD 適 切 な セ キ ュ リ テ ィ シ ス テ ム を 決 定 し た ら , ご 自 分 の セ キ ュ リ テ ィ ध 定 フ ァ イ ル をw e b Mathematica/WEB-INF/confディレクトリに置いて,MSP.confのSecurityConfigurationFileパラ メータをध定することができます. 6.2.3 ToExpressionの有効性 MSPスクリプトの開発者がセキュリティシステムを熟知しておらず,入力変数に対してToExpres sionを直接呼び出すことがあるかもしれません.そうすると,ToExpressionはセキュリティシステ ムをバイパスし,潜在的な危؉を引きӭしてしまいます.このような場合にもセキュリティが保たれ るように,ToExpressionは第1引数がリクエストと共に送られる入力のどれかと一致した場合に有効 となるようになっています.このようにしてセキュリティシステムは次のようなב算を認証します. <msp:evaluate> val = ToExpression[$$num] </msp:evaluate> webMathematica User Guide 149 $$numの値がセキュリティテストをパスすると,ToExpressionが予定通りに作用します.しか し,セキュリティテストを通らないとセキュリティの例外が投げられます. このセキュリティテストはMathematica の変数MSP`Utility`CheckToExpressionをFalseにすると作 用しなくなります.また,MSP.confに以下を加えてもテストはできません. CheckToExpression=false このセキュリティ機能を使いたくないサイトは多分ほとんどないでしょう. もちろんToExpressionヘの文字列入力がリクエストと共に送られた入力から来てはいるが,何らか の方法で修正されているといったときは,ToExpressionヘの呼出しは認証を実行しません.このた め,ToExpressionは決して使わず,代りにMSPToExpressionをお使いになることを強くお勧めし ます. 6.2.4 アクセス制限 システムをモニターしたりデバッグしたりするカーネルモニタのように,システムの中でアクセスを 制限したいಊ分があるでしょう.その場合は,サイト管理の「ログ」と「カーネルモニタ」の項を参 照してください.「ApacheとTomcat」のセクションには,webMathematica をApache Webサーバから 使ったときにこれがどのようになるかの説明があります. 6.3 評価のフォーマット msp:evaluateタグの出力はWebのリクエストの一ಊとしてೊされるページに挿入されます.このセク ションではさまざまなタイプの出力のフォーマット方法について説明します.この問題はwebMathematica のページにMathematica コマンドを置く問題と関連があります.「付ຉ」の「MSPTaglibの参 照」の「<msp:evaluate>.」により詳しい説明があります. 自動フォーマット タグがב算した文字列ではない結果はすべて,必要なHTMLの拡張文字を伴った文字列にフォーマッ トされます.以下の例をご覧ください. 150 webMathematica User Guide <msp:evaluate> Range[5] </msp:evaluate> この種のフォーマットはフォーマットタイプがOutputFormのMSPFormatに等しいものです.MSPFormatに関する詳細は「Mathematica 関数のリファレンス」をご覧ください. MSPフォーマット MSPFormatを用いるとさまざまなスタイルに出力をフォーマットすることができます.以下の例で はMSPFormatでTraditionalFormをフォーマットタイプに使っています. <msp:evaluate> MSPFormat[Sqrt[ Sin[x]], TraditionalForm] </msp:evaluate> 出力はHTML形式,MathML形式,あるいは画像形式にフォーマットして生成することができま す.画像形式はタイプセットした式を表示する便利な方法です.MSPFormatに関する詳細は「Mathematica 関数のリファレンス」をご覧ください. 文字列のフォーマット msp:evaluateタグの結果が文字列の場合はフォーマットされず,そのまま出力ページに加えられま す.以下のようなHTMLを構築する際には,これは大変便利です. <msp:evaluate> StringJoin[ "<b>", ToString[ x], "</b>"] </msp:evaluate> 文字列をHTMLの拡張文字を伴った形にフォーマットしたい場合は,その文字列をMSPFormatでラ ップしてください. webMathematica User Guide 151 グラフィックスのフォーマット 出力に絵が入るようにグラフィックスオブジェクトをフォーマットする便利な関数があります.下記 の例ではプロットが示されます. <msp:evaluate> MSPShow[ Plot[Sin[x],{x,0,2Pi}]] </msp:evaluate> MSPShowに関する詳細は「Mathematica 関数のリファレンス」をご覧ください. 出力をͩす msp:evaluateタグを使って評価はしても,結果のページには何も残したくないこともあるでしょ う.そのような場合は以下のようにב算の後ろにセミコロン(;)を加えてください. <msp:evaluate> Needs[ "MyPackage"]; </msp:evaluate> セミコロンを加えることでMathematica のシンボルNullがೊされ,出力には何の痕टも残らないように フォーマットされます. どんなב算でも,たとえフォーマット関数,グラフィックス関数,Print出力やMessage出力をೊす 関数のどれかを使っていても,出力はͩされます.次の例ではメッセージを出力する関数の後ろにセ ミコロンが付いているので,出力は何も見えません. <msp:evaluate> MSPGetMessages[]; </msp:evaluate> 152 webMathematica User Guide 複数のב算 ひとつのmsp:evaluateタグで複数のב算をしたい場合は,別々のステップをセミコロン(;)で区切りま す.最後のב算の結果がフォーマットされて出力ページに表示されます.以下の例ではx+yというב 算の数値結果が現れます. <msp:evaluate> x = Sin[5.6]; y = Sqrt[x]; x+y </msp:evaluate> 最後のב算の結果もͩしたければ「出力をͩす」にあるようにセミコロン(;)を使います. 6.4 JSPの処理 このセクションではwebMathematica のためにJSPを処理するさまざまな段階について説明します. JSPはHTTPのトランザクションの一ಊとして処理されます.クライアントがサーバにリクエストを送 ると,サーバは応答をೊします.HTTPのリクエストの特徴のひとつに,サーバにパラメータと値も 一緒に送れるという点があります.パラメータは応答を選びこれをコントロールするのに使われるの で,上記の特徴はダイナミックな動作には不可欠なものです.応答はHTMLページでも,画像,Mathematica のノートブック,何らかのXML等その他のコンテントタイプでも構いません. JSPはそのJSPを実行しているサーブレットコンテナによって,上位のコマンドが下位のコマンドの前 に評価されるように下降法で処理されます.JSPは,MSP Taglibで定義されているカスタムタグによっ てwebMathematica をインタラクトします.下記のサンプルページをご覧ください. webMathematica User Guide 153 <%@ page language="java" %> <%@ taglib uri="/webMathematica-taglib"prefix="msp"%> <html> <title>page</title> <body> <msp:allocateKernel> <msp:evaluate> eval1 </msp:evaluate> <msp:evaluate> eval2 </msp:evaluate> </msp:allocateKernel> </body> </html> <msp:allocateKernel>タグはב算に使うMathematica カーネルの割当てに責任を持ち,入力変数とパ ラメータ,その他の初期化を割り当てます.割り当てられたカーネルはクリーンな状態になっていま す.<msp:allocateKernel>の詳細は後ろのセクションをご覧ください. 次に<msp:evaluate>タグが割り当てられたMathematica カーネルを使って入力を評価します.ある <msp:evaluate>タグで行われた割当てや定義は他でも見ることができます.<msp:evaluate>の 詳 細は後ろのセクションをご覧ください. 最後に</msp:allocateKernel>タグがMathematica カーネルをЖ放します.このタグはまず定義等をク リアしてカーネルをクリーンな状態にします.例えば例外を扱うように何らかの特殊処理が必要な場 合は,この時点で行われます.</msp:allocateKernel>の詳細は後ろのセクションをご覧くださ い. 上記以外にもたくさんのタグがあります.詳細はMSP Taglibのセクションをご覧ください. 6.5 複数カーネルプール アプリケーションによっては,別々のリクエストに応えるためにMathematica カーネルのプールをい くつか使うとよい場合があります.各プールのカーネル毎に,タイムアウトのパラメータや初期化フ ァイルのध定等を変えることができます.また,Mathematica カーネルが1つしかないプールをデモン ストレ-ションサーバとして利用し,Mathematica カーネルが4つある別のプールを使ってش客のリクエ ストに応えることもできます.こうすることで,ش客を優先することができます.複数のプールを使 う利点として,1セットのב算を他と完全に切り離せることも挙げられます.しかし,管理が複ܚに なりwebMathematica のライセンスもઉ加しなければならないという欠点もあります. 154 webMathematica User Guide webMathematica がӭ動されると,常にプールが1つ作られます.このプールは「Generalプール」と呼 ばれるものです.もしプールをઉ加したければ,以下の例で示すようにKernelPools文をMSP.confフ ァイルにઉ加してください. KernelPools=Examples,Test これは「Examples」と「Test」という2つのઉ加プールを指定しています.システムはMSP.confと 同じディレクトリにあるध定ファイル,Examples.confとTest.confを探します.これらのध定ファ イルで,主ファイルでध定されたパラメータを変更することができます.まだध定されていない値は MSP.confから値を取ります.プール特定のध定ファイルが見つからないときは,すべての値が M S P . c o n fか ら 取 ら れ ま す . こ れ ら の フ ァ イ ル に 置 く こ と の で き る パ ラ メ ー タ に つ い て は MSP.confに関するドキュメントをご覧ください. 複数のプールを使いたいときは,ӭ動したい数に応じたwebMathematica のライセンスが必要で す.「カーネルモニタ」には全プールの情報があるので,プールが適切に初期化されていることを確 認するのに適しています.サーブレットのログファイルにも各プールの情報があります.これについ ては「ログ」をご覧ください. 6.5.1 JSPのプールへのマッピング JSPのカスタムタグmsp:allocateKernelはカーネルの割当てに使われます.このタグがカーネルを 取るために使うプールは,使えるプールとJSPの名前によって決まります.これはMSP.confのPool Pathのध定で決まります.PoolPathはJSPのディレクトリをプールにマッピングします.以下の例を ご覧ください. KernelPools=Examples,Test PoolPath.Examples=ExampleDir PoolPath.Test=TestDir この例ではExamplesとTestの2つのカーネルプールが使われています.トップレベルのディレクトリ ExampleDirの中か,あるいはその下にあるJSPがExamplesプールを使い,TestDirディレクトリにあ る J S P がT e s tプ ー ルを 使い ま す. そ の他 のJ S P は G en e r a lプ ー ルを 使 いま す .例 えば ,w e b Mathematica/ExampleDir/Files/Work.jspを参照するhttp://host/webMathematica/Example Dir/Files/Work.jspはExamplesプールを使います. 155 webMathematica User Guide 6.5.2 複数のWebアプリケーション リクエストを分散する第3の方法として,複数のWebアプリケーションをインストールすることが考え られます.お使いのサーバがWebのアプリケーションに特別のध定を提供しているなら,これがよい 方法かもしれません.このためにはwebMathematica Webアプリケーションのインストールプロセスを 繰りೊし,新しいインストールの度に異なった名前を付けます.Java Virtual Machineと共通のインス タンスでӭ動するWebアプリケーションは,すべて同一のカーネルモニタを使用します. 6.6 URLのJSPへのマッピング webMathematica は大変単純にURLをJSPにマッピングします.URLは,web Mathematica Webアプリ ケーションの中か,あるいはそのサブディレクトリにあるJSPに名前を付けます.このセクションの 例をご覧ください. 最初の表で,MSP Script.jspはwebMathematica Webアプリケーションディレクトリのトップレベ ル , 例 え ば/ u sr / l o c a l / to m c a t/ w e b a p p s/ we bM ath em ati c aに あ り ま す . こ れ に は U R L http://host/webMathematica/Script.jspでアクセスすることができます. トップディレクトリ スクリプト名 Script. jsp スクリプトの場所 êusrêlocalêtomcatêwebappsêwebMathematica URL http:êêhostêwebMathematicaêScript. jsp 2番目の表では,Script1.mspはwebMathematica Webアプリケーションのサブディレクトリ,例えば /usr/local/tomcat/webapps/webMathematica/Testにあります.このJSPにはhttp://host/web Mathematica/Test/Script1.jspというURLでアクセスすることができます. サブディレクトリ スクリプト名 Script1. jsp スクリプトの場所 êusrêlocalêtomcatêwebappsêwebMathematicaêTest URL http:êêhostêwebMathematicaêTestêScript1. jsp WEB-INFディレクトリの中にJSPを置くべきではありません.こうするとそのJSPにアクセスできなく なってしまいます. 156 webMathematica User Guide 6.7 Mathematica の初期化 webMathematica はJavaパッケージを使ってプールつまり Mathematica カーネルのグループを管理しま す.そして,プールからカーネルを獲得してそれを使い,作業が終わると再びプールにೊしま す.カーネルマネージャはӭ動と初期化,所定の間隔でカーネルをシャットダウンすること,ध定さ れた制限時間を੶えるב算のタイムアウトに責任があります.カーネルは,シャットダウンされた後 で再ӭ動され再度初期化されます.このセクションでは初期化のプロセスと特別なध定の仕方を簡単 に説明します. 各Mathematica カーネルは,次のようにӭ動され初期化されます. † MSPアプリケーションがロードされる. † ImageDirectoryがध定される. † MSPDirectoryが$Pathに加えられる. † 時間制限のパラメータがध定される. † SecurityConfiguration.mファイルが(もしあれば)ロードされる. † セキュリティシステムがロックされる. MSP.confファイルにはध定のために選択的に2行付け加えることができます.下記をご覧ください. PackagesDirectory=/usr/local/myPackages KernelInitialization=Get["MyInit.m"] webMathematica は初期化の前にPackagesDirectoryをMathematica の$Pathに付け加えます.ですか ら,これをMSPアプリケーションのロードに使うこともできます.初期化の最終ステップで,評価の ためにKernelInitializationध定がMathematica カーネルに渡されます.特別なパッケージをロードする コマンドをこれに入れることもできます. 6.8 ログ 管理者はサーバが適切に動いていることを確認し,問題がӭったら,これを突き止めなければなりま せん. 問題の所在を突き止めるために見るべきもののひとつにログファイルがあります.これはwebMathematica が生成したログ情報をサーブレットコンテナが書き込むファイルです.Tomcatではこのログフ ァイルは一般に<path-to-tomcat>/logs/localhost_log.YYYY-MM-DD.txtで,ファイル名に日付け が含まれます.JRunの場合は<path-to-jrun>/logs/default-event.logです.これ以外のサーブレット に関しては,それぞれの関連文書をご覧ください.ログファイルが空の場合,サーブレットコンテナ をӭ動しているユーザにログファイルに直接書き込む書込みԴ可がない可能性があります.Unixコマ ンドのtail -fはこのファイルの出力をモニターするのに便利です. webMathematica User Guide 157 問題の所在を突き止めるために見るべきもののひとつにログファイルがあります.これはwebMathematica が生成したログ情報をサーブレットコンテナが書き込むファイルです.Tomcatではこのログフ ァイルは一般に<path-to-tomcat>/logs/localhost_log.YYYY-MM-DD.txtで,ファイル名に日付け が含まれます.JRunの場合は<path-to-jrun>/logs/default-event.logです.これ以外のサーブレット に関しては,それぞれの関連文書をご覧ください.ログファイルが空の場合,サーブレットコンテナ をӭ動しているユーザにログファイルに直接書き込む書込みԴ可がない可能性があります.Unixコマ ンドのtail -fはこのファイルの出力をモニターするのに便利です. 重大なエラーはログファイルに書き込まれます.システムがӭ動時に正しく機能していなければ,こ こを見るとよいでしょう.例えば,ध定ファイルが見つからなかったりカーネルがӭ動できないとい ったときは,このエラーはログファイルに記ຉされます.後に,カーネルをシャットダウンしなけれ ばならにような重大なエラーが生じた場合,これもまたログファイルに記ຉされます. VerboseLogsध定パラメータのध定によって,ログファイルへの2つのレベルの出力を選ぶことがで きます.falseとध定されていると各ページのアクセスにより1行の情報がログファイルに送られま す.これはサイトが正しくӭ動していることを確認する便利な方法です.VerboseLogsがtrueにな っていると多量の余分な情報がログファイルに送られます.これにはMathematica カーネルが生成す る全メッセージが含まれます. サイトをӭ動した後でも,ログの出力レベル等を,「カーネルモニタ」で説明するモニタを使って修 正することができます. 6.9 カーネルモニタ カーネルモニタはサイトを動かす際の情報を集めるサーブレットです.http://localhost:8080/webMathematica/KernelMonitorでモニタを見ることができます(ご自分のサーバにアクセスするURLはこ れとは異なることがあります).ここにアクセスするとwebMathematica の現在の状態が見られま す.サイトのさまざまなパラメータを説明し,各カーネルの状態も知らせます.このページにアクセ スし,次にどこかのJSPページにアクセスし,再度このページにアクセスするとカーネルのアクセス 数等がアップデートされているのが分かります. カーネルの状態を表示するモニタのセクションでは,サイトのパフォーマンスを検討するのに役立つ 情報が見られます.ここでは各カーネルがӭ動していた時間やサービスのリクエストに使った時間等 を見ることができます.また,両者の割合も分かります.プールに複数のカーネルがある場合,全体 の平均も見ることができます.リクエストに応えるために使われた時間の割合は,サイトへの負荷を 測る尺度になり,パフォーマンスをੴ整するのに役立ちます このページではいろいろなことがコントロールできます.一番上には全カーネルを再スタートするボ タン,モニタを再ロードするボタン,サーブレットに集められたログをクリアするボタン等がありま す.verbose logging(詳細ログ情報)のオン・オフを切り換えるボタンもあります.また,モニタの 出力中のログファイル全体を含むボタンもあります. 158 webMathematica User Guide 最後に,Mathematica の入力をユーザが捕え,それを表示できるボタンが2つあります.これらはデバ ッグの目的で使えます.これらのボタンの操作は「MSPのデバッグ」のセクションで説明されていま す. セキュリティのために,カーネルモニタヘのアクセスには制限をधけるとよいでしょう.サーブレッ トエンジンがApacheのWebサーバ経由でアクセスされるなら,アクセスはサーバध定ファイルで制限 することができます.この方法については「ApacheとTomcat」のセクションをご覧ください. 6.10 webMathematica のデバッグ webMathematica はサーバ内でב算を実行します.このため,デバッグには数多くの問題や制限があり ます.一般に,サーバ内で実行されているもののデバッグは,それが何であれ困難です. webMathematica のページの作成中に思う通りに動かない素材があったら,message文やprint文を使っ て 問 題 をЖ 決 しま す.M S PG et M e ssa g esを使 う と, ೊ される メッセ ージ が見ら れます .ま た,MSPGetPrintOutputを使うとprint文の出力が見られます.メッセージと出力の捕え方は例題 Messages.jspで説明してあります.ご自分のב算がインタラクティブなMathematica のセッションで問 題なく動くことを確かめるのもよい案です. メッセージと出力に加え,システムが提供するログとモニター機能も使えます.これについては「ロ グ」と「カーネルモニタ」のセクションで詳しく説明してあります.もっと簡単な方法はサーブレッ トエンジンが書き出したファイルを見ることです.モニタを使うのはよりژ度な方法です.モニタに は例えばhttp://localhost:8080/webMathematica/KernelMonitorのようなURLを使ってアクセスすることが できます.VerboseLogsをtrueにしてログのアウトプットをレベルをژくすると,より多量の出力 が得られます. 6.11 数式やグラフィックスの表示 サーバは,タイプセットされた数式やグラフィックスを表示するために,画像を生成することができ ます.これは,ב算結果を見る簡単な方法です.しかしこれには,クライアントは使えないという大 きな欠点があります.サイズੴ整もできませんしフォントを変えることもできません.他の方法で見 ることもできません.また,コンピュータのプログラムで画像から何らかの意味を抽出することも大 変困 難です.この画像生成の代りとなる方法がいくつか提供されています.数式の場合は MathMLを,グラフィックスにはSVGを使い,3Dのグラフィックスにはアプレットを配置することが できます.しかし,これらの代替法が常に適切なЖ決法であるとはいえません.そのため,画像を生 成する関数が備えられているのです. webMathematica User Guide 159 Mathematica のカーネルが画像を生成すると,その画像はサーバ上のファイルに保存され,ೊされる HTMLファイルにこのファイルへの参照が置かれます.例えば,次の例でimg要素が生成されたとし ましょう. <img src="/webMathematica/MSP?MSPStoreID=MSPStore1042942578_0&M SPStoreType=image/gif"alt="Createdby webMathematica"/> ファイル名を与えるパラメータを含む相対URLを介してSRC属性がMSPサーブレットを参照しま す.MSPサーブレットはファイルの内容をೊします.古くなった画像ファイルは定期的に削除されま す.画像ファイルが保存されている実際の場所はサーブレットコンテナが提供するワークプレースデ ィレクトリです. 画像生成に関してもっとお知りになりたければ「Mathematica 関数のリファレンス」の,特に MSPFormat,MSPShow,MSPShowAnimationをご覧ください. 画像生成の第3の方法としてMathematica コマンドのExportを使うことが考えられます.これは,関数 MSPExportImageと一緒に使うことができます.この関数は透過的な背景のようにより多くの機能 を提供しますが,生成には時間がかかります.MSPExportImageは常にMathematica のフロントエン ドを使います. MSP関数で画像をೊす MSPの関数には画像をೊすものがたくさんあります.MSPShow,MSPShowAnimation,MSPEx portImage,MSPFormat等が画像を返します.これらのコマンドの動きについては「Mathematica 関 数のリファレンス」セクションをご覧ください.これらはすべて,サーバにある画像を参照するのに 必要なimgタグを含む文字列を返します.次の例をご覧ください. <msp:evaluate> MSPShow[ graphics] </msp:evaluate> このため,次の例のようにMSP関数の後ろにセミコロン(;)を置くと,出力がͩされます.出力をͩす ためのセミコロンの使い方については「評価のフォーマット」をご覧ください. 160 webMathematica User Guide <msp:evaluate> MSPShow[ graphics]; </msp:evaluate> これらの関数は「HTML関数」におけるように,結果を何か他のフォーマット関数の中に埋め込むた めに使うこともできます.次の例は2つの画像を含むHTMLの表をೊします. <msp:evaluate> Needs["MSP`HTML`"] </msp:evaluate> <msp:evaluate> HTMLTableForm[{MSPShow[ g1], MSPShow[ g2]}] </msp:evaluate> 6.12 ऍ的なファイルを含む webMathematica は動的に生成された素材をೊします.しかし,web Mathematica が生成するWebのペー ジに,例えばデザイナーが生成したऍ的な画像を入れたい場合もあるでしょう.webMathematica に は,バナー,ボタン等の数多くの画像が含まれています.このセクションではwebMathematica ページ でどうやってऍ的なファイルを使うかについて説明します.画像ファイルに焦点を絞りますが,原則 は一般的に他のऍ的ファイルにも該当します. 画像はimgタグを付けてHTMLページに置かれます.これらのタグにとっては相対URLを使ってもと のHTMLページのあるサーバを参照する方が便利です.相対URLを使うWebのページはあるサーバか ら別のサーバに簡単に動かせます.相対URLには「/」で始まるものとそうでないものの2つのタイプ があります.以下のURLは「/」で始まっています. <img src="/webMathematica/images/banners/webm-white.gif" /> webMathematica がこのURLを含むページをೊすとブラウザはwebMathematica Webアプリケーション内 のimages/bannersディレクトリからその画像をロードしようとします.サーブレットコンテナがこ の画像をೊせるので,画像は正しく見えるはずです.もしもこのような画像のリクエストがうまく機 能せず,サーブレットコンテナを他のWebサーバのバックエンドとして使っている場合は,画像のリ クエストがサーブレットエンジンに正しく送られていることを確かめてください. webMathematica User Guide 161 ま た , 「 / 」 で 始 ま ら な い 相 対 U R L を 使 う 場 合 も あ り ま す . 例 え ば ,h t t p : / / s e r v e r / w e b Mathematica/Examples/DesignTemplates/HeatWave.jspのようなURLで生成されるHTMLペー ジの場合は,以下のようなimgタグを含む場合があります. <img src="heatwave/bullet.gif"/> この場合,ブラウザはサーブレットコンテナの処理で適切な画像ファイルをೊすhttp://server/web Mathematica/Examples/DesignTemplates/heatwave/bullet.gifというURLを持つ画像を取り出そ うとします.この方法だと画像とJSPが同じディレクトリに一緒に置けるので大変便利です. 162 webMathematica User Guide 7. トラブルシューティング このセクションでは問題やエラーの究明方法を説明します.まず,「最初のチェック」のセクション を見てください.ここには一般的な問題のЖ決方法が説明されています.ここで問題がЖ決しない場 合は「個々の問題」のセクションをご覧ください.Wolfram ResearchサポートWebサイトのwebMathematica 関連ページhttp://support.wolfram.co.jp/webmathematicaにもいろいろな情報があります.それでも 問題がЖ決せず,サポートを受ける権利がある場合は「問題のレポート」のセクションをご覧くださ い.サポートを受ける権利をお持ちでない場合は,webMathematica のフォーラム http://forums.wolfram.com/webmathematica/list/をご利用ください. 7.1 最初のチェック ブラウザを使ってwebMathematica のサーバと接続しようとしているのにうまくいかない場合,次のス テップをݠしてください 7.1.1 サーバのチェック サーブレットコンテナが確実に正しく動いていることを確かめてください.コンテナに付いている例 題に接続できないようならwebMathematica が動作していない可能性がژいといえます.サーブレット コンテナが動作するまでは,Wolfram Researchがお手伝いできることはほとんどありません. 7.1.2 URLのチェック サーブレットコンテナは動いているがwebMathematica は動かないという場合は,正しいURLを使って いるかどうかを確かめてください.URLには大文字・小文字の区別がありますので,ドキュメントと 同じよ うに大文字・小文 字を使い分けることが大切です.例えば,ht tp:/ /lo calh ost:80 80/webMathematica/Examples/Hello.jspでは大文字・小文字が正しく使われています.このURLがサーブレット コンテナと接続する際に常に使われていることが大切です.サーブレットコンテナでポート番号を指 定する必要があるなら,webMathematica でもそれを使う必要があります.例えば,TomcatとJRunへの 直接アクセスのデフォルトध定はそれぞれポート8080とポート8100です.ですからJRunへのURLは http://localhost:8100/webMathematica/Examples/Hello.jspになります. URLが正しくない場合は「Not Found (404)」というエラーメッセージがブラウザに出ます. webMathematica User Guide 163 7.1.3 最初のページのチェック http://localhost:8080/webMathematica/Examples/Hello.jspのようなwebMathematica のURLヘの応答として ブラウザにೊされた最初のページが何か他のエラーを示唆していたら,これを十分注意して検討して ください.よく最初のページで報告される問題に,ध定ファイルの位置が分からない,Mathematica がӭ動できないといったध定エラーがあります.最初のページを丹念にੴべ,インストールのページ を読みೊしたりこのセクションの後半に列挙してある問題に目を通したりすれば問題がЖ決できるこ とがよくあります. ページがೊされない場合はサーバが作動していないことを意味しています.上述のように,サーバが 動かなければwebMathematica も動きません. 最初のページが問題Ж決に役立たない場合でも,このページを保存してください.後で役立つ可能性 があります. 7.1.4 KernelMonitorのチェック KernelMonitorにはwebMathematica サイトの情報情報が含まれており,また,サーバのध定が間違って いる場合に情報を出力することができます.モニタはURL http://localhost:8080/webMathematica/KernelMonitorを介して見付けることができます(ご自分のサーバにアクセスする場合はURLが異なる場合が あります).モニタについての詳しい説明は前のセクションをご覧ください. 7.1.5 ログファイルのチェック 問題Ж決の情報で大変重要なのがログファイルです.これはサーブレットコンテナがwebMathematica が 生 成 し た ロ グ情 報 を 書 き 込 む フ ァイ ル で す .T o m c a tで は ログ ファ イ ルは 一 般に< t o m c a t dir>/logsディレクトリにあります.JRunでは<jrun-dir>/logs/default-event.logにあります.その他 のサーブレットコンテナの場合は,関連ドキュメントでੴべてください.ログファイルが空白の場 合,サーブレットコンテナをӭ動しているユーザがログファイルに直接書込みԴ可がない可能性があ ります.このファイルの出力をモニターするのには,Unixコマンドのtail -fが便利です. MSP.confファイルのVerboseLogsプロパティがtrueなら出力量は大きくなります.Verbose Logsがfalseのときは重大なエラーしか記ຉされません.出力ログをੴべることは問題を明らかにす るよい方法です. ログファイルが問題Ж決に役立たない場合でも,これを保存してください.後で役立つこと可能性が あります. 164 webMathematica User Guide 7.1.6 コンソールシェルのチェック サーブレットコンテナによってはコンソールシェルのコマンドラインからӭ動されているものもあり ます.ここにも関連情報があることがあります. 7.1.7 Mathematica のチェック サーブレットコンテナからӭ動するのと同じ要領でMathematica をӭ動してください.例え ば,Unix上ではサーブレットコンテナはよくtomcatとしてӭ動されるのでMathematica のӭ動もこの ように行います.Mathematica カーネルとフロントエンドの両方をこの要領でӭ動してください. Unix上でtomcatとしてMathematica カーネルをӭ動する典型的なコマンドは次のようになります. [user> su -c 'su tomcat -c math' Mathematica フロントエンドをtomcatとしてӭ動する場合は次のようになります. [user> su -c 'su tomcat -c mathematica' Windowsでなら,「スタート」メニューからMathematica のカーネルとフロントエンドをӭ動すること も可能です. このようにMathematica をӭ動すると,WebシステムがMathematica をӭ動するのを妨げている問題を 突き止めることができることがあります.ӭ動に失敗する原因のひとつに,ӭ動のために必要な Mathematica のライセンスが見つからないというものがあります.有効な Mathematica のライセンスが Mathematica のレイアウトにある,つまりmathpassファイルが$TopDirectory/Configuration/Li censingに置いてあるとこの問題はЖ決されると思われますので,これをご確認ください.マニュア ルの「Getting Started Mathematica」にライセンス関連のさらに詳しい情報があります. webMathematica User Guide 165 7.2 個々の問題 このセクションではwebMathematica をインストールしたりӭ動したりするときにӭるいくつかの問題 に つ い て 説 明 ま す . 「ロ グ」 と 「カ ー ネ ル モ ニ タ」 の セ ク シ ョ ンも 同 時 に ご 覧 く だ さい . ま た,「webMathematica のデバッグ」のセクションも役に立つ可能性があります. 7.2.1 フロントエンドをӭ動する際の問題 タイプセット画像やグラフィックスの描画,Mathematica Notebook API関数の使用等の操作には Mathematica のフロントエンドが必要です.UnixのマシンでX Window Systemをお使いの場合はインス トールセクションの「X Window Systemのध定」の指示に従っていることをご確認ください. 7.2.2 Xvncのテストの問題(Unixのみ) これはX Window SystemでwebMathematica をӭ動する際にのみ問題となる事柄です. インストール関連のセクションで説明したように,Mathematica のフロントエンドをӭ動するために は仮想フレームバッファXサーバのXvncをӭ動するのが一般的です.もしもこれが適切にӭ動してい ないようなら(例えばタイプセット画像がちゃんと描画されないようなら),vncviewerユーティリ ティを使ってフレームバッファの動作を検証してみるとよいでしょう. vncviewer :1 X vncサーバ用のパスワードを入力するとサーバが提供するスクリーンが表示されます.ここで Mathematica のフロントエンドが実行されているのを見ることができます.問題があると,それを告 げるダイアログボックスが現れます. 7.2.3 Xvfbのテストの問題(Unixのみ) 次はX Window SystemでwebMathematica をӭ動する際にのみ問題となる事柄です. XvfbはMathematica のフロントエンドが実行できる仮想フレームバッファXサーバです.もしもこれ が 適 切 に ӭ 動 して い な い よ う な ら (例 え ば タ イ プ セ ッ ト画 像 がち ゃん と 描画 さ れな いよ う な ら),xwdユーティリティを使ってフレームバッファの動作を検証してみるとよいでしょう. 166 webMathematica User Guide xwd -display :1 -root | xwud ध定によっては大変時間がかかることがあります.例えば仮想サーバのビット深度を24から16に変更 してパフォーマンスを向上させることができます.次ではサーバをビット深度24で実行しています. su tomcat -c "/usr/X11R6/bin/Xvfb:1 -screen 0 800x600x24"& 次はビット深度16でサーバを実行するコマンドです. su tomcat -c "/usr/X11R6/bin/Xvfb:1 -screen 0 800x600x16"& 7.2.4 画像の問題 プロット例題のように画像が入るはずのページで画像が見えない場合は,問題が記ຉされるログファ イルをチェックしてください.VerboseLogsをtrueにध定すると最大量の情報が得られます.KernelMonitorをチェックするのもよい考えです.ここには画像が書き込まれたディレクトリ名が書かれてい るからです. 画像ファイルはこのディレクトリに書き込まれているのにೊされたURLがこの場所を参 照していない場合は ,後ろのセクションにあるようにWebアプリケーションの名前をध定してみると よいかもしれません. タイプセットしてある画像が描画されない場合は,フロントエンドが適切にध定されているかどうか 確認してください. 7.2.5 Mathematica のパッケージとアプリケーション Mathematica のパッケージやアプリケーションの関数の使用に問題がある場合は,「 Mathematica パッ ケージとアプリケーション」のセクションをご覧ください.例えばMathematica のパッケージ形式で はないコードを使おうとすると,各リクエストに対する後処理のコードがデフォルトコンテキストの シンボルをすべて除去してしまうため,問題が生じる可能性があります. webMathematica User Guide 167 7.2.6 カーネルの初期化 KernelInitializationでデフォルトコンテキストにある記号の定義をध定すると,この定義は各リクエ ストの後処理のコードでクリアされ,記号は除去されてしまいます.これはコンテキストを適切に使 うためにMathematica のパッケージ形式で書かれていないKernelInitializationからロードされるパッ ケージにも該当します.どんな定義も名前を保存するためにそれ自身のコンテキストを使っていなけ ればなりません.このためには例えばTestNameSpace`Computeのように名前の前にコンテキスト をつけるか,あるいはBeginPackage[]とEndPackage[]を適切に使う必要があります. KernelInitializationパラメータを使う際の別のポイントに,パッケージによっては正しく初期化する ためにフロントエンドを必要とするものもあることも挙げておきましょう.このようなパッケージは UseFrontEndを使ってwebMathematica にロードできます.次の例をご覧ください. KernelInitialization=UseFrontEnd[Needs[ "MyApplication`"]] 7.2.7 フォーマットの際の縦方向の整列 上付き文字,下付き文字,分数等のフォーマットされた出力が縦方向に揃っていない場合,フォーマ ットしたものをテキストベースで出力していて,等幅フォントを使っていない可能性があります.テ キストベースのフォーマットには縦方向の整列のために等幅フォントが必要です. 7.2.8 時間切れの問題 時間切れのためにב算が終了しないと思ったら,ログシステムで確認することができます.この場 合,まず実行中のב算をチェックしてください.実行されているコードに問題があって予定よりも時 間がかかっている可能性があります.入力を普通のMathematica セッションでݠしてみることもでき ます.コードが正しく実行されているようであれば,KernelTimeLimitध定パラメータを増やすこと もできます. 7.2.9 UnsatisfiedLinkError webMathematica がうまく動かないとき,サーブレットログに UnsatisfiedLinkErrorの例外がレポート されていることがあります. 168 webMathematica User Guide Exception in thread "main" java.lang.UnsatisfiedLinkError:MLOpen at com.wolfram.jlink.NativeLink.MLOpen(Native Method) at com.wolfram.jlink.NativeLink.<<init>(Unknown Source) at com.wolfram.jlink.MathLinkFactory.createMathLinkGuts(Unknown=Source) at com.wolfram.jlink.MathLinkFactory.createMathLink(Unknown=Source) at com.wolfram.jlink.MathLinkFactory.createKernelLinkGuts(Unknown Source) at com.wolfram.jlink.MathLinkFactory.createKernelLink(Unknown=Source) これは,J/Link が正しくインストールされていない,特にJavaシステムが動的ライブラリを見付けら れないことを意味しています.このライブラリはUnixではlibJLinkNativeLibrary.soと呼ばれ,WindowsではJLinkNativeLibrary.dllと呼ばれ,Mac OS XではlibJLinkNativeLibrary.jnilibと呼ばれま す. サーブレットコンテナによってはWebアプリケーションの内側からはネイティブライブラリを ロードしないものもあります.この場合はWEB-INF/libから一般的なディレクトリにSystemFilesを コピーし,後で指摘するようにJLinkNativeLibraryDirectoryध定パラメータに変更を加えてくださ い. Tomcatのようにサーブレットコンテナの多くはWebアプリケーションの内側からはネイティブラ イブラリをロードすることができます.その場合はwebMathematica 内ಊのJ/Link のバージョンが動 きますので,上述の問題がӭこった場合はサポートまでご連絡ください. 7.2.10 JLink`がロードできない webMathematica がうまく動かないときに,JLink`がロードされていないというサーブレットログを目 にすることがあるでしょう. Error:: Mathematicacannot load JLink`. Check that the JLink Mathematicaapplication has been installed as described in the JLink documentation. これはJ/Link が正しくインストールされていない,特に Mathematica がMathematica アプリケーション のJ/Link を見付けられないことを意味しています.web Mathematica には独自バージョンのJ/Link が含 まれているのでこの問題はӭりません.何か問題がӭった場合は代理店にご連絡ください. 7.2.11 NoClassDefFoundError: TryCatchFinally webMathematica がうまく動かないときに,サーブレットのログに TryCatchFinallyに関するNoClass DefFoundErrorの例外が報告されることがあります. webMathematica User Guide 169 500 Internal Server Error /webMathematica/Examples/Hello.jsp: javax/servlet/jsp/tagext/TryCatchFinally java.lang.NoClassDefFoundError:javax/servlet/jsp/tagext/TryCatchFinally at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:509) at java.lang.ClassLoader.defineClass(ClassLoader.java:438) このエラーはJSP 1.2 APIをサポートしていない旧式のサーブレットコンテナでweb Mathematica のカス タムJSPタグを使うとӭります.サーブレットエンジンをアップデートしなくても「以前のwebMathematica技術」の説明に従ってwebMathematica を使うことができます. 7.2.12 NoClassDefFoundError: JLink Classes webMathematica がうまく動かないときに,Webの最初のページあるいはサーブレットログに NoClass DefFoundErrorの例外が報告されることがあります.下の例をご覧ください. java.lang.NoClassDefFoundError:com/wolfram/jlink/MathLinkException at java.lang.Class.newInstance0(Native Method) at java.lang.Class.newInstance(Class.java:237) これでJ/Link が正しくインストールされていないこと,より具体的にはJavaシステムが J/Link Javaアー カイブを見付けられていないことが分かります.このアーカイブはJ Link.jarと呼ばれるもので す.webMathematica にはJ/Link の独自のバージョンが入っているので,この問題はӭるはずがありま せんが,不具合があった場合はサポートまでご連絡ください. 7.2.13 NoSuchMethodError: KernelData webMathematica がうまく動作しない場合,最初のページかサーバのログに KernelDataクラスの startInitメソッドの内ಊで生成されるのNoSuchMethodError例外がレポートされることがありま す.以下はその例です. 170 webMathematica User Guide java.lang.NoSuchMethodErrorat com.wolfram.kerneltools.KernelData.startInit(Unknown Source) at com.wolfram.kerneltools.KernelPool.initKernels(Unknown Source) at com.wolfram.kerneltools.KernelPoolManager.acquireKernelPool(Unknown Source) これはJ/Link の古いバージョンでwebMathematica を実行しようとするとӭります.Javaランタイムに JLink.jarを直接インストールしたことがあった場合にありがちです.一般に,Javaランタイムにクラ スをインストールすることはお勧めできません.このエラーのように,新しいバージョンが入手可能 になってもそのクラスが常にロードされるからです.ご自分のJLink.jar用のJavaのコピーを探してこれ を削除してください.ネイティブライブラリのJLinkNativeLibraryも削除した方がいいでしょう.こ れはよくSystemFilesディレクトリにあります.webMathematica には専用のJ/Link のコピーが入って いるので,JavaランタイムにJ/Link をインストールする必要はありません. 7.3 問題のレポート 問題がЖ決できず,サポートを受ける権利がある場合は次の情報を準備してください.送られる情報 が詳しければ詳しいほど,問題を究明するのが簡単になります. † お使いのwebMathematica のバージョン番号(例:webMathematica 2.1) † お使いのMathematica のバージョン番号(例:Mathematica 5.0) † お使いのコンピュータのオペレーティングシステムのバージョン番号(例:Windows 2000) † お使いのサーブレットエンジン † お使いのHTTPサーバ(該当する場合のみ,例:Apache) † 問題の要約(問題の再現に必要なステップも含めて1 2行に要約してください) さらに,インストールの問題では次の事柄も役に立ちます. † 最初のHTMLページのコピー † サーブレットログファイルのコピー サポートをリクエストするときは,上記を添付してください. サポートを受ける権利をお持ちでない場合は,下記URLのwebMathematica フォーラムまで問題点をお 寄せください. http://forums.wolfram.com/webmathematica/list/. webMathematica User Guide 171 8. 以前の webMathematica 技術 webMathematica 1.0はMSPスクリプトとして知られているものに基づいたHTMLテンプレートの形式を 提供していました.新Ӫユーザの方にはMSP TaglibからJSPを使われることをお勧めしますが,新しい バージョンのwebMathematica でもMSPスクリプトはサポートされています.この2つの技術は大変緊 密に結び付いていて,一方からもう一方へとても簡単に変換することができます.以前のwebMathematica の技術は,JSP 1.2 APIをサポートしない古いタイプのサーブレットコンテナをお使いの方には 便利かもしれません.この場合は,上述のようにNoClassDefFoundErrorエラーが出されます. 8.1 MSPスクリプトのJSPへの変換 このセクションではMSPスクリプトとMSP Taglibを使っているJSPの変換について説明します.MSPで 使えるMathematica のコマンドのほとんどがJSPでも使えます.ですから,MSPをJSPに変換すること は可能です.JSPで使うことのできないMathematica のコマンドはMSPIncludeだけです.この機能を 使 わなけ ればならないの なら,代りにj sp : i nc l udeを使う ようにしなけれ ばなりません.しか し,JSPのメカニズムはMSPのそれよりもはるかに豊かなので,JSPの中にはMSPに変換するのが困難 なものもあります. 8.1.1 MSPのJSPへの変換 これは例題Plot.mspを使って説明します.このテキストは以下をご覧ください. 172 webMathematica User Guide <html> <head> <title>Plot</title> </head> <body> <h1>Plot</h1> <form action="Plot"method="post"> Enter a function: <input type="text" name="fun" size="24" value="<%MathletMSPValue[ $$fun, "Sin[x]^2"] %>"> Enter a number: <input type="text" name="x1" size="24" value="<%MathletMSPValue[ $$x1, "10"] %>"> <br/> <%Mathlet MSPBlock[{$$fun,$$x1}, MSPShow[Plot[$$fun,{x,0,$$x1}]]] %> <hr/> <input type="submit"name="btnSubmit"value="Evaluate"> </form> </body> </html> これに対応するJSPのPlot.jspは次の通りです. webMathematica User Guide 173 <%@ page language="java" %> <%@ taglib uri="/webMathematica-taglib"prefix="msp"%> <html> <head> <title>Plot</title> </head> <body bgcolor="#ffffff"> <form action="Plot.jsp"method="post"> <msp:allocateKernel> Enter a function: <input type="text" name="fun" size="24" value = "<msp:evaluate>MSPValue[$$fun, "Sin[x]^2"]</msp:evaluate>" /> Enter a number: <input type="text" name="x1" size="24" value = "<msp:evaluate>MSPValue[$$x1, "10"]</msp:evaluate>" /> <br> <msp:evaluate> MSPBlock[ {$$fun, $$x1}, MSPShow[ Plot[$$fun, {x,0,$$x1}]]] </msp:evaluate> <hr> </msp:allocateKernel> <input type="submit"name="btnSubmit"value="Evaluate"> </form> </body> </html> 違いは極めて明らかです.以下にまとめます. † スクリプトがJSPとなるように名前を変える. † スクリプトは(WEB-INFディレクトリの中ではなく)webMathematica Webアプリケーション に置かなければならない. † スクリプトの冒頭に次の行を加えなければならない. 174 webMathematica User Guide <%@ page language="java" %> <%@ taglib uri="/webMathematica-taglib"prefix="msp"%> † 評価はすべて<allocateKernel>でラップしなければならない † <%Mathlet expr %>は<msp:evaluate>expr</msp:evaluate>で置き換えなければならな い. † MSPIncludeの代りにjsp:includeを使うようにする以外に,Mathematica のב算を変更する必 要はない. † Mathematica のパッケージがMSPDirectoryの内ಊからロードされている場合は,これを WEB-INF/Applicationsにあるディレクトリに置くようにしなければならない. 8.1.2 JSPのMSPへの変換 前のセクションのステップを逆方向に進むと,MSP Taglibを使っているJSPをMSPに戻すことができま す.これは,上記以外のJSPの機能が使われておらず,使われているMSP Taglibのタグが msp:allocateKernelとmsp:evaluateだけの場合に限られます. 8.2 複数カーネルプールとMSPスクリプト 「複数カーネルプール」は複数グループのカーネルをサポートするメカニズムを提供します.各々の グループが異なったध定情報を持ち,異なった内容を配信します.これらはMSPスクリプトのために サポートされていて,URLにプールの名前をध定することでスクリプト名から配列されたプールへマ ッピングします.例えば,http://host/webMathematica/MSP/Examples/ScriptはExamplesとい うプールでScript.mspというスクリプトを探します.プールのための名前が指定されていなけれ ば,スクリプトはGeneralプールから取ったMathematica のカーネルで処理されます.プールの探索は サブディレクトリの探索の前に行われます.これについては後で説明します. 8.3 MSPスクリプトの処理 このセクションではMSPの処理のさまざまな段階を説明します.先の項で説明したように,MSPは webMathematica Webテクノロジーの旧形式です. webMathematica User Guide 175 8.3.1 HTTPとMSPスクリプト MSPのスクリプトはHTTPのトランザクションの一ಊとして処理されます.クライアントがサーバに リクエストを送ると応答がೊされます.HTTPのリクエストの機能のひとつにパラメータと値がサー バに送れるというものがあります.これはあらゆる動的な動作の基本です.パラメータは応答を選び 制御するために使われるからです.応答は一般にHTMLページの形で送られますが,他の形を取るこ ともあります.例として画像,Mathematica ノートブック,何らかの形のXML等が挙げられます. 8.3.2 MSPサーブレット webMathematica テクノロジーの基本コンポーネントはMSPサーブレットです.これはリクエストを処 理し,サイトから応答をೊすために使われます.http://host/webMathematica/MSP/Scriptのよう なURLでwebMathematica Webアプリケーションとそれが含んでいるMSPのサーブレットが見付けられ ます.これはデフォルトのध定ファイルweb.xmlによって可能になります.このファイルはURLに MSPを含むリクエストがMSPサーブレットに向けられるようにするサーブレットのマッピングの方法 をध定します. MSPサーブレットは各リクエストを別々のスレッドで扱うので,1度に2つ以上のリクエストを処理す ることができます.まず,スクリプト名を決定し,次にMathematica カーネルを入手して変数を割り 当て,該当ページやそのページに含まれているmathletを処理し,必要なら後処理を行い,結果をೊし ます. スクリプト名の決定 MSPサーブレットの最初の仕事はスクリプト名を決定するためにURLを分割することです.一般に 「MSP」というサーブレットの名前の後ろで,URLに置かれたパラメータに先行するಊ分を取り出し ます.これはPathInfoとして知られていてCGIの変数PATH_INFOと等しいものです.前置あるいは 後置のスラッシュ記号(/)はPathInfoからは取り除かれます.PathInfoに複数の要素がある場合は,最 初の要素が取り出されてセッションプール名と比ѕされます.一致したプールがあるとP ath Info(プール名が取り除かれたもの)がMSPスクリプトに使われ,これに対応するセッションプール が使われます.一致するものがなければPathInfo全体がMSPスクリプトの名前として使われ,Gen eralプールが使われます. カーネルプールとはMathematica カーネルの集合のことです.これについては「 複数カーネルプー ル」に関するセクションで説明してあります.デフォルトでは「Generalプール」という1つのプール しかありません.URLの残りのಊ分が使用するスクリプトを示します.この中にサブディレクトリに 関する情報が含まれていることもあります.セッションプールやMSPの名前にはバックスラッシュ (\)やコロン(:)のような記号を入れることはできません.プラットフォームによってはこのような記号 をパスのセパレータとして使うものもあるからです.では例題でこのプロセスを見ていきましょう. 176 webMathematica User Guide http://host/webMathematica/MSP/ComputeというURLのPathInfoはComputeです.ここには プールの名前は入っていません.ですからスクリプトはCompute.mspになり,カーネルのGen eralプールが使われます. http://host/webMathematica/MSP/Examples/ComputeというURLでは,PathInfoはExamples/ Computeです.Examplesという名前のセッションプールがあれば,このプールのCompute.mspと いうスクリプトが使われます.Examplesという名前のセッションプールがなければ,スクリプトは ExamplesというサブディレクトリのCompute.mspになります. http://host/webMathematica/MSP/Examples/Tests/ComputeというURLでは,PathInfoは Examples/Tests/Computeです.Examplesという名前のカーネルプールがあれば,Testsというサ ブディレクトリの中にあるこのプールのCompute.mspというスクリプトが使われます.Exam plesという名前のカーネルプールがなければ,スクリプトはExamples/Testsというサブディレクト リのCompute.mspになります. スクリプト名を$ScriptNameという変数で指定することもできます.これはURL上でध定できま す.例えば,http://host/webMathematica/MSP?$ScriptName=Computeはhttp://host/web Mathematica/MSP/Computeと同じスクリプトを参照します. Mathematica カーネルの獲得 MSPサーブレットは,先のセクションで説明したように,選ばれたカーネルプールのMathematica カーネルをリクエストします.指定されたプールがない場合はGeneralプールが使われます.プール にはב算のためにMathematica カーネルが待機しています.すぐ使えるカーネルがないときは,シス テムは使えるようになるまで待機します.プールしてあるものを使うので,複数のリクエストが Mathematica カーネルを共有することができ,システムの応答時間が短くなります. 各リクエストが全く別のカーネルを呼び出す可能性がありますのでご注意ください.あるMathematica カーネルで何かを保存し,次回にまた使うことは期待できません. 入力変数の割当て リクエストで送られた変数は,次に値と共にMathematica カーネルに送られます.変数symと値 funに,Mathematica の$$sym = "fun"という割当てが行われます.これで,値はMathematica の文字 列として送られ,何らかの特別のアクションなしでは評価されなくなります.input要素だけが変数 のソースではないのでご注意ください.例えば,画像マップも変数を転送します.webMathematica は これらの変数の名前を付け替えて,ユーザのMSP中のMathematica コードと干渉し合うことをഛぎま す. 各変数はスキャンされ,有効なMathematica のシンボルであるかどうか確認されます.「.」という記 号はすべてバッククォート(`)で置き換えられます.またアンダースコア(_)は「U」で置き換えられま す.名前の変換はJ/Link におけるそれと一致します. 177 webMathematica User Guide 以下は変数名の変換例です. サーバ変数 Mathematica のシンボル input $$input name.x $$name`x var_x $$varUx その後,各変数は文字,数字,ドル記号($),バッククォート記号(`)しか含んでいないことが確認され ます.これにより,エクスクラメーション記号(!)で始まる変数を送る攻撃が抑止されます.エクスク ラメーション記号で始まる変数はMathematica にオペレーティングシステムのシェルの操作を始めさ せ可能性があるので,潜在的な危؉性を孕んでいるのです. 各値はMathematica の文字列になります.ここで,バックスラッシュ記号(\)やダブルクォート記号 (")があると,バックスラッシュ記号(\)がઉ加される形で拡張されます.値がエクスクラメーション記 号(!)で始まっている場合は,スペースが加えられます.最後にダブルクォート(")が前後に加えられま す. サーバの値 Mathematica の値 Sin@x+yD " Sin@x+yD " !myBoolean " !myBoolean" "¥foo¥bar " " ¥" ¥¥ foo ¥¥ bar ¥" " ページとMathletの処理 Mathematica カーネルとのインタラクションはMSPIncludeを呼び出すことで始まります.MSPIn cludeはMSPDirectoryにスクリプトを見付け,Mathletタグを求めてこれをスキャンします.各 Mathletの内容が評価されます.この際,値を処理して画像を保存するMSPの関数を呼び出すこともあ ります.Mathletを処理した結果が文字列なら,この文字列はHTMLページに含まれるようにೊされま す.結果が文字列でなければMSPFormatでフォーマットされます.これでMathletがHTMLの文字列 をೊせるようになります.また,常に文字列をೊす必要があるわけではないので便利でもあります. MSPExceptionが投げられた場合,それはMathletの処理コードで受け取られ,適切なエラーメッセー ジが挿入されます. MSPReturnコマンドが評価されると,現行のものを含むすべてのMathletの処理が直ちに終了さ れ,結果がMSPサーブレットにೊされます.コンテントタイプはMSPサーブレットが決定できるよう な形で保存されます.MSPReturnコマンドが1つもなければ,MSPスクリプトの内容は,各Mathletが そ の 評 価 の 結 果で 置 き 換 え ら れ て ೊさ れ ま す . こ の 場 合の コ ンテ ント タ イプ は デフ ォル ト の text/htmlですが,これはMSPPageOptionsのContentTypeオプションのध定を使って変えること ができます. MSPReturnコマンドが評価されると,現行のものを含むすべてのMathletの処理が直ちに終了さ 178 webMathematica User Guide れ,結果がMSPサーブレットにೊされます.コンテントタイプはMSPサーブレットが決定できるよう な形で保存されます.MSPReturnコマンドが1つもなければ,MSPスクリプトの内容は,各Mathletが そ の 評 価 の 結 果で 置 き 換 え ら れ て ೊさ れ ま す . こ の 場 合の コ ンテ ント タ イプ は デフ ォル ト の text/htmlですが,これはMSPPageOptionsのContentTypeオプションのध定を使って変えること ができます. 各Mathletの処理はTimeConstrainedでラップされます.時間のパラメータはKernelTimeLimitध定 パラメータからב算されます. ページの処理中にMathematica のメッセージが生成されると,そのメッセージは MathLink 接続を通し てMSPサーブレットにೊされます.MathLink のパケットリスナがメッセージを捕らえ,MSPのログシ ステムにこれを送ります.これが詳細モードでӭ動されているとメッセージが表示されます.パケッ トリスナの説明はJ/Link のドキュメントにあります. 後処理 カーネルが結果をೊした後,MSPサーブレットはカーネルにリクエストのコンテントタイプを決める ように求めます.一般に,これはtext/htmlですが,Mathematica ノートブック用の application/mathematicaやGIF画像用のimage/gifのようにこれとは違ったものの場合もありま す.このように異なったコンテントタイプはMSP関数のMSPReturnによって,あるいはMSPPage OptionsのContentTypeオプションのध定で生成することができます. $ContextPathがページがロードされる前の値に再ध定されます.Needsを使うとページのリクエス ト毎にパッケージをロードしなくて済みます.Mathematica ブックにはNeedsのさらに詳しい使い方 が載っています. カーネルはリクエストと共に送られたパラメータの値をクリアし,デフォルトコンテキストのシンボ ルをすべて除去してクリーンな状態になります.加えて,Javaオブジェクトの参照はどれも除去さ れ,開かれたストリームはすべて閉じられます.そして,カーネルはカーネルプールに戻され,次の リクエストに備えます. 応答 クライアントへの応答は結果とコンテントタイプからなっています.これでリクエストが完成しまし た. 画像処理 画像が加わると,この手順が少し変わります.MSPFormatあるいはMSPShowが画像を生成する と,その画像はファイルに保存され,そのファイルを参照するimgタグがೊされます. webMathematica User Guide 179 <img src="/webMathematica/MSP?MSPStoreID=MSPStore1043815006_0&M SPStoreType=image/gif"alt="Createdby webMathematica"/> SRC属性はMSPサーブレットを相対URLを介して参照し,ファイルの名前を与えるパラメータを渡し ます.MSPサーブレットはファイルの内容をೊし,定期的に古い画像ファイルを削除する操作を行い ます. ध定ファイルには,画像が保存されているディレクトリ名がImageDirectoryでध定されます.プロ ットその他の画像がうまく動かない場合は,画像ディレクトリに関連した問題がないかどうかをログ ファイルで確認してください.ログファイルについては「ログ」をご参照ください. 8.3.3 まとめ ページ処理の概要は「webMathematica の技術」をご覧ください. 8.4 URLのMSPスクリプトへのマッピング MSPスクリプトに自分で内容を書くようなwebMathematica のユーザの方に必要なことですが,MSPの スクリプトはwebMathematica Webアプリケーションの内ಊ,/webMathatica/WEB-INF/MSP Scriptsディレクトリにあります.これはध定ファイルMSP.confのध 定MSPDirectoryを変えること で変更することができます.もちろん,MSPは,全ಊ同じディレクトリに入れるのではなく,いろい ろな場所に置きたいでしょう.このセクションではその方法について説明します. 8.4.1 スクリプトのディレクトリ http://host/webMathematica/MSP/ScriptのようなURLはメインディレクトリでScript.mspとい うMSPを探します.MSPスクリプトはメインディレクトリのサブディレクトリに入れることもできま す.例えばhttp://host/webMathematica/MSP/Test/Script1のようなURLの場合はTestというサ ブディレクトリの中にあるScript1.mspを見付け出します.サブディレクトリからMSPをロードした ときは,そのディレクトリ内にあるMathematica のパッケージやアプリケーションがサブディレクト リの名前を指定しなくてもロードできるように,そのサブディレクトリがMathematica $Pathに加え られます.webMathematica に付いているExamplesディレクトリ内のMSPスクリプトの多くは,この機 能を利用しています. 180 webMathematica User Guide 次の2つの表は,メインディレクトリとサブディレクトリからのMSPスクリプトのロードのまとめで す. 最初の表ではScript.mspというMSPスクリプトがメインディレクトリ/usr/local/server/filesに置か れています.これにはhttp://host/webMathematica/MSP/ScriptというURLでアクセスすることが できます.ध定パラメータのMSPDirectoryがこのディレクトリの場所を指定します.この場所は Mathematica $Pathに加えられます. メインディレクトリ スクリプト名 Script.msp スクリプトの場所 êusrêlocalêtomcatêwebappsêwebMathematicaêWEBINFêMSPScripts URL http:êêhostêwebMathematicaêMSPêScript 2 番 目 の 表 で はS c r i p t 1 . m s pが メ イ ン デ ィ レ ク ト リ の サ ブ デ ィ レ ク ト リ /usr/local/tomcat/webapps/webMathematica/WEB-INF/MSPScripts/Testに置かれていま す.このMSPスクリプトにはhttp://host/webMathematica/MSP/Test/Script1というURLでアク セスすることができます.Mathematica のカーネルでは/usr/local/tomcat/webapps/web Mathematica/WEB-INF/MSPScriptsと/usr/local/tomcat/webapps/webMathematica/WEBINF/MSPScripts/Testという2つのディレクトリが$Pathに加えられます. サブディレクトリ スクリプト名 Script1.msp スクリプトの場所 êusrêlocalêtomcatêwebappsêwebMathematicaêWEBINFêMSPScriptsêTest URL http:êêhostêwebMathematicaêMSPêTestêScript1 メインディレクトリのMSPにもサブディレクトリMSPのにも同じカーネルプールが使われることにご 注意ください.現在のところ,ध定の詳細はどれも同じになっています. 8.5 MSPスクリプトとऍ的ファイル MSPはऍ的ファイルを特別な方法で処理します.相対URLは,適切な内容を読み込んでೊすMSPサー ブレットを実際には参照するからです.MSPのサーブレットが有効なऍ的内容として認ށするファイ ルの拡張子はध定パラメータのStaticFileExtensionsでध定されます.デフォルト値は次の通りです. webMathematica User Guide 181 StaticFileExtensions=gif:image/gif,jpg:image/jpeg,jpeg:image/jpeg ご自分のサイトからऍ的ファイルに接続したいとは思われないのであれば,この定義は無視して構い ません.また,サウンドやスクリプトアーカイブのような他のフォーマットのための拡張子をઉ加す ることもできます. 8.6 MSPスクリプトの例題 以下はMSPのサンプルです.それぞれにMSPスクリプトの詳細や特徴が現れています.この全サンプ ルのソースがMSPScripts/ExamplesディレクトリににあるMathematica MSPアプリケーションに収め られています. 8.6.1 はじめに:Hello.msp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/MSP/Examples/HelloでこのMSPスクリプトに接続することができます(ご自分のサーバに接続するURLは これとは多少異なる場合もあります). この例ではMathematica のDate[]関数を評価します.結果はこのページにアクセスする度に変化 し,これが実際に動的なプロセスであることを示します.サーバは「Hello」のリクエストを見て Hello.mspというMSPを探します.このページのソースはMSPScripts/Examples/Hello.mspにあり ます. <html> <head> <title>Hello World (MSP)</title> </head> <body> <h1>Hello World (MSP)</h1> <h4>Date[]</h4> <%Mathlet Date::usage%> <p>Its current value is:</p> <%Mathlet Date[] %> </body> </html> 182 webMathematica User Guide これはほば標準的なHTMLですが,<%Mathlet expr %>という2つのMathletのタグが含まれていま す.Mathematica はこのタグの付いたものすべてに関し,内容を評価しフォーマットした結果で置換 します.これで新しいHTMLドキュメントが作成され,それがクライアントにೊされます. この例ではユーザはページを呼び出しているだけですから,ちっとも面白くないでしょう.インタラ クティブな動作をさせるためには,ユーザ自身がリクエストに入力値を加えて送らなければなりませ ん.次の例「Variables.msp」ではこれについて考えてみましょう. 8.6.2 変数を使う:Variables.msp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/MSP/Examples/VariablesでこのMSPスクリプトに接続することができます(ご自分のサーバに接続する URLはこれとは多少異なる場合もあります).この例では変数が入力にどのように連結されるかが示 されます.このページのソースはMSPScripts/Examples/Variables.mspにあります. <html> <head> <title>AssigningVariables</title> </head> <body> <h1>AssigningVariables</h1> <form action="Variables"method="post"> Enter something: <input type="text" name="input" size="10"> <br> <%Mathlet $$input %> <br> <input type="submit"name="submitButton"value="Evaluate"> </form> </body> </html> これにはformとinput要素が入っていて,先程のものよりも複ܚになっていますが,これはクライア ントとのインタラクションを行う重要な方法です. form要素はinput要素を持つHTMLのブロックです.submitタイプのinputを送ることでformが活性 化されます.submitはinputタグに関連した名前と値をサーバに送信します.ここでは,form要素の 最初のタグには2つの属性があります.action属性はformが活性化されたときに接続するURLを参照 します.ここではオリジナルのVariablesスクリプトを示す相対URLが参照されています.method属 性はブラウザにどのHTTPメソッドを使うかを指示します.ここではpostメソッド(これが一般的で す)になっています. この例には2つのinputタグがあります.最初のタグはページのユーザがテキストを入力することをԴ 可し,2つ目のタグは,押されるとformを送るボタンを指定します.formは,送信されるとinput要 素からの情報をaction属性で指定されたURLに送ります.この場合は同一のMSPです.ユーザが入力 した情報はMathematica のカーネルに送られ,Mathematica のシンボルに割り当てられます.シンボル 名はname属性の値の前に$$を付けたものになります.ここではname属性はinputで,Mathematica のシンボル$$inputがinput要素の内容に割り当てられます. webMathematica User Guide 183 この例には2つのinputタグがあります.最初のタグはページのユーザがテキストを入力することをԴ 可し,2つ目のタグは,押されるとformを送るボタンを指定します.formは,送信されるとinput要 素からの情報をaction属性で指定されたURLに送ります.この場合は同一のMSPです.ユーザが入力 した情報はMathematica のカーネルに送られ,Mathematica のシンボルに割り当てられます.シンボル 名はname属性の値の前に$$を付けたものになります.ここではname属性はinputで,Mathematica のシンボル$$inputがinput要素の内容に割り当てられます. このページに最初にアクセスしたときは,$$inputの値はありません.テキストフィールドに値が記 入され,「Evaluate」ボタンが押されて,はじめてテキストが表示されます.値はMathematicaの文 字列で,「5+7」のようなב算を入力しても実際のב算は行われない点に注意してください.Mathematica で入力をЖ釈し評価したい場合はMSP関数のどれかを使わなければなりません. Mathematica のシンボルはすべて$$で始まっているので,サーバから定義を受けるMathematica のシン ボルをその他のシンボルと見分けることができます.これは画像マップのようなサーバからのシンボ ルが他のMathematica のシンボルと重ならないようにするために必要です. 8.6.3 MSPの関数を使う:Expand.msp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/MSP/Examples/ExpandでこのMSPスクリプトに接続することができます(ご自分のサーバに接続するURLは これとは多少異なる場合もあります).ここでは多項式と指数が入力できます.submitボタンを押す と,多項式がベキ乗され,展開されます.そして,結果が書かれたHTMLページがೊされます.この ページのソースはMSPScripts/Examples/Expand.mspにあります. 184 webMathematica User Guide <html> <head> <title>ExpandingPolynomials</title> </head> <body> <h1>ExpandingPolynomials</h1> <form action="Expand"method="post"> Enter a polynomial (e.g. x+y): <input type="text" name="expr" size="10"> Enter a positive integer (e.g. 4): <input type="text" name="num"size="3"> <br> <%Mathlet MSPBlock[{$$expr,$$num}, Expand[$$expr^$$num]]%> <br> <input type="submit"name="submitButton"value="Evaluate"> </form> </body> </html> これにも前の例で説明したformとinputのタグが付いています.また,Mathletは標準的な使われ方で はないMathematica の関数を参照しています. formが送られるとサーバはMathematica カーネルに接続します.ここでは2つのシンボル $$exprと $$numが2つのinput要素からのテキストに割り当てられます.テキストがなければシンボルは定義 されません. 次にMathematica がMathletを評価します.MSPBlockコマンドはプログラミングコンストラクト で,ここでは$$exprと$$numの2つの変数を検査します.もしどちらかに値がなければMSP Blockはヌル文字列をೊします.ですから,はじめてこのページにアクセスしたときには結果が見え ないのです.次にMathematica が両変数の値をЖ釈します.成功するとЖ釈の結果が第2引数あるいは MSPBlockのボディに代入されます.この例では$$exprの値がすべて$$exprの値をЖ析したもので 置き換えられています.$$numも同様に処理されます.次に,その結果が評価され,フォーマット されてHTMLページに置かれます.そしてそのHTMLページがクライアントにೊされるのです. Mathematica による変数のЖ釈がうまくいかない場合が2つ考えられます.ひとつは入力が f[}のように Mathematica の有効な入力ではない場合,もうひとつは ReadList["/etc/passwd"]のように危؉な入力 である場合です.どちらの場合も入力は拒否され,エラーメッセージが出されます.これは,システ ムのセキュリティ機能を示しています.これについては「セキュリティ」のセクションで説明しま す. webMathematica User Guide 185 8.6.4 グラフィックス:Plot.msp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/MSP/Examples/Plot経由でこのMSPスクリプトに接続することができます(ご自分のサーバに接続する URLはこれとは多少異なる場合もあります).ユーザはこれを使って関数を入力し,プロットするこ とができます.このページのソースはMSPScripts/Examples/Plot.mspにあります. <html> <head> <title>Plot</title> </head> <body> <h1>Plot</h1> <form action="Plot"method="post"> Enter a function: <input type="text" name="fun"size="24" value="<%MathletMSPValue[ $$fun, "Sin[x]^2"] %>"> Enter a number: <input type="text" name="x1" size="24" value="<%MathletMSPValue[ $$x1, "10"] %>"> <br/> <%Mathlet MSPBlock[{$$fun,$$x1}, MSPShow[Plot[$$fun,{x,0,$$x1}]]] %> <hr/> <input type="submit"name="btnSubmit"value="Evaluate"> </form> </body> </html> この例では,はじめてページがリクエストされたときに,2つのテキストinput要素がMathletを使って 値を埋めます.入力を提案したり,前の入力を保存したりすることが役に立つことが多々ありま す.2つのMathletがMSPValueを使って第1引数の変数の値をೊすか,その変数に値がなければ第2引 数の値をೊします.これは引用された属性値の行内での拡張の提供というMathletの新しい使い方の例 です.Mathletはこのページのシンタックスのために完全にコンテキストを離れて評価され,ページの どんなಊ分でも補いながらどこへでも行くことができます. 続いて3番目のMathletが評価します.MSPBlockが,$$funと$$x1の両方にPlotコマンドで使える有 効な値があることを確認します.MSPShowがサーバに画像を保存し,この画像を参照するのに必要 なHTMLをೊします.ブラウザの「View Source(ソースコードの表示)」オプションを使うと,そ のページが画像をどのように参照しているかを見ることができます.画像にはGIF形式が使われま す.第3引数をध定すると,JPEGのような他の形式で画像を保存することもできます.これに関して は「MSP Function Reference」のセクションをご覧ください. 続いて3番目のMathletが評価します.MSPBlockが,$$funと$$x1の両方にPlotコマンドで使える有 186 webMathematica User Guide 効な値があることを確認します.MSPShowがサーバに画像を保存し,この画像を参照するのに必要 なHTMLをೊします.ブラウザの「View Source(ソースコードの表示)」オプションを使うと,そ のページが画像をどのように参照しているかを見ることができます.画像にはGIF形式が使われま す.第3引数をध定すると,JPEGのような他の形式で画像を保存することもできます.これに関して は「MSP Function Reference」のセクションをご覧ください. 8.6.5 タイプセットの画像:Integrate.msp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/MSP/Examples/IntegrateでこのMSPスクリプトに接続することができます(ご自分のサーバに接続する URLはこれとは多少異なる場合もあります).ユーザはここで関数を入力し,これを積分することが できます.結果はタイプセットシステムでフォーマットされ,画像として保存されます.このページ のソースはMSPScripts/Examples/Integrate.mspにあります. <%Mathlet integrand = Null; If[ MSPValueQ[$$expr], integrand = MSPToExpression[$$expr]] ; %> <html> <head> <title>Integration</title> </head> <body> <h1>Integratea function</h1> <form action="Integrate"method="post">Input: <br> <input type="text" name="expr"size="24" value="<%MathletMSPValue[ $$expr, "Sin[x]^2"] %>"> <br/> <%Mathlet If[ integrand =!= Null,MSPFormat[Integrate[integrand,x],StandardForm] %> <br/> <input type="submit"name="btnSubmit"value="Evaluate"> </form> </body> </html> この例ではMathletが式を積分し,MSPFormatを使って結果をStandardFormでフォーマットしま す.これが画像を生成し,画像への参照をೊします.これがうまくいくためには,Mathematica のフ ロントエンドを使わなければなりません. この例はMSPToExpressionを使ってのページを範囲とした変数の使い方も示しています.これは少 々複ܚですが表現力の豊かなMSPBlockの使用に代る選択肢です.ページ変数のintegrandはNullに 初期化され,後に,変数の値が変更されると積分が行われます.この入力変数に実際の値がある場合 にのみ$$exprのЖ釈された値が割り当てられます.$$exprをЖ釈しているときにセキュリティエ ラーのようなエラーがあると例外が投げられ,新たな値にintegrandが割り当てられることはありま せん.変数の使い方でページを範囲とする以外に,セッションを範囲とする方法もあります.これに はMSPSessionVariableを使います. webMathematica User Guide 187 この例はMSPToExpressionを使ってのページを範囲とした変数の使い方も示しています.これは少 々複ܚですが表現力の豊かなMSPBlockの使用に代る選択肢です.ページ変数のintegrandはNullに 初期化され,後に,変数の値が変更されると積分が行われます.この入力変数に実際の値がある場合 にのみ$$exprのЖ釈された値が割り当てられます.$$exprをЖ釈しているときにセキュリティエ ラーのようなエラーがあると例外が投げられ,新たな値にintegrandが割り当てられることはありま せん.変数の使い方でページを範囲とする以外に,セッションを範囲とする方法もあります.これに はMSPSessionVariableを使います. 8.6.6 ライブ3Dプロット:Plot3DLive.msp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/MSP/Examples/Plot3DLiveでこのMSPスクリプトに接続することができます(ご自分のサーバに接続する URLはこれとは多少異なる場合もあります).ユーザはここで関数を入力し,LiveGraphics3Dのア プレットを使ってプロットすることができます.このページのソースはMSPScripts/Examples/ Plot3DLive.mspにあります. 188 webMathematica User Guide <html> <head> <title>Live 3D Plotting</title> </head> <%Mathlet $ImageBackground= "#ffffff"; $ImageSize = {300,300}; %> <body bgcolor = "#ffffff"> <h1>Live 3D Plotting</h1> <form action="Plot3DLive"method="post"> Plot3D of <input type="text" name="fun"size="22" value = "<%Mathlet MSPValue[ $$fun, "Sin[x y]^2"] %>"> <br/> x from: <input type="text" name="x0" size="10" value = "<%Mathlet MSPValue[ $$x0, "-2"] %>"> to: <input type="text" name="x1" size="10" value = "<%Mathlet MSPValue[ $$x1, "2"] %>"> <br/> y from: <input type="text" name="y0" size="10" value = "<%Mathlet MSPValue[ $$y0, "-2"] %>"> to: <input type="text" name="y1" size="10" value = "<%Mathlet MSPValue[ $$y1, "2"] %>"> <br/> Number of points to plot: <input type="text" name="pts" size="5" value = "<%Mathlet MSPValue[ $$pts, "20"] %>"> <br/> <%Mathlet MSPBlock[ {$$fun, $$x0, $$x1, $$y0, $$y1, $$pts}, MSPLive3D[ Plot3D[$$fun,{x,$$x0,$$x1},{y,$$y0,$$y1}, PlotPoints -> $$pts]]] %> <br/> <input type="submit"name="btnSubmit"value="Evaluate"> </form> </body> </html> この例ではたくさんのMathletを使ってパラメータをध定しています.最後のMathletがこれらのパラ メータの値を取り,これを使ってPlot3Dを呼び出します.この結果はLiveGraphics3Dアプレットを 呼び出すMSPLive3Dに伝えられます.これで3Dグラフィックスオブジェクトのリアルタイムの回転 ができるようになります. webMathematica User Guide 189 8.6.7 一般的な内容をೊす:Content.msp 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/MSP/Examples/ContentでこのMSPスクリプトに接続することができます(ご自分のサーバに接続するURLは これとは多少異なる場合もあります). 今まで見てきた例では,どれもHTMLがブラウザにೊされていましたが,いろいろなフォーマットを 使った一般的な内容をWebで扱うこともできます.MSPスクリプトはMSPReturnを使って任意の内 容をೊすことができます.次はいろいろなフォーマットがどのようにೊされるかの例です.ソースは MSPScripts/Examples/Content.mspとMSPScripts/Examples/Content.mにあります. まず,これがMSPスクリプトのソースです. <html> <head> <title>GeneralContent</title> </head> <body bgcolor="#ffffff"> <h1>GeneralContent</h1> <form action="Content"method="post"> <p> This example generates a notebook, converts it into a specific format and returns that format. </p> <%Mathlet If[ MSPValueQ[$$button], Get[ "Content.m"]; MSPReturn@@ GeneralContent[$$button]] %> <br> <input type="Submit"name="button"value="Notebook"> <input type="Submit"name="button"value="PostScript"> <input type="Submit"name="button"value="GIF"> </form> </body> </html> これがMathematica のソースです. 190 webMathematica User Guide MakeNotebook[]:= UseFrontEnd[ Module[ {nb, nbobj}, nb = NotebookCreate[]; NotebookWrite[nb, Cell[ "A DynamicallyCreated Notebook", "Title"]] ; NotebookWrite[nb, Cell[ "Converted to " <> $$button, "Subtitle"]] ; NotebookWrite[nb, Cell[ "The date is " <> ToString[ Date[]], "Text"]] ; nbobj = NotebookGet[nb] ; NotebookClose[nb] ; nbobj]] GeneralContent[fmt_] := Module[ {nbobj}, nbobj = MakeNotebook[]; UseFrontEnd[ Switch[ fmt, "Notebook", {ToString[ nbobj, InputForm], "application/mathematica"}, "PostScript", {DisplayString[nbobj, "EPS"], "application/eps"}, "GIF", {DisplayString[nbobj, "GIF"], "image/gif"}, _, "Unknown format"] ]] この例では1つの評価で変数$$buttonをテストします.formのボタンの1つをӭ動することでこの変 数が値を持つと,それはೊすフォーマットタイプを指定するのに使われ,関数GeneralContentに渡 されます.この関数のMathematica のコードは,変数がध定されるとロードされるようになっている 別のパッケージにあります.GeneralContentは簡単なノートブックを作る関数MakeNotebookを呼 びます.MakeNotebookは,Mathematica Notebook APIとJ/Link の関数UseFrontEndを使ってノート ブックを生成します.実際には,これはもっと興味深いノートブックを構築するのに使われま す.MSPReturnはノートブックの表現形をコンテントタイプと共にサーバにೊします.これがブラ ウザにೊされます.ブラウザが適切にध定されていれば,必要なヘルパーアプリケーションが配置さ れます. 実際の例では,動的に生成されたノートブックがクライアントからのリクエストと共に送られた情報 を使います. webMathematica User Guide 191 特別な内容をೊしたい,またその内容と一緒に使いたいファイル名をध定したい場合は,MSPRe turnの引数が3つあるタイプを使うとよいでしょう.これについては「Mathematica 関数のリファレン ス」セクションをご覧ください. MSPPageOptionsを使うと,これとは別の方法でMSPスクリプトから内容がೊされるようにध定す ることができます.これについては前に詳述してあります. 8.6.8 アプレット:TextApplet.msp 次の例ではMathematica のパワーを使ったWebサイトをアプレットから呼び出してみます.これはク ライアントとサーバプログラミングの組合せで行われます.このセクションにはJavaのプログラミン グも出てきます. 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/MSP/Examples/TextAppletでこのMSPスクリプトに接続することができます(ご自分のサーバに接続する URLはこれとは多少異なる場合もあります).このページのソースはMSPScripts/Examples/Text Applet.mspとwebMathematica/WEB-INF/src/ExampleApplets/TextApplet.javaにあります. これがMSPスクリプトのソースです. <%Mathlet If[ MSPValueQ[$$Compute], MSPReturn["Date[] returns " <> ToString[ Date[]], "text/plain"]]%> <html> <title>AppletTest</title> <body> <p> Here is an applet that gets a result from Mathematica: <br> <applet CODE="TextApplet.class" archive = "<%Mathlet$WebApplication<> "/Resources/applets/MSPExamples.jar" %> " width=400 height=30> <param name="ArgumentURL"Value="TextApplet?Compute=True"> </applet> <p> Hitting refresh will cause the page to update. </body> </html> 次はアプレットのためのソース,TextApplet.javaです. 192 webMathematica User Guide import java.applet.Applet; import java.awt.*; import java.net.*; import java.io.*; public class TextApplet extends Applet { public void paint(Graphicsg) { super.paint(g); try { URL url=new URL(getDocumentBase(),getParameter("ArgumentURL")); InputStreamin=url.openStream(); ByteArrayOutputStreamout=new ByteArrayOutputStream(); byte[] b=new byte[1024]; int len; while((len=in.read(b,0,1024))!= -1) { out.write(b,0,len); } b=out.toByteArray(); g.drawBytes(b,0,b.length-1,20,20); } catch (Exception e) { System.out.println("Error"+e); } } } これはఫ常に単純なアプレットです.paintメソッドがURLへの接続を開きます.そのURLはアプレッ トをロードしたドキュメントとparamタグから渡されたArgumentURLというパラメータの値によって 名付けられています.これによってTextApplet MSPスクリプトが呼ばれ,日付けב算がೊされます. 8.6.9 Javaのコールバック:Request.msp この例ではJ/Link によって提供される機能である,MSPスクリプトがJavaを呼び出す方法を示しま す.J/Link はMathematica にJavaを呼び出させたり,JavaにMathematica を呼び出させたりできま す.Javaから呼び出したMathematica がJavaへコールバックすることも可能です.この機能については J/Link のマニュアルに詳述されています.この例には多少のJavaの知ށが必要です. この例はHttpServletRequestオブジェクトのメソッドをどのように呼び出すかのデモンストレーション です.HttpServletRequestオブジェクトとは,サーブレットエンジンがHTTPのリクエストに関する情報 を保持するJavaのオブジェクトです.HttpServletRequestについては,サーブレット関連の書籍や http://java.sun.com/products/servlet/にあるサーブレットAPIについてのドキュメントをご参照ください. 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/MSP/Examples/PlotScriptでこのMSPスクリプトに接続することができます(ご自分のサーバに接続する URLはこれとは多少異なる場合もあります).このページのソースはMSPScripts/Examples/Plot Script.mspとMSPScripts/Examples/PlotScript1.mspにあります. webMathematica User Guide 193 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/MSP/Examples/PlotScriptでこのMSPスクリプトに接続することができます(ご自分のサーバに接続する URLはこれとは多少異なる場合もあります).このページのソースはMSPScripts/Examples/Plot Script.mspとMSPScripts/Examples/PlotScript1.mspにあります. これがRequest.mspのソースです. <html> <head> <title>RequestInformation</title> </head> <body bgcolor="#ffffff"> <h1>RequestInformation</h1> <h4>HTTP Method</h4> <%Mathlet $ServletRequest@getMethod[]%> <h4>Header Names and Values</h4> <%Mathlet JavaBlock[ Block[ {headers, res, $PathWidth = 100}, headers = $ServletRequest@getHeaderNames[] ; res = Rest[ NestWhileList[ Module[ { name = headers@nextElement[]}, {name, $ServletRequest@getHeader[name]}] &, 1, headers@hasMoreElements[]&]] ; MSPFormat[ TableForm[res],OutputForm] ] ] %> </body> </html> 最初のMathletは$ServletRequestオブジェクトのgetMethodメソッドを呼び出します.すると使用 されたHTTPメソッド(通常GET)がೊされます.2番目のMathletはgetHeaderNamesでೊされる JavaのEnumerationを使ってヘッダから名前と値を抽出するもう少し洗練されたコードを使いま す.これはTableFormによってフォーマットされてೊされます. 194 webMathematica User Guide 8.6.10 ファイルのアップロード:UploadFile.msp この例題はwebMathematica のサーバへのファイルのアップロードの方法を示します. 前述のようにwebMathematica をインストールするとhttp://localhost:8080/webMathematica/MSP/Examples/UploadFileでこのMSPスクリプトに接続することができます(ご自分のサーバに接続する URLはこれとは多少異なる場合もあります).使われているスクリプトは2つです.最初のスクリプ トがファイルを送信する形式を持ち,2番目のスクリプトがファイルを読んでその内容を表示しま す.このページのソースはMSPScripts/Examples/UploadFile.mspとMSPScripts/Examples/Up loadFileAction.mspにあります.以下はUploadFile.mspの一ಊです. <form method=postenctype="multipart/form-data"action="UploadFileAction"> <p> Enter a file to upload: </p> <br/> <input type="file" size=40 name="file"> <br/> <br/> <input type="reset"value="Clear"> <input type="submit"value="Submit"> </form> ここにはMathematica のב算は含まれていないので,実際にはHTMLのページです.これは Upload FileAction.mspが簡単に参照できるようにMSPとして書かれています.multipart/form-data という form要素を使っています.この要素はファイルを送信する標準的な方法です.フォームはUploadFile Action.mspに送信されます.次はそのUploadFileAction.mspです. webMathematica User Guide 195 <html> <head> <title>UploadFile Action</title> </head> <body> <p> File contents: </p> <br> <pre> <%Mathlet file = "FileName" /. MSPGetUploadFile[]; Read[ file, Record, RecordSeparators->{}] %> </pre> <p> <a href="UploadFile">Uploadanother file?</a> </p> </body> </html> これは関数MSPGetUploadFileを使います.この関数がファイルをアップロードしてサーバ上に保存 します.サーバはサーバ上で使われるファイル名,クライアントで使われたオリジナルのファイル 名,コンテントタイプ等の便利な情報のリストをೊします.アップロードするファイルが複数の場合 には,MSPGetUploadFileが例外を投げます.複数のファイルをアップロードする場合はMSPGet UploadFileListを使うとよいでしょう.この例では,その後ファイルの内容が読まれ,描画されま す.もちろんその他のインポート関数を使い,続けてב算をしても簡単にできるでしょう. 196 webMathematica User Guide 9. 付ຉ 9.1 Mathematica 関数のリファレンス MSP Tablibのタグを使うJSPには,たくさんの Mathematica コマンドを挿入することができます.この セクションでは各コマンドの説明をします.インタラクティブなMathematica セッションでこれらの コマンドを使い,テストしてみることもできます.もちろん,これらのコマンドはWebページの処理 中に使われるようにधבされているのですが,Mathematica セッションでどのように動くかを知るこ とも有益です. 9.1.1 MSPBlock MSPBlock@8var1 , ...<, bodyD MSPBlock@8var1 , ...<, body, defvalueD 引数の変数をЖ釈し,ボディでこれを入れ替える. 値を持たない変数があれば,defvalue がೊされる. これはHTTPリクエストからの変数を使う最も重要な方法のひとつです.MSPBlockは各変数vari を取 り,これをЖ釈し,body 内にある場合はЖ釈した値で置き換えます.値を持たない変数があると空の 文字列がೊされます.値のЖ釈中にセキュリティやパースのエラーがあると,MSPExceptionが投げ られます. パッケージをロードし,セキュリティの内容をध定して,この関数がどのように働くのかのシミュ レーションをすることができます. In[1]:= Needs@"MSP`"D; In[2]:= SetSecurity@D; 変数$$varに値"5+7"を割り当てます.値が文字列であることにご注意ください. In[3]:= $$var = "5+7"; MSPBlockを評価すると$$varはすべてЖ釈された値で置き換えられます. webMathematica User Guide In[4]:= Out[4]= 197 MSPBlock@ 8$$var<, 8Hold@ $$varD, $$var<D 8Hold@5 + 7D, 12< 入力値がЖ釈できない場合はMSPExceptionが投げられます. In[5]:= In[6]:= $$var = "Sin@"; Catch@ MSPBlock@ 8$$var<, 8Hold@ $$varD, $$var<D, _MSPException, ListD ToExpression::sntx : Syntax error in or before "Sin@". Out[6]= 88$$var, Sin@<, MSPException@ParseErrorD< 入力値がセキュリティテストを通らなければ,MSPExceptionが投げられます. In[7]:= $$var = "ReadList@\"êetcêpasswd\"D"; In[8]:= Catch@ MSPBlock@ 8$$var<, $$varD, _MSPException, ListD Out[8]= 88$$var, ReadList@"êetcêpasswd"D<, MSPException@SecurityErrorD< 入力はMathMLでも与えられます. In[9]:= $$e = "<math><mrow><mi>sin<êmi><mo>⁡<ê mo><mrow><mo>H<êmo><mi>x<êmi><mo>L<êmo><êmrow><êmrow> <êmath>"; In[10]:= MSPBlock@ 8$$e<, $$eD Out[10]= Sin@xD 例外 MSPBlockは以下の例外を投げることがあります. MSPException["ParseError"] Mathematica が値をЖ釈できない場合. MSPException["SecurityError"] 値がセキュリティテストを通らない場合. MSPException["ValueError"] 値が文字列ではない場合.これはページの作者によるプログラム上の エラーを示唆しています. MSPException["VariableError"] 変数がMathematica のシンボルではない場合.これはページの作者 によるプログラム上のエラーを示唆しています. 198 webMathematica User Guide 9.1.2 MSPException MSPException@ ParseErrorD Mathematica で値がЖ析できないと投げられる. MSPException@ SecurityErrorD Ж析された結果がセキュリティチェックを通過しないÖ と投げられる. MSPException@ NoValueErrorD 変数に値がないと MSPToExpressionによって投げられる. MSPException@ VariableErrorD 無効な変数 (Mathematica のシンボルではない変数) があると投げられる. MSPException@ ParseErrorD 無効な値 (Mathematica の文字列ではない値) があると投げられる. MSPException@ VersionErrorD MSPPageOptionsがより進んだバージョンのMSPテクノÖ ロジーを必要とするݠみを感知すると投げられる. エラーの際にMSPExceptionを投げるMSPコマンドはたくさんあります.これはページの処理コード で受けられますが,ページの作者がこれを受けて何らかの中間処理を施すことも可能です. In[1]:= Needs@"MSP`"D; 変数がЖ釈できないとParseErrorの例外が投げられます.値はクライアントから入力されることもあ るので,これは必ずしもページの作者側のエラーとはいえません. In[2]:= Catch@ MSPToExpression@"f@"D, _MSPException, ListD ToExpression::sntx : Syntax error in or before "f@". Out[2]= 88f@, f@<, MSPException@ParseErrorD< Ж釈の結果がセキュリティチェックを通過しないとSecurityErrorの例外が投げられます.値はクラ イアントから入力されることもあるので,これは必ずしも作者側のエラーとはいえません. In[3]:= Out[3]= Catch@ MSPToExpression@"ReadList@\"êetcêpasswd\"D"D, _MSPException, ListD 88ReadList@"êetcêpasswd"D, ReadList@"êetcêpasswd"D<, MSPException@SecurityErrorD< Mathematica のシンボルではない変数があるとVariableErrorの例外が投げられます.通常これはペー ジの作者のエラーを意味します. In[4]:= Catch@ MSPValue@x@1DD, _MSPException, ListD 199 webMathematica User Guide Out[4]= 8x@1D, MSPException@VariableErrorD< Mathematica の文字列ではない値があるとValueErrorの例外が投げられます.通常これはページの作 者のエラーを意味します. In[5]:= $$var = Sin@1D Out[5]= Sin@1D In[6]:= Catch@ MSPToExpression@$$varD, _MSPException, ListD Out[6]= 88$$var, Sin@1D<, MSPException@ValueErrorD< 9.1.3 MSPExportImage MSPExportImage@ exprD MSPExportImage@ expr, format D Mathematica のExportコマンドを使って画像をGIF形式で保存し, imgタグをೊす. Mathematica のExportコマンドを使って画像を指定の形式で保存し, imgタグをೊす. MSPExportImageはMathematica のコマンドExportを使って画像を保存するときに使われます.第 1引数がグラフィックスオブジェクトまたはCellあるいはBoxDataオブジェクトの場合は直接表示され ます.一般的な式の場合はTraditionalFormを使ってフォーマットされます.数式やグラフィックス のフォーマットについては「数式やグラフィックスの表示」のセクションに詳しい説明があります. In[1]:= Needs@"MSP`"D; In[2]:= MSPExportImage@ Graphics@ Line@ 880, 0<, 81, 1<<DDD Out[2]= <img src="êwebMathematicaêMSP?MSPStoreID=FileNameBase_245528838& MSPStoreType=imageêgif" alt="Created by webMathematica" ê> ここではMSPExportImageがボックス式を受け取りこれを画像として描画します. In[3]:= Out[3]= MSPExportImage@ BoxData@ToBoxes@ x + y ^ 2, TraditionalFormDDD <img src="êwebMathematicaêMSP?MSPStoreID=FileNameBase_574601872& MSPStoreType=imageêgif" alt="Created by webMathematica" ê> この例ではMSPExportImageが引数をTraditionalFormでフォーマットしてから画像として描画しま す. 200 In[4]:= Out[4]= webMathematica User Guide MSPExportImage@ x + Sin@xDD <img src="êwebMathematicaêMSP?MSPStoreID=FileNameBase_932131661& MSPStoreType=imageêgif" alt="Created by webMathematica" ê> ここではMSPExportImageが第2引数を使って画像のフォーマットタイプを指定しています. In[5]:= Out[5]= MSPExportImage@ x + Sin@xD, "JPEG"D <img src="êwebMathematicaêMSP?MSPStoreID=FileNameBase_665363422& MSPStoreType=imageêjpeg" alt="Created by webMathematica" ê> これはExportを使うので,変換オプションを使って画像生成の方法をコントロールすることも可能で す.実際のオプションのध定についてはオンラインヘルプのExportでAdditional Information(ઉ加情 報)をご覧ください.次の例では,白が透過色となるGIF画像が生成されます. In[6]:= Out[6]= MSPExportImage@ BoxData@ToBoxes@ x + y ^ 2DD, "Transparency" Ø GrayLevel@1DD <img src="êwebMathematicaêMSP?MSPStoreID=FileNameBase_787204206& MSPStoreType=imageêgif" alt="Created by webMathematica" ê> これらのオプションのデフォルト値は変数$ExportImageOptionsを使ってध定することができま す.例えば,以下のध定では,すべての画像の白色が透過色となります. In[7]:= $ExportImageOptions = "Transparency" Ø GrayLevel@1D Out[7]= Transparency Ø GrayLevel@1D 9.1.4 MSPFormat MSPFormat@exprD MSPFormat@expr, fmt D MSPFormat@expr, fmt, typeD 式expr をフォーマットスタイル$MSPFormatTypeでフォーマッÖ トする. 式expr をフォーマットスタイル fmtでフォーマットする. コンテントタイプとしてtypeを使い,式expr をフォーマットスタイル fmtでフォーマットする. これはMathematica からの結果をフォーマットする重要な方法のひとつです.出力に関するより一般 的な説明は「評価のフォーマット」のセクションでご覧ください.数式やグラフィックスのフォーマ ットについては「数式やグラフィックスの表示」をご覧ください. フォーマットされた結果は,Mathematica が出力用に提供する異なった形式のOutputForm,Input Form,StandardForm,TraditionalForm,MathMLForm等を取ることができます.これに加 え,結果はHTML,画像形式,MathMLとしてもೊすことができます.Mathematica におけるフォーマ ットについてはMathematica ブックもご参照ください.MSPFormatの第2引数はMathematica のフォー マットタイプを選ぶシンボルで第3引数は結果に使われる実際のコンテントタイプをध定する文字列 です. webMathematica User Guide 201 フォーマットされた結果は,Mathematica が出力用に提供する異なった形式のOutputForm,Input Form,StandardForm,TraditionalForm,MathMLForm等を取ることができます.これに加 え,結果はHTML,画像形式,MathMLとしてもೊすことができます.Mathematica におけるフォーマ ットについてはMathematica ブックもご参照ください.MSPFormatの第2引数はMathematica のフォー マットタイプを選ぶシンボルで第3引数は結果に使われる実際のコンテントタイプをध定する文字列 です. Mathletの結果で文字列でないものはどれもMSPFormatでフォーマットされます.ご自分の出力を準 備なさりたい場合は,ご自分で文字列を生成しMSPFormatはӭ動しないようにするとよいでしょ う. 下記の例題が動くためにはMSPアプリケーションがロードされていなければなりません. In[1]:= Needs@"MSP`"D; HTMLのフォーマット MSPFormatはHTMLの内容をOutputFormとInputFormでೊします.これらは文字列ベースのフ ォーマットタイプです.結果は正確に拡張されてWebページで使うことができる有効なHTMLになっ ています.結果は複数行の出力で列がきちんと揃うように固定幅のフォントで表示されなければなり ません. In[2]:= MSPFormat@ x + y ^ 2, OutputFormD Out[2]= <p> <code> 2<br>x + y <êcode><êp> 式は変数$PageWidthでध定されたページ幅でフォーマットされます.式をHTML形式でフォーマッ トするこの他の方法については「HTML関数」をご覧ください. 画像のフォーマット MSPFormatはStandardFormとTraditionalForm用に画像の内容を使います.画像はサーバ上のフ ァイルに作られ,保存されます.そして,サーバから画像を取り出すときに使うimgタグが結果とし てೊされます. In[3]:= Out[3]= MSPFormat@ x + y, StandardFormD <img src="êwebMathematicaêMSP?MSPStoreID=FileNameBase_874538807& MSPStoreType=imageêgif" alt="Created by webMathematica" ê> 202 webMathematica User Guide デフォルトでは画像はGIF形式になります.第3引数で別の形式を指定することもできます.ここでは JPEG形式を使って画像を保存しています. In[4]:= Out[4]= MSPFormat@ x + y, StandardForm, "JPEG"D <img src="êwebMathematicaêMSP?MSPStoreID=FileNameBase_1065528536& MSPStoreType=imageêjpeg" alt="Created by webMathematica" ê> 少々変わっていますが,OutputFormのようなテキストベースのフォーマットタイプを画像として描 画することもできます. In[5]:= Out[5]= MSPFormat@ x + y, OutputForm, "GIF"D <img src="êwebMathematicaêMSP?MSPStoreID=FileNameBase_1061883558& MSPStoreType=imageêgif" alt="Created by webMathematica" ê> 画像をタイプセットするときに使う幅は変数$TypesetImageWidthを使ってध定します. これとは別の画像生成の方法に関数MSPExportImageを使うものがあります.画像生成についての さらに詳しい情報は,「数式やグラフィックスの表示」をご覧ください. MathML フォーマットがMathMLFormにध定されていたら,システムは式をMathMLにフォーマットします. In[6]:= MSPFormat@ Sin@xD ^ 2, MathMLFormD Out[6]= <math> <mrow> <msup> <mi>sin<êmi> <mn>2<êmn> <êmsup> <mo>⁡<êmo> <mrow> <mo>H<êmo> <mi>x<êmi> <mo>L<êmo> <êmrow> <êmrow> <êmath> さらに,RawMathMLのコンテントタイプを指定することもできます.これは式をStandardFormで 描画するためのMathMLを得るのに便利です.この出力はMathMLのӭ動のために必要なプラグイ ン,アプレット,あるいは特別なブラウザへの参照を使わないという意味で「生」なのです. 203 webMathematica User Guide In[7]:= MSPFormat@ Sin@xD ^ 2, StandardForm, "RawMathML"D Out[7]= <math> <msup> <mrow> <mi>Sin<êmi> <mo>⁡<êmo> <mrow> <mo>@<êmo> <mi>x<êmi> <mo>D<êmo> <êmrow> <êmrow> <mn>2<êmn> <êmsup> <êmath> MathMLの使い方に関する詳細は「アプリケーション」の「MathML」のセクションをご覧ください. 9.1.5 MSPGetMessages MSPGetMessages@D 現行カーネルの評価で生成されたすべてのメッセージÖ をೊす. MSPGetMessagesは現行カーネルの評価によって生成されたメッセージを得る手段を提供しま す.この関数は文字列のリストをೊします.各文字列にはフォーマットされたメッセージの内容が含 まれます. この関数は通常の評価では例証できません.むしろこれはサーバ実行の一ಊでなければなりませ ん.例題Messages.jspでMSPGetMessagesの使用方法が例証されています. 9.1.6 MSPGetPrintOutput MSPGetPrintOutput@D 現行カーネルで評価されたすべてのプリント文をೊす. MSPGetPrintOutputは現行カーネルで処理されたすべてのプリント文の出力をೊす手段を提供しま す.この関数は文字列をೊします.各文字列にはメッセージの内容がフォーマットされて含まれてい ます. 204 webMathematica User Guide この関数は通常の評価では例証できません.むしろこれはサーバ実行の一ಊでなければなりませ ん.例題Messages.jspでMSPGetPrintOutputの使用方法が例証されています. 9.1.7 MSPGetUploadFile MSPGetUploadFile@D HTTPのヘッダが4MBまでのアップロードされたファイÖ ルを受け取るように処理する. MSPGetUploadFile@ SizeLimit -> 5000D 1 アップロードに付き5000バイトを上限としてファイルÖ をアップロードする. これはマルチパート/フォームデータ送信を使ってクライアントからサーバへファイルをアップロー ドする,便利なユーティリティ関数を提供します.ファイルの内容はサーバ上の新しいファイルに保 存され,このファイルの名前がೊされます.サーバ上のファイルは,画像や一時的ファイルの消去と 同じ要領でいずれ消去されます.MSPGetUploadFileの結果はサーバ上でのファイル名とクライアン トでのもとのファイル名,それにコンテントタイプを示すӪ則のリストです. この関数は,クライアントから送られた適切な情報を含む実際のHTTPトランザクションの一ಊでな ければならないので,例証することはできません.次の例題は,この関数のMathematica プログラミ ングでの使い方のシミュレーションに過ぎません.例題セクションにはMSPGetUploadFileの使い方 の例も含まれています. In[1]:= Needs@"MSP`"D; In[2]:= MSPGetUploadFile@D Out[2]= 8FileName Ø MSPStore2349287_0_1, OriginalFileName -> C:\last.dat, ContentType -> textêplain< ファイル名は,Ӫ則とともに使う典型的なMathematicaコマンドで抽出することができます. In[4]:= "FileName" ê. % Out[4]= MSPStore2349287_ 0 _ 1 HTTPのヘッダに現れるパラメータはMSPGetUploadFileかMSPGetUploadFileListを使った後 で,$$変数で入手できます.その後,これは通常の方法で使えます. MSPGetUploadFileでアップロードできる最大ファイルサイズは,デフォルトで4MBになっていま す.このサイズを変更したい場合はオプションSizeLimitを使ってください. 205 webMathematica User Guide 例外 MSPGetUploadFileは次の例外を投げることがあります. MSPException["FileUploadError"] 例えば,アップロードするファイルがひとつもなかったり,HTTPの ヘッダが何らかの理由で正しい構造ではないような場合. 9.1.8 MSPGetUploadFileList MSPGetUploadFileList@D HTTPのヘッダが4MBまでの複数のアップロードファイÖ ルを受け取るように処理する. MSPGetUploadFileList@ SizeLimit -> 5000D 1 アップロードに付き5000バイトを上限としてファイルÖ をアップロードする. MSPGetUploadFileListはMSPGetUploadFileと大変よく似ています.相違点はこちらの関数が複数のフ ァイルでも使える点です. この関数は,クライアントから送られた適切な情報を含む実際のHTTPトランザクションの一ಊでな ければならないので,例証することはできません.次の例題は,この関数のMathematica プログラミ ングでの使い方のシミュレーションに過ぎません. In[1]:= Needs@"MSP`"D; In[2]:= MSPGetUploadFileList@D Out[2]= 88FileName Ø MSPStore2349287_0_1, OriginalFileName -> C:\last1.dat, ContentType -> textêplain<, 8FileName Ø MSPStore2349287_0_2, OriginalFileName -> C:\last2.dat, ContentType -> textêplain<< HTTPのヘッダに現れるパラメータはMSPGetUploadFileかMSPGetUploadFileListを使った後 で,$$変数で入手できます.その後,これは通常の方法で使えます. MSPGetUploadFileでアップロードできる最大ファイルサイズは,デフォルトで4MBになっていま す.このサイズを変更したい場合はオプションSizeLimitを使ってください. 例外 MSPGetUploadFileListは次の例外を投げることがあります. 206 webMathematica User Guide MSPException["FileUploadError"] 例えば,アップロードするファイルがひとつもなかったり,HTTPの ヘッダが何らかの理由で正しい構造ではないような場合. 9.1.9 MSPInclude MSPInclude@ pageD 指定したMSPスクリプトをロードする. MSPIncludeを使うと,あるページに他のページを処理した結果を含めることができます.この関数 はwebMathematica のJSPバージョンではサポートされていないので,これを使用することはあまりお 勧めできません.jsp:includeを使うとこれと同じような機能が得られます. 例外 MSPIncludeは次の例外を投げることがあります. MSPException["MSPInclude"] 関数がJSPの内ಊから呼ばれた場合. 9.1.10 MSPLive3D MSPLive3D@graphicsD LiveGraphics3D のグラフィカルなアプレットをHTMLページに含める. MSPLive3DはLiveGraphics3Dグラフィックスアプレットを使う便利な方法です.このアプレットは Mathematica の3Dグラフィックスを表示し,インタラクティブな回転やサイズੴ整等の機能をサポー トします.詳しくは「LiveGraphics3D」のセクションをご覧ください. In[1]:= Needs@"MSP`"D; MSPLive3Dの引数はPlot3Dコマンドのように,評価すると3Dのグラフィックスオブジェクトになる ものでなければなりません. In[2]:= MSPLive3D@ Graphics3D@ Line@ 880, 0, 0<, 81, 1, 1<<DDD 207 webMathematica User Guide Out[2]= <applet archive="êwebMathematicaê Resourcesêappletsêlive.jar" code="Live.class" width="400" height="400" align="top"> <param name="magnification" value="1."ê> <param name="input" value= "Graphics3D@ Line@880., 0., 0.<, 81., 1., 1.<<D, 8<D "> <êapplet> 9.1.11 MSPPageDirectory MSPPageDirectory@D 現行スクリプトが処理されているディレクトリへの完Ö 全パスを与える. MSPPageDirectoryは現行ページが処理されているディレクトリへの完全パスを与えます. In[1]:= Needs@"MSP`"D; In[2]:= MSPPageDirectory@D Out[2]= C:\Program Files\jakarta-tomcat\webapps\webMathematica\Examples MSPPageDirectoryは,現行スクリプトと同じディレクトリ内にあるデータファイルのロードに使う ことができます.スクリプトディレクトリ内のファイルを見付けるということは,そのファイルが HTTPのリクエストにビジブルになることを意味することもあるのでご注意ください.データファイ ルをロードするMSPPageDirectoryの使い方は「ファイルのI/O」で説明してあります. 9.1.12 MSPPageOptions MSPPageOptionsは現行ページに関する大域オプションをध定します.ContentTypeオプションは ೊされるコンテントタイプをध定します.デフォルトはtext/htmlです.MinimumVersionオプショ ンはページに使うwebMathematica テクノロジーのバージョンの下限をध定します. ContentType この例では,ContentTypeオプションがMathMLをೊすようにध定されています.ブラウザのध定が 正しければ,これで適切なMathMLのヘルパーアプリケーションがӭ動されます. 208 webMathematica User Guide <msp:evaluate> MSPPageOptions[ContentType-> "text/mathml"] </msp:evaluate> <msp:evaluate> MSPFormat[Integrate[ 1/(1-x^3),x],StandardForm,RawMathML] </msp:evaluate> ContentTypeオプションはMSPReturnと同じような機能を提供します.違いは,こちらがページ全 体をೊすのに対し,MSPReturnは第1引数だけをೊす点です.これについては「一般的な内容をೊ す」のセクションもご覧ください. MinimumVersion この例では,MinimumVersionオプションがページのӭ動にwebMathematica バージョン 2.0以上を使 うように指定しています.これ以外が使われた場合はMSPExceptionが投げられます. <msp:evaluate> MSPPageOptions[MinimumVersion-> 2.0] </msp:evaluate> このオプションはwebMathematica の将来的なバージョンで使われることを意図しています. 9.1.13 MSPReturn MSPReturn@ result, contentD 指定されたMIMEコンテントタイプの結果をೊす. MSPReturn@ result, content, filenameD 応答に関連するファイル名をध定する. M S PR eturnはページがHTMLの結果ではないものをೊすことをԴ可するコマンドです.例え ば,ページは直接Mathematica のノートブックをೊすことができます. <msp:evaluate> MSPReturn[Notebook[ Cell[ "Hello", "Title"]], "application/mathematica"] </msp:evaluate> 209 webMathematica User Guide 3つの引数を持つMSPReturnは,応答に関連するファイル名をध定するのに便利です. <msp:evaluate> MSPReturn[Notebook[ Cell[ "Hello", "Title"]], "application/mathematica","mynotebook.nb"] </msp:evaluate> この場合,クライアントはmynotebook.nbというようなファイル名を使う可能性があります.Internet Explorerのように,ファイル名のヘッダをध定すると2つの OpenあるいはSaveダイアログボックス を開いてしまうクライアントもあります.この件に関しては「一般的な内容をೊす」で詳しく説明し てあります. 9.1.14 MSPRootDirectory MSPRootDirectory@D webMathematica のルートディレクトリの完全パスをೊす. MSPRootDirectoryは,webMathematica Webアプリケーションのルートディレクトリの完全パスをೊ します. In[1]:= Needs@"MSP`"D; In[2]:= Integrate@1D; In[2]:= MSPRootDirectory@D Out[2]= C:\Program Files\jakarta-tomcat\webapps\webMathematica 9.1.15 MSPSetDefault MSPSetDefault@ var, valueD 変数var に値がない場合,これに値value をध定する. これは変数のデフォルト値をध定するユーティリティ関数です. In[1]:= Needs@"MSP`"D; ここでは$$varに値があるので変更は加えられません. 210 webMathematica User Guide In[2]:= $$var = "5.6"; MSPSetDefault@ $$var, "foo"D; $$var Out[2]= 5.6 $$varに値がなければMSPSetDefaultが値をध定します. In[3]:= Clear@$$varD; MSPSetDefault@ $$var, "foo"D; $$var Out[3]= foo 例外 MSPSetDefaultは以下の例外を投げることがあります. MSPException["ParseError"] Mathematica が値をЖ釈できない場合. MSPException["SecurityError"] 値がセキュリティテストを通らない場合. MSPException["ValueError"] 値が文字列ではない場合.これはページの作者によるプログラム上の エラーを示唆しています. MSPException["VariableError"] 変数がMathematica のシンボルではない場合.これはページの作者 によるプログラム上のエラーを示唆しています. 9.1.16 MSPSessionVariable MSPSessionVariable@ symD 変数sym が,初期値がNullのセッション変数であると宣ؘする. MSPSessionVariable@ sym, valueD セッション変数sym の初期値をvalue にध定する. これは変数がセッション変数であると宣ؘするスコープコンストラクトです.セッション変数の値は サーブレットコンテナが管理するセッションに保存されます.このようなセッションは最新の Webサーバ/ブラウザの標準機能で,サーバの状態を保持するのに使われます.つまり,値がサーバ へのひとつのコールから次のコールまで残ります.変数のセッションスコープの使い方は前に説明し ました.この例はSession.jspをご覧ください. 211 webMathematica User Guide 9.1.17 MSPShow MSPShow@graphicsD HTMLページにグラフィカルな画像を含む. MSPShowはMathematica からのグラフィカルな結果をHTMLページに取り込む主な方法です. 数式や グラフィックスのフォーマットに関しては「数式やグラフィックスの表示」に詳しい説明がありま す. In[1]:= Needs@"MSP`"D; MSPShowの引数は,Plotコマンドのように評価するとグラフィックスオブジェクトになるものでも 構いません.この段階では,DisplayFunctionが実際のグラフィカルな出力をͩすように修正されて いる点にご注意ください. In[2]:= Out[2]= In[3]:= Out[3]= MSPShow@ Plot@ Sin@xD, 8x, 0, 2<DD <img src="êwebMathematicaêMSP?MSPStoreID=FileNameBase_448181998& MSPStoreType=imageêgif" alt="Created by webMathematica" ê> MSPShow@ Graphics@ Line@ 880, 0<, 81, 1<<DDD <img src="êwebMathematicaêMSP?MSPStoreID=FileNameBase_490423745& MSPStoreType=imageêgif" alt="Created by webMathematica" ê> MSPExportImageは画像出力を生成するこの他の方法を提供します.画像生成に関しての詳しい情 報は「数式やグラフィックスの描画」でもご覧いただけます.「SVG」を使うと,画像を含まないグ ラフィックスを描画することができます. 9.1.18 MSPShowAnimation MSPShowAnimation@8gra1 , gra2 ,...<D グラフィカルオブジェクトのリストからGIFアニメーシÖ ョンを生成する. MSPShowAnimationはGIF画像のアニメーションを生成する便利な方法です.引数は評価するとグ ラフィックスオブジェクトのリストになるものでなければなりません. 数式やグラフィックスのフ ォーマットに関しては「数式やグラフィックスの表示」に詳しい説明があります. In[1]:= Needs@"MSP`"D; 212 In[2]:= Out[2]= webMathematica User Guide MSPShowAnimation@ Table@ Plot@Sin@x + iD, 8x, 0, 4 Pi<D, 8i, 0., 2 Pi - Pi ê 4, Pi ê 4<DD <img src="êwebMathematicaêMSP?MSPStoreID=FileNameBase_726239281& MSPStoreType=imageêgif" alt="Created by webMathematica" ê> GIFアニメーションの生成には時間がかかるので,KernelTimeLimitパラメータを修正する必要が ある場合もあります. MSPShowAnimationはMathematica のExportコマンドを使います.このコマンドはたくさんのオプ ションで変更を加えることができます.これについてはオンラインヘルプでExportのAdditional Information(ઉ加情報)をご覧ください.変数$ShowAnimationOptionsはMSPShowAnima tionのオプションを保持します.例えば次の例ではMSPShowAnimationが各フレームを2秒で巡回す るアニメーションを作成します. In[3]:= Out[3]= $ShowAnimationOptions = 8"Loop" Ø True, "AnimationDisplayTime" Ø 2< 8Loop Ø True, AnimationDisplayTime Ø 2< 「SVG」はグラフィックスをアニメーションにするこの他の方法を提供します. 9.1.19 MSPToExpression MSPToExpression@ varD 変数var をЖ釈する. MSPToExpression@var, fmtD var のЖ釈にフォーマット fmtを使う. MSPToExpression@var, fmt, headD headでラップした結果をೊす. MSPToExpressionはToExpressionのwebMathematica バージョンで,文字列をMathematicaの入力に する機能を提供します.また,これに加えていくつかの付加的な機能も提供します.中でも最も重要 な機能は入力のセキュリティチェックを行うことでしょう.「セキュリティ」のセクションで説明し たようにwebMathematicaには完全にध定可能なセキュリティシステムがあります.これはセキュリテ ィを危؉に晒すようなコマンドをॱ止するためのものです.引数がЖ釈できなかったり文字列でなか ったりするとMSPToExpressionは例外を投げますが,この点もToExpressionとの相違点です. MSPToExpressionはより厳重なセキュリティを提供するので,コードでは常にMSPToExpres sionを使ってToExpressionは使わないでください. In[1]:= Needs@"MSP`"D; In[2]:= SetSecurity@D; 変数$$varに値"5+7"が割り当てられます.値が文字列である点にご注目ください. webMathematica User Guide In[3]:= 213 $$var = "5+7"; MSPToExpressionを評価すると$$varの値がЖ釈されてೊされます. In[4]:= MSPToExpression@ $$varD Out[4]= 12 変数に値がないとMSPExceptionが投げられます. In[5]:= Clear@ $$varD; MSPToExpression@ $$varD Throw::nocatch : Uncaught Throw@$$var, MSPException@NoValueErrorDD returned to top level. Out[5]= Hold@Throw@$$var, MSPException@NoValueErrorDDD ToExpressionのようにMSPToExpressionもЖ釈用にフォーマットタイプを取ることができます. In[6]:= $$var = "sinHxL"; MSPToExpression@ $$var, TraditionalFormD Out[6]= Sin@xD 入力値がЖ釈できないとMSPExceptionが投げられます. In[7]:= $$var = "Sin@"; Catch@ MSPToExpression@ $$varD, _MSPException, ListD ToExpression::sntx : Syntax error in or before "Sin@". Out[7]= 88$$var, Sin@<, MSPException@ParseErrorD< 入力値がセキュリティテストを通らないと,MSPExceptionが投げられます. In[8]:= Out[8]= $$var = "ReadList@\"êetcêpasswd\"D"; Catch@ MSPToExpression@ $$varD, _MSPException, ListD 88$$var, ReadList@"êetcêpasswd"D<, MSPException@SecurityErrorD< 入力はMathMLでも与えることができます. In[9]:= In[10]:= Out[10]= $$e = "<math><msqrt><mfrac><mi>x<êmi><mi>y<êmi><êmfrac><êmsqrt><êmath>"; MSPToExpression@ $$eD x ÅÅÅÅ $%%%%%% y 214 webMathematica User Guide MSPToExpressionは入力からב算される文字列にも使うことができます. In[11]:= Out[11]= $$e = "a,b,c"; MSPToExpression@"8" <> $$e <> "<"D 8a, b, c< 例外 MSPToExpressionは次の例外を投げることがあります. MSPException["NoValueError"] エラーを示唆しています. 変数に値がない場合.これはページの作者によるプログラム上の MSPException["ParseError"] Mathematica が値をЖ釈できない場合. MSPException["SecurityError"] 値がセキュリティテストを通らない場合. MSPException["ValueError"] 値が文字列ではない場合.これはページの作者によるプログラム上の エラーを示唆しています. MSPException["VariableError"] 変数がMathematica のシンボルではない場合.これはページの作者 によるプログラム上のエラーを示唆しています. 9.1.20 MSPURLStore MSPURLStore@ data, typeD 指定されたタイプのデータ文字列を保存し,URLの参Ö 照をೊす. MSPURLStore@ data, type, filenameD 指定されたタイプのデータ文字列を保存し,推奨されÖ たファイル名を含むURLの参照をೊす. MSPURLStoreはフォーマットされたデータの文字列をMSPサーブレットに保存し,データを取り出 すことのできるURLをೊします.これは画像を保存するメカニズムを拡張したものです.クライアン トのプラグインやアプレットからの入力を保持するのにも使えます.また,imgタグにフォーマット することもできます. In[1]:= Needs@"MSP`"D; In[2]:= m = DisplayString@Graphics@Line@ 880, 0<, 81, 1<<DD, "JPEG"D; In[3]:= MSPURLStore@m, "imageêjpeg"D 215 webMathematica User Guide Out[3]= êwebMathematicaêMSP?MSPStoreID=FileNameBase_97360396&MSPStoreType=imageêjpeg 結果はMSPサーブレットを参照するURLとして使える文字列で,記憶装置からデータを取り出すのに 使えます. MSPURLStoreの第3引数はURL中のファイル名をध定するために使えます.クライアントが使うヘ ルパーアプリケーションを選ぶ等,この機能にはさまざまな使い方があります.実際にこの名前のフ ァイルが作られるわけではなく,以下のようにೊされるURLに名前が置かれるだけなのでご注意くだ さい. In[4]:= Out[4]= MSPURLStore@m, "imageêjpeg", "file.gif"D êwebMathematicaêMSPêfile.gif?MSPStoreID= FileNameBase_846174849&MSPStoreType=imageêjpeg これについては「一般的な内容をೊす」で詳しく説明してあります.MSPUR LStoreの 結果は 「MSP関数で画像をೊす」で説明されているように他のフォーマッティング関数に埋め込むことがで きます. 9.1.21 MSPValue MSPValue@varD MSPValue@var, def D var の値をೊす.var に値がない場合はヌル文字列をೊす. varの値をೊす.var に値がない場合はdef をೊす. これは変数の値を抽出するのに役立つユーティリティ関数です. In[1]:= Needs@"MSP`"D; 変数$$exprの値がೊされます. In[2]:= $$expr = 56; MSPValue@ $$exprD Out[2]= 56 $$exprに値がない場合はヌル文字列がೊされます. In[3]:= Clear@$$exprD; MSPValue@ $$exprD Out[3]= ここではデフォルト値がೊされています. 216 webMathematica User Guide In[4]:= Clear@$$exprD; MSPValue@ $$expr, "x+y"D Out[4]= x+y 例外 MSPValueは以下の例外を投げることがあります. MSPException["ValueError"] 値が文字列ではない場合.これはページの作者によるプログラム上の エラーを示唆しています. MSPException["VariableError"] 変数がMathematica のシンボルではない場合.これはページの作者 によるプログラム上のエラーを示唆しています. 9.1.22 MSPValueQ MSPValueQ@var1 ,var2 , ...D すべての変数に値がある場合にTrueをೊす. これは変数に値があるかどうかをテストするユーティリティ関数です. In[1]:= Needs@"MSP`"D; 変数$$exprには値があるので結果はTrueになります. In[2]:= $$expr = 56; MSPValueQ@ $$exprD Out[2]= True この場合は$$exprには値がないので,結果はFalseになります. In[3]:= Clear@$$exprD; MSPValueQ@ $$exprD Out[3]= False Trueをೊすためには,すべての変数にMSPValueQの値がなければなりません. In[4]:= $$expr = 56; Clear@ $$varD; MSPValueQ@ $$expr, $$varD Out[4]= False webMathematica User Guide 217 9.1.23 $ExportImageOptions $ExportImageOptionsはMSPExportImageが使われているとき画像を生成するためのオプションを 保持します.これにはMathematicaのExportコマンドが使われます.使用できるオプションの説明は オンラインヘルプでExportのAdditional Information(ઉ加情報)をご覧ください.以下の例では白が 透過色になるようにオプションがध定されています.これで画像の背景が透過色になります.$Ex portImageOptionsのデフォルト値は{}です. <msp:evaluate> Block[{MSP`Utility`ImageQuality=2, $ExportImageOptions={"Transparency"Ø GrayLevel[1]}}, MSPExportImage[Plot[Sin[x],{x,0,2Pi},Background->GrayLevel[1]]] ] </msp:evaluate> 画像生成については「数式やグラフィックスの表示」もご覧ください. 9.1.24 $MSPFormatType $MSPFormatTypeはMSPFormatで使われるデフォルトのフォーマットタイプです.デフォルト値 はOutputFormです. 9.1.25 $PageWidth 式は変数$PageWidthで指定されたページ幅でフォーマットされます.デフォルト値は78です. 9.1.26 $PathInfo $PathInfoはリクエストのパス情報ध定を保持するMathematica の変数です. 9.1.27 $QueryString $QueryStringはリクエストの照会文字列ध定を保持するMathematica の変数です. 218 webMathematica User Guide 9.1.28 $ScriptName $ScriptNameはトップレベルのスクリプト名を保持するMathematica の変数です.これはURLのパラ メータとしても与えられます. 9.1.29 $ServletConfig $ServletConfigはサーブレットのトランザクションのServletConfigオブジェクトへの参照を保持し ます.「サーバAPI」に関するセクションに説明されているように,J/Link でこのオブジェクトを呼ぶ ことも可能です. 9.1.30 $ServletRequest ServletRequestはサーブレットのトランザクションのHTTPServletRequestオブジェクトへの参照 を保持します.「サーバAPI」のセクションに説明されているように,J/Link でこのオブジェクトを呼 ぶことも可能です. 9.1.31 $ServletResponse $ServletResponseはサーブレットのトランザクションのHTTPServletResponseオブジェクトへの 参照を保持します.「サーバAPI」のセクションに説明されているように,J/Link でこのオブジェクト を呼ぶことも可能です. 9.1.32 $ShowAnimationOptions $ShowAnimationOptionsはMSPShowAnimationを使ってGIFアニメーションを生成するときのオ プションを保持します.このオプションはMathematicaのExportコマンドに渡されます.オプション の説明はオンラインヘルプを使い,ExportのAdditional Information(ઉ加情報)でご覧くださ い.以下の例ではアニメーションが各フレーム2秒で巡回するようにध定されています.ב算終了 後,Blockを使ってオプションध定を復元します.$ShowAnimationOptionsのデフォルト値は {Loop -> True}です. webMathematica User Guide 219 <msp:evaluate> Block[{$ShowAnimationOptions= {"Loop"ØTrue,"AnimationDisplayTime"Ø2}}, MSPShowAnimation[Table[Plot[Sin[x+i],{x,0,2Pi}], {i,0,2Pi-Pi/$$n,Pi/10}]] ] </msp:evaluate> 9.1.33 $TypesetImageWidth $TypesetImageWidthはタイプセットされた式の画像の幅をピクセルでध定します.デフォルト値 は800です. 9.1.34 $WebApplication $WebApplicationはwebMathematica がインストールされているWebアプリケーションの名前を与え ます.通常これは「/webMathematica」ですが,異なる場合もあります.この定義を使ってポータブル なコードを書くことができます.この方が,あるWebアプリケーションから別のWebアプリケーショ ンへ移動するよりも簡単です. In[1]:= Needs@"MSP`"D; In[2]:= $WebApplication Out[2]= êwebMathematica $WebApplicationを使って,画像やアプレットのようなリソースをwebMathematica Webアプリケー ションのルートからロードすることができます.$WebApplicationは,例題TextApplet.jspのアプレッ トをロードするのに使われています. 9.2 MSPTaglibのリファレンス このセクションではMSPのtaglibが提供している6つのタグについて説明します.これらの使い方の例 はたくさんありますが,特に「基本的な例題」のセクションをご覧になるとよいでしょう. 220 webMathematica User Guide msp:allocateKernel ב算のためのMathematica カーネルを割り当てる msp:evaluate Mathematica への入力を評価し,出力ページに結果を挿入する. msp:get Mathematica によるב算結果を得,これをJavaの式のध定に用いる. msp:set Javaの式の値を持った Mathematica の変数をध定する. msp:includeClassicMSP MSPのスクリプトを含める. msp:forwardClassicMSP MSPのスクリプトへ転送する. MSPのtaglibは,最も基本的には,JSPが1つまたは複数のmsp:evaluateタグの周りのmsp:allocate Kernelタグをラップするために使われます. ... <msp:allocateKernel> <msp:evaluate> ... </msp:evaluate> <msp:evaluate> ... </msp:evaluate> </msp:allocateKernel> ... 以下はこれらのタグの操作説明です.MSPのtaglibを使うJSPの処理ステップのまとめになっていま す. 9.2.1 msp:allocateKernel (タグオープン) msp:allocateKernelタグはב算のためにMathematica カーネルを入手するために使われます.開始タ グはページの処理に次のステップを踏みます. 221 webMathematica User Guide プールの決定 msp:allocateKernelは,まず,JSPの名前に基づいてリクエストに使うプールを決定します.名前の 付いたプールがなければGeneralプールが使われます. カーネルの割当て Mathematica カーネルはカーネルプールからリクエストされます.プールにはב算のために待機して いるカーネルが入っています.使えるカーネルがなければ,システムは使えるようになるまで待機し ます.プールを使うことで,複数のリクエスト間でMathematica カーネルを分け合うことが可能にな り,システムの応答時間が短くなります. 各リクエストが全く異なるカーネルを得ることがあるので,カーネルに何かを保存して次に再びそれ を使うことはできません. 入力変数の割当て リクエストで送られた入力変数は,次に値と共にMathematica カーネルに送られます.変数symと値 funに,Mathematica の$$sym = "fun"という割当てが行われます.これで,値はMathematica の文字 列として送られ,何らかの特別のアクションなしでは評価されなくなります.input要素だけが変数 のソースではないのでご注意ください.例えば,画像マップも変数を転送します.webMathematica は これらの変数の名前を付け替えて,ユーザのMSP中のMathematica コードと干渉し合うことをഛぎま す. 各変数はスキャンされ,有効なMathematica のシンボルであるかどうか確認されます.「.」という記 号はすべてバッククォート(`)で置き換えられます.またアンダースコア(_)は「U」で置き換えられま す.名前の変換はJ/Link におけるそれと一致します. 以下は変数名の変換例です. サーバ変数 Mathematica のシンボル input $$input name.x $$name`x var_x $$varUx 222 webMathematica User Guide その後,各変数は文字,数字,ドル記号($),バッククォート記号(`)しか含んでいないことが確認され ます.これにより,エクスクラメーション記号(!)で始まる変数を送る攻撃が抑止されます.エクスク ラメーション記号で始まる変数はMathematica にオペレーティングシステムシェルの操作を始めさせ る可能性があるので,潜在的な危؉性を孕んでいるのです. 各値はMathematica の文字列になります.ここで,バックスラッシュ記号(\)やダブルクォート記号 (")があると,バックスラッシュ記号(\)がઉ加される形で拡張されます.値がエクスクラメーション記 号(!)で始まっている場合は,スペースが加えられます.最後にダブルクォート(")が前後に加えられま す. サーバの値 Mathematica の値 Sin@x+yD " Sin@x+yD " !myBoolean " !myBoolean" "¥foo¥bar " " ¥" ¥¥ foo ¥¥ bar ¥" " パラメータの割当て カーネルのリクエストに相応しくなるように,$ServletRequest,$ServletResponse,$Servlet Config,$ScriptName,$PathInfo,$QueryStringに割当てをします. 初期化 $Contextと$ContextPathのध定は保存され,メッセージとプリント出力の保存に使われたリストは 初期化されます. 9.2.2 msp:evaluate msp:evaluateタグはJSPの内ಊにあるMathematica のコマンドを評価するためのもので す.msp:evaluateタグの内ಊにあるMSPの関数すべてを使うことができます.それぞれのタグは内 容を評価するようにmsp:allocateKernelタグで割り当てられたカーネルを使います.カーネルが割り 当てられていない場合,リクエストはエラーページに転送されます. MSPExceptionが投げられると,処理コードがそれを捕え,適切なエラーメッセージを挿入します. MSPReturnコマンドが評価されると,進行中の評価や他のすべての評価が直ちに終了され,引数が 直接JSPからೊされます.MSPReturnコマンドがひとつもなければ,評価結果は出力ストリームに挿 入されます. webMathematica User Guide 223 各評価の処理は,KernelTimeLimitध定パラメータからב算される時間のパラメータであるTimeCon strainedでラップされます. Mathematica が何らかのメッセージや出力を生成すると,それらは MSPGetMessagesとMSPGetPrintOutputでそれぞれ回収できるように保存されます. msp:evaluateタグの結果はフォーマットされ,結果としてೊされます.以下の例では出力ページに その日の日付けが表示されます. <msp:evaluate> Date[] </msp:evaluate> ひとつのmsp:evaluateタグで複数の日付けをב算したければ,別々のステップをセミコロン(;)で区切 ります.最後のב算の結果がフォーマットされて出力ページに現れます.以下の例ではx+yというב 算の数値結果が現れます. <msp:evaluate> x = Sin[5.6]; y = Sqrt[x]; x+y </msp:evaluate> msp:evaluateタグの結果のフォーマットについては「評価のフォーマット」で詳しく説明してあり ます. msp:allocateKernelスコープ内ではmsp:evaluate,msp:set,msp:getのすべてのタグで同じカー ネルが使われます.このためそれぞれは互いに可視的です.この定義は/msp:allocateKernelでクリ アすることができます. 9.2.3 msp:allocateKernel(タグクローズ) msp:allocateKernelタグが閉じられると,次のステップで後処理が行われます. 224 webMathematica User Guide Javaの例外 JSPの処理中にJavaの例外が投げられると,投げられた例外は捕えられ,カーネルはシャットダウンさ れた後に再スタートされます.それから例外が再度投げられ,場合によってはHTTPのリクエストと 一緒にೊされます. MSPReturn 評価中にMSPReturnがあると,JSPの通常の出力の代りにその引数がೊされます. ContentTypeのध定 コンテントタイプがध定されます.これはMSPPageOptionsのContentTypeオプションのध定によ って,またはMSPReturnによって指定されます.デフォルトはtext/htmlです. カーネルをクリーンにする カーネルは再び使えるようにクリーンな状態にされます.つまり,リクエストとともに送られたパラ メータの値がクリアされ,デフォルトコンテキストのすべてのシンボルが取り除かれます.これに加 えて$Contextと$ContextPathが初期値に戻され,Javaオブジェクトの参照が削除されます.また,開か れたストリームはすべて閉じられます. カーネルのЖ放 カーネルは再び使えるようにプールに戻されます. 9.2.4 msp:set msp:setタグはJavaを使ってMathematica のシンボルをध定するためのものです.各 msp:setタグは msp:allocateKernelタグで割り当てられたカーネルを使ってその内容を評価します.カーネルが割り 当てられていない場合は,リクエストがエラーページに転送されます. このタグは以下の必ࣆ属性を持ちます. name 結果を保持する Mathematica 変数の名前 225 webMathematica User Guide 上記に加え,以下の属性もध定しなければなりません. booleanValue Javaのブーリアン値 byteValue Javaのバイト値 char Value Javaのchar値 intValue Javaのint値 longValue Javaのロング値 floatValue Javaの浮動値 doubleValue Javaのダブル値 objectV alue Javaの参照値 次の例題では,Mathematica の変数varがJavaのint numでध定されています. <msp:allocateKernel> <msp:set name="var" intValue="<%=num %>" /> </msp:allocateKernel> 先に挙げたmsp:setの例題もご覧ください. msp:allocateKernelスコープ内ではmsp:evaluate,msp:set,msp:getのすべてのタグで同じカー ネルが使われます.このためそれぞれは互いに可視的です.この定義は/msp:allocateKernelでクリ アすることができます. 9.2.5 msp:get msp:getタグはMathematica から値を取ってJavaに入れるためのものです.各 msp:getタグは,内容を 評価するようにmsp:allocateKernelタグによって割り当てられたカーネルを使います.カーネルが割 り当てられていないと,リクエストはエラーページに転送されます. このタグは以下に記した3つの必ࣆ属性を取ります. 226 webMathematica User Guide name 結果を保持するためのJava変数の名前. type 結果のタイプ.参照オブジェクトでなければならない. value 評価する Mathematica のコマンド. 次の例題では,タイプDoubleのJavaの変数dValueがMathematica の関数Random[]の結果にध定され ています. <msp:allocateKernel> <msp:get name="dValue"type="Double"value="Random[]"/> </msp:allocateKernel> 先に挙げたmsp:getの例題もご覧ください. msp:allocateKernelスコープ内ではmsp:evaluate,msp:set,msp:getのすべてのタグで同じカー ネルが使われます.このためそれぞれは互いに可視的です.この定義は/msp:allocateKernelでクリ アすることができます. 9.2.6 msp:includeClassicMSP msp:includeClassicMSPタグはMSPスクリプトをJSPに入れるためにあります.MSPスクリプトは 「以前のwebMathematica 技術」のセクションで説明してあるように,webMathematica を使う古い方法 です. このタグは以下のように2つの属性を取ります. name 含むべきMSPスクリプトの名前.これは必ࣆ属性であÖ る. arguments MSPスクリプトに渡す引数.これは選択属性である. 以下の例にはMSPスクリプトExamples/PlotSingle.mspの結果が含まれています.引数fun= Sin[x]&x1=10はMSPスクリプトに渡されます. 227 webMathematica User Guide <msp:includeClassicMSPname="Examples/PlotSingle" arguments="fun=Sin[x]&x1=10"/> 先に挙げたmsp:includeClassicMSPの例題もご覧ください. 9.2.7 msp:forwardClassicMSP msp:forwardClassicMSPタグはMSPスクリプトをJSPから転送するためにあります.MSPスクリプ トは「以前のwebMathematica 技術」に関するセクションで説明してあるように,webMathematica を使 う古い方法です. このタグは以下のように2つの属性を取ります. name 含むべきMSPスクリプトの名前.これは必ࣆ属性であÖ る. arguments MSPスクリプトに渡す引数.これは選択属性である. 以下の例はMSPスクリプトExamples/PlotSingle.mspに転送されます.引数fun=Sin[x]&x1=10は MSPスクリプトに渡されます. <msp:forwardClassicMSPname="Examples/PlotSingle" arguments="fun=Sin[x]&x1=10"/> 9.2.8 まとめ ページ処理の概要は「webMathematica の技術」をご覧ください. 228 webMathematica User Guide 9.3 サイトのध定 このセクションではwebMathematica サイトのध定についてまとめます.ほとんどのध定情報はध定フ ァイルのMSP.confに入れられています.このファイルの内容はシステムと個々のMathematica カーネ ルを初期化するために使われます.これについては「Mathematica の初期化」のセクションにより詳 しい説明があります. webMathematica は複数のカーネルプールがサポートできます.カーネルプールとは特別にध定できる Mathematica カーネルのグループのことで「よりژ度なトピック」の「 複数カーネルプール」で詳し く説明してあります.余分なプールのध定をしない場合は,使われるプールは1つだけです.これが Generalプールと呼ばれるものです. 9.3.1 MSP.conf MSP.confはメインのध定ファイルです.これに加え,ઉ加のカーネルプールもそれぞれध定ファイ ルを持つことができます.Testsという名前のプールのध定ファイルはTests.confとなります.プー ルのध定ファイルはMSP.confにあるध定を上書きすることができます.プールのध定ファイルでパ ラメータがध定されていなければ,その値はMSP.confから継承されます.MSP.confでのみ意味を 持ち,プールのध定ファイル中のध定は無視してサイト全体の操作を変更するパラメータがいくつか あります. では,それぞれの定義をより詳しく見てみましょう. CheckToExpression このパラメータは,第1引数がwebMathematica のリクエストと共に送られた文字列のとき Mathematica コマンドのToExpressionがセキュリティチェックを行うかどうかをコントロールします.デフォル トではテストが行われます.しかしध定をfalseにするとテストは行われません. CheckToExpression=false 一般的なサイトではこの機能を修正すべきではありません.これについては「セキュリティ」のセク ションでより詳しく説明してあります. このパラメータはサイト全体に変更を加えるもので,MSP.confでしかध定できません. webMathematica User Guide 229 CollectStreams このパラメータは,Mathematica カーネルで開いた入出力のストリームを自動的に閉じるかどうかを コントロールします.デフォルトでは閉じられます.しかしध定CollectStreamsをfalseにするとス トリームは閉じられません. CollectStreams=false 一般的なサイトではこの機能を修正しない方がよいでしょう.これについては「セキュリティ」のセ クションでより詳しく説明してあります. このパラメータはMSP.confやプール固有のध定ファイルで使えます. FileCheckPeriod このパラメータは,webMathematica が作成するテンポラリファイルをどの程度頻繁に削除するかをコ ントロールします.テンポラリファイルの最短ライフタイムをミリ秒単位でध定します.以下はこれ を1000000ミリ秒にध定した例です. FileCheckPeriod=1000000 このパラメータはサイト全体に変更を加えるもので,MSP.confでしかध定できません. FrontEndGraphics このパラメータはフロントエンドでグラフィックスを描画するか,カーネルのみで描画するかをコン トロールします.trueのときはフロントエンドが使われます.falseのときはカーネルだけが使われま す.デフォルトध定はtrueです.このध定はMathematica の変数MSP`Utility`FrontEndGraphicsの 初期化に使われます.数式のタイプセットにはFrontEndGraphicsのध定に関係なく常にフロントエ ンドが使われます. FrontEndGraphics=true 230 webMathematica User Guide フロントエンドで生成された画像はより品ޑがژくなりますので,このパラメータは変更しないこと を強くお勧めします.フロントエンドの実行に問題があるときににだけお使いください. このパラメータはMSP.confやプール固有のध定ファイルで使えます. FrontEndLaunchCommand 画像を作ったりNotebook APIの関数を使ったりするために,web Mathematica はMathematica フロント エンドを必要とします.フロントエンドのӭ動にはFrontEndLaunchCommandを使った特別のध定 パラメータを置くとよいでしょう.フロントエンドをӭ動するためには別のコマンドを使うこともで きます. 例えば,描画のためにフロントエンドを別のXサーバに接続したいような場合は,下記のようにする とよいでしょう. FrontEndLaunchCommand=mathematica -mathlink -display :1 -nogui -geometry 1000x500+10+10 これはフロントエンドに固定ジオメトリのサーバモードでDISPLAY 1を使うように指示します. このパラメータはMSP.confやプール固有のध定ファイルで使えます. ImageAltText このパラメータは生成されたimgタグのalt属性の値をध定します.デフォルト値は「Created webMathematica」です. by ImageAltText="Thisimage was created by my server." このパラメータはMSP.confやプール固有のध定ファイルで使えます. JLinkNativeLibraryDirectory サーブレットコンテナの中には,J/Link ネイティブライブラリをWebアプリケーションのレイアウト からインストールしないものがあります.このような場合は,ネイティブライブラリを中央の任意の 場所に置いて,この場所をMSP.confで指定します.次の例をご覧ください. 231 webMathematica User Guide JLinkNativeLibraryDirectory=/usr/local/jlink このパラメータで指定されるディレクトリは,通常webMathematica/WEB-INF/libにあるSystemFilesディレクトリを含んでいるディレクトリでなければなりません.Linuxでは次のようなレイアウト になります. jlink SystemFiles Libraries Linux libJLinkNativeLibrary.so このパラメータはサイト全体に変更を加えるもので,MSP.confでしかध定できません. KernelAcquireLimit このパラメータはシャットダウンするまでに各カーネルがカーネルプールから引き出されてもよい回 数を指定します.一般に一定の間隔で各カーネルをシャットダウンするとよいようです.しかし,そ れほど頻繁にする必要はありません.次の例では各カーネルが500回毎にシャットダウンされます. KernelAcquireLimit=500 このパラメータはMSP.confやプール固有のध定ファイルで使えます. KernelConnectLimit このパラメータはwebMathematica がカーネルをӭ動するまでの待ち時間を指定します.指定時間内で カーネルがӭ動できなければエラーが報告されます.この例では各カーネルは100秒後に再スタート されます. KernelConnectLimit=100000 このパラメータはMSP.confやプール固有のध定ファイルで使えます. 232 webMathematica User Guide KernelInitialization これは選択的なパラメータで,カーネルの初期化の最後で処理されるMathematica のカーネルにઉ加 的な評価を与えるものです.特別なパッケージをロードしたりMSP関数の詳細をध定したりするとき に使えます.この例ではカーネルがӭ動される度にコマンドNeeds["MyApplication`"]が評価されま す. KernelInitialization=Needs["MyApplication`"] KernelInitializationのデフォルトコンテキストにあるシンボルに定義を与えると,この定義は各リク エストの後処理のコードでクリアされ,シンボルは除去されます.これはコンテキストを適切に使う ためにMathematica のパッケージ形式以外で書かれたパッケージをKernelInitializationからロードした 際にもӭります.定義はどんなものでも名前の保存のためにそれ自身のコンテキストを使っていなけ ればなりません.これは,例えばTestNameSpace`Computeのように,コンテキストを持った名前 を前置することで,あるいはBeginPackage[]やEndPackage[]を正しく使うことで行えます. KernelInitializationパラメータを使うもうひとつの理由は,パッケージによっては正しく初期化する ためにフロントエンドが必要なものがあるからです.このようなパッケージはUseFrontEndで webMathematica にロードします.次をご覧ください. KernelInitialization=UseFrontEnd[Needs[ "MyApplication`"]] このパラメータはMSP.confやプール固有のध定ファイルで使えます. KernelNumber KernelNumberパラメータはシステムがスタートするときにӭ動されるカーネルの数を与えます.こ の数に相当するライセンスがあることを確認してください.ライセンスが不十分な場合は,ӭ動でき ないカーネルも出てきます.これはログファイルに書き込まれます. KernelNumber=2 このパラメータはMSP.confやプール固有のध定ファイルで使えます. webMathematica User Guide 233 KernelPools このパラメータは「複数カーネルプール」で説明してあるように,Mathematica カーネルのઉ加プー ルの名前を指定するのに使われます.次の例ではExamplesとTestという2つのプールが指定されてい ます. KernelPools=Examples,Test このパラメータはサイトに変更を加えるもので,MSP.confでしかध定できません. KernelTimeLimit このパラメータはページを処理するときの最大時間(ミリ秒)を与えます.時間をオーバーする と,カーネルはシャットダウンされ再スタートされます.この例では1ページを処理する時間が60秒 以上かかるとカーネルが再スタートされます.ログシステムがカーネルのシャットダウンを記ຉしま す. KernelTimeLimit=60000 このパラメータはMSP.confやプール固有のध定ファイルで使えます. MathLinkArguments こ れはJ/LinkのメソッドcreateKernelLinkの引数として使われます.これがध定されていない と,Mathematica が実行されているプラットフォームに適したデフォルトが使われます.典型的なध 定は以下の通りです. MathLinkArguments=-linkname'math -mathlink' -linkmode launch MathLinkArgumentsがMathematica をӭ動するコマンドを与えます.特別なコマンドラインの引数 が必要な場合は,ここでध定することができます.例えば,特別なパスワードファイルを付けて Mathematica をӭ動したいような場合は,-pwfileコマンドラインオプションが使えます.Mathematica をӭ動する実行ファイルに完全パス名を与える必要がある場合もあります. 234 webMathematica User Guide このパラメータはMSP.confやプール固有のध定ファイルで使えます. MSPDirectory このパラメータは,「以前のwebMathematica 技術」の章で説明してあるようなwebMathematica で使う 少し古いタイプのMSPスクリプトに対してのみ有効です.これはMSPスクリプトの場所を表していま す.これがध定されていない場合はデフォルト値が使われます.このディレクトリはMSPスクリプト がロー ドするであろうパッケージや他のアプリケーションが保存できるように,Ma the ma tica $Pathに置かれます. MSPDirectory=/usr/local/mathematica/AddOns/Applications/MSP/MSPScripts このパラメータはMSP.confやプール固有のध定ファイルで使えます. JSPはWebアプリケーションの内側にあるので,このध定はwebMathematica でのJSPの実装にはあまり 意味がありません. PackagesDirectory これは選択的なパラメータで,Mathematica の変数$Pathに加えるディレクトリを与えます.パッ ケージのロードやインストールに関しては「パッケージとアプリケーション」のセクションもご覧く ださい. PackagesDirectory=/usr/local/files/Code このパラメータはMSP.confやプール固有のध定ファイルで使えます. PoolPath このパラメータは「複数カーネルプール」のセクションで説明してあるように,JSPスクリプトを カーネルプールにマッピングするのに使われます.次の例ではExampleDirディレクトリにあるJSPが プールExamplesを使い,TestDirディレクトリにあるJSPがプールTestを使います. webMathematica User Guide 235 PoolPath.Examples=ExampleDir PoolPath.Test=TestDir このパラメータはサイト全体に変更を加えるもので,MSP.confでしかध定できません. RequestLog この選択的なパラメータは,webMathematica がログシステムに作る出力を抑制するために使われま す.デフォルトでは出力行は各リクエストによって生成されます.RequestLogがfalseにध定される とこれが抑制されます. RequestLog=false このパラメータはサイト全体に変更を加えるもので,MSP.confでしかध定できません. SecurityConfigurationFile このパラメータを使うと,MSP`Utility`AllowedContexts,MSP`Utility`DisallowedContexts,MSP`Utility` AllowedSymbols,MSP`Utility`DisallowedSymbolsに独自の定義を行って独自のセキュリティモデルを変 更することができます.定義は/WEB-INF/confディレクトリのファイルに入れ,ファイルの名前はध 定 パ ラ メ ー タS ec u r i t y C o n f i g u r a ti o n F i l eで ध 定 し ま す . 例 え ば, ध 定 情 報 がS e c u r i t y Configuration.mというファイルにある場合は以下を加えなければなりません. SecurityConfigurationFile=SecurityConfiguration.m セキュリティについては前のセクションもご覧ください. このパラメータはMSP.confやプール固有のध定ファイルで使えます. StaticFileExtensions このパラメータはサーバがೊすऍ的ファイルの拡張子とコンテントタイプを与えます.これはMSPス クリプトが相対URLを持つ画像(あるいは他のファイル)を参照するために使われます.これについ ては「ऍ的なファイルを含む」で詳しく説明してあります.典型的なध定は以下のようになります. 236 webMathematica User Guide StaticFileExtensions=gif:image/gif,jpg:image/jpeg,jpeg:image/jpeg このパラメータはサイトを変更します.MSP.confでしかध定できません. ऍ的な内容はサーブレットコンテナによって処理されるので,このध定はwebMathematica でのJSPの 実装にはあまり意味がありません. VerboseLogs VerboseLogsパラメータはシステムが記ຉするログのレベルをコントロールします.falseのध定で は重大なエラーだけをサイトの各リクエストにつき1項目だけ記ຉします.trueのध定ではより多く の情報を記ຉします. VerboseLogs=true このパラメータはサイトを変更します.MSP.confでしかध定できません. WebApplicationName サーブレットコンテナの中にはWebアプリケーションをロードした後でディレクトリ名を変更するも のがあります.webMathematica はURLの生成にWebアプリケーションの名前を必要とするので,これ は問題となりかねません.名前が間違っているとURLも間違ったものになってしまい,グラフィック スが見えないといった問題につながります.これはMSP.conf中のWebアプリケーションの名前をੴ べることでЖ決します.以下をご覧ください. WebApplicationName=webMathematica このパラメータはサイトを変更します.MSP.confでしかध定できません. 9.3.2 セキュリティのध定 webMathematica のセキュリティシステムはカスタマイズすることができます.詳しくは「 セキュリテ ィ」のセクションをご覧ください. webMathematica User Guide 237 9.3.3 Xサーバのध定 フロントエンドをXサーバに接続するためには,特別ध定が必要な場合がしばしばあります.これは インストールの「X Window Systemのध定(Unixのみ)」の項で説明してあります.これはUnix上で webMathematica をӭ動するときしか問題になりません. 9.4 LiveGraphics3D webMathematica の機能で便利なもののひとつにLiveGraphics3Dアプレットとの統合が挙げられま す.このアプレットはMathematica の3Dのグラフィックスを描画し,インタラクティブな回転やサイ ズੴ整のような機能をサポートします.これはwebMathematica とともに出荷されており,コマンド MSPLive3Dと共に使うことができます.このアプレットは幅広いJava対応ブラウザで使えるように 注意深く開発されています. 以下がそのインターフェースです. 238 webMathematica User Guide ユーザアクション アプレットの反応 左マウスボタンを押しながらドラッÖ グ 画面でބの周りを回転する ドラッグしながら左のマウスボタンÖ を放す 画面でބの周りをスピンする 「SHIFT」 キーを押して垂直にドラッグする ズーム 「SHIFT」 キーを押して水平にドラッグする 画面に垂直にބの周りを回転する 「CONTROL」 キーを押して垂直にドラッグ 焦点Ե離を変更 「CONTROL」 キーを押して水平にドラッグ ステレオ効果の強度を変更 「META HALTL 」 キー (あるいは右マウスボタン) を押して垂直にドラッグ グラフィックスをಊ分的に剥がす 「o」 キーを押す Javaコンソールにパラメータध定を書く 「s」 キーを押す 単眼視と複眼視を切り換える 「HOME」 キーを押す オリジナルのパースペクティブを保存する (スピンなし) MSPLive3Dコマンドで下記のようにアプレットのMagnificationパラメータをध定することもできま す. <msp:evaluate> MSPLive3D[ Plot3D[ Sin[x y],{x,0,3},{y,0,3}],Magnification-> 0.4] </msp:evaluate> LiveGraphics3Dアプレットに関するより詳しい情報は制作者Martin http://wwwvis.informatik.uni-stuttgart.de/~kraus/LiveGraphics3Dをご覧ください. KrausのWebサイト webMathematica User Guide 239 9.5 動的HTML Webは,開発された当初はऍ的なページしかサポートしませんでした.しかし,技術の進歩により動 的な内容を生成するインタラクティブなアクセスもできるようになりました. 基本的にWebはその主プロトコルのHTTP (Hyper Text Transfer Protocol)で動かされています.HTTPに はある種の制限があります.HTTPのもとで,クライアントはサーバにリクエストを送り,サーバか らその応えがೊされます.ここで重要になる特徴に,このプロセス全体が無記名だということがあり ます.つまり,リクエストを処理した後にはリクエストの記ຉは残らないのです.もちろん,その間 の状態は何らかのメカニズムを使ってとっておくことができます.例えばサーブレットAPIには MSPSessionVariableで使える状態を記ຉするメソッドがあります. このリファレンスセクションでは,動的なWebの内容に関するサーバとクライアントの技術について 見ていきます.しかし,これは大変変化の激しい分野ですから,完璧なੴ査を行うのは無理だとؘわ ざるを得ません. 9.5.1 サーバ技術 動的な内容にはサーバの側のさまざまな技術が関連しています.以下ではその中でも特に重要な CGIスクリプト,ASP (Active Server Pages),サーバプラグイン,Perlスクリプト,Javaサーブレットと JavaServer Pagesについて見ていきます. CGIスクリプト CGIスクリプトは動的な内容のもとになったサーバ技術を提供しました.CGIのもとでは,シェルス クリプトやコンパイルされたバイナリのように実行可能なものが,リクエストの度にӭ動されます. このメカニズムはさまざまな意味で限定されています.まず,リクエストの度に新たなCGIをӭ動し なければならないためコストがژくつき,スケーラビリティの問題につながる可能性もあります.こ のЖ決方法として,実際のCGIスクリプトを自身のサーバとコミュニケートできる軽めのプロセスに することが考えられます.多くのWebではこのЖ決策が取られています.無論,この開発は決して簡 単ではなく,結果的に動的なソリューションを使うよりも,もっと複ܚになる可能性もあります. 240 webMathematica User Guide ASP (Active Server Pages) ASP (Active Server Pages)は動的なWebの内容を開発するためにMicrosoftが開発したスクリプトلؘで す.広く普及していてパワーもあります.現在はサポートしていませんが,今後のサポートを視野に 入れています. サーバプラグイン ほとんどのHTTPサーバが,インタラクティビティの特別な機能をサポートする何らかの拡張性を提 供しています.このアプローチの問題点は,移植性に劣る点です. Perlスクリプト PerlはCGIの中,あるいはサーバプラグインの中でよく使われるスクリプトلؘです.PerlとMathematica を繋ぐ技術は存在しますが,この技術はJavaとの結合技術ほどには開発が進んでいません. JavaサーブレットとJavaServer Pages Javaサーブレットは,HTTPのリクエストに応えるハイレベルのAPI(プログラミングインターフェー ス)を提供します.Webのサーバを拡張してサーブレットエンジンをઉ加するのにはさまざまな方法 があり,全Webサーバのための主要プラットフォームのすべてでӭ動するソリューションがありま す. Servlet APIは,サーブレットがӭ動している間情報を保持し,HTTPのリクエストやೊ答にも使える機 能を提供するハイレベルのインターフェースです. JavaServer Pages (JSPs)はサーブレットがHTMLをೊす便利な方法を提供するJavaサーブレットを使う方 法のひとつです.サーバがJSPをサーブレットに変換します.これは後で実行されます. webMathematicaにはJavaサーブレットとJavaServer Pages技術の混合したものが実装されています. 9.5.2 クライアント技術 究極的にはどんな内容でもクライアントにダウンロードし描画することができるようになります.あ る意味では,サーバ技術の目的とはクライアントの入力を準備することです.クライアントの側にも さまざまな動的内容のテクノロジーがあります.これにはHTML,JavaScript,アプレットがありま す. webMathematica User Guide 241 HTML Webのサーバで配布される基本的なものはHTMLです.HTMLはタグで構成された木構造のلؘで す.現在,HTMLはより厳密なلؘのXHMTL(XMLの厳密なアプリケーション)への移行期にあり ます. HTMLは動的なWebの内容のトピックにとって基本的なものです.そこで,HTMLを使った動的な Webの内容の簡単な例を挙げておきました. まず,基本的なHTMLのドキュメントから始めます. <html> <title>My Page</title> <body> <h1>My Page</h1> <p>Welcome to my page.</p> </body> </html> これをWebのサーバからダウンロードし,Webのブラウザに表示します. 動的な要素がformとinput要素を使ってHTMLにઉ加されます.これはHTML文書の中に含むことが できます.下に挙げたのはform要素です. <form action="http://myhost/active"method="post"> </form> formには,action属性とmethod属性という2つの重要な属性があります.formが活性化されると URLとの接続を開き,postメソッドを使います. URLはページがダウンロードされたのと同じサーバにあることがよくあります.そのような場合 は,相対URLを使うのが一般的です. <form action="active" method="post"> </form> 242 webMathematica User Guide form要素の中にいろいろなボタンや入力フィールドをઉ加するinput要素をઉ加することもできま す.ここではformに2つのinputタグをઉ加した例を示してあります.最初のタグでテキストの入力が 可能になります.2番目のタグでformを送信します. <form action="active" method="post"> <input type="text" name="ARG1"> <input type="SUBMIT"name="button"value="Compute"> </form> formがsubmitというinputタグで活性化されると,ブラウザは参照されたURLにaction属性でリクエ ストを送ります.これによりform中の全inputタグからnameとvalueのペアが送られます.これが HTMLをӭ動する最も基本的な方法です. form要素に関連してђえておきたいことにname/valueのペアをURLで指定できるということがあり ます.どこかでhttp://myserver/document?ARG1=10&ARG2=20等のような形をご覧になったこ とがあるでしょう. JavaScript JavaScriptはクライアントとサーバのインターネットアプリケーションを開発するための,コンパクト なオブジェクトベースのスクリプトلؘです.JavaScriptコードは HTMLページに直接埋め込むこと もできます.例えばformとinput要素の操作に装飾を施すことができます.JavaScriptの問題のひとつ にその動き方がすべてのブラウザで同じではないことがあります.JavaScriptはブラウザ自体とブラウ ザが保持しているドキュメントが操作できます.また,アプレットやプラグインとインタラクトする こともできます. webMathematica にはJavaScriptを使った例が含まれています. アプレット アプレットはJavaで書かれたプログラムで,Javaを動かすことのできるブラウザ上でӭ動するように なっています.JavaScriptに比べ,HTMLの統合度は低くなっていますが,開発が容易でJavaの周辺技 術をすべて呼び出すことが可能だといえそうです.JavaScriptのように,ブラウザの中には(特に古い ものは)アプレットのサポートが不完全だったり,サポートしていてもޑが悪かったりするものがあ ります.アプレットはJavaプログラミングلؘで使え,ブラウザの中に実際に描き出せるたくさんの 関数を呼び出すことができます. webMathematica User Guide 243 例の中にはアプレットを使うようになっているものもあります. 今後の開発 主なブラウザのInternet Explorer,Mozilla,それにNetscape Navigatorは,インタラクティブな技術の開 発をハイスピードで続けています.webMathematica のユーザの皆様も,それらが使用可能になり次 第,それをݠされるとよいでしょう. 9.6 MathMLの技術 このセクションではMathMLを使う上でのさまざまな技術をまとめます.MathMLを使う上での最新技 術についてはhttp://www.w3.org/Mathご覧ください.webMathematica でのMathMLの使い方は 「MathML」のセクションで説明してあります.以下はwebMathematica と統合した際に中心となる MathML技術の簡単な説明です. 9.6.1 MathPlayer http://www.dessci.com/webmath/mathplayer/ MathPlayerはWindowsのInternet Explorerバージョン5.5以降におけるMathMLの描画エンジンです.これ は先に説明したMathMLのスタイルシートでサポートされています.Design Scienceが無料のMathPlayerを提供していますので,ご希望の方はDesign ScienceのWebサイトをご覧ください.MathPlayerは MathMLのクリップボードへのコピーをサポートします.コピーしたものはMathematica のような他の アプリケーションにペーストできます.これにより,Web上で見たMathMLを,簡単且つ効果的に再 利用することができます. 9.6.2 WebEQ http://www.dessci.com/webmath/webeq/features.stm WebEQは動的な数学を含むWebページを構築するためのツールセットです.webMathematica にとって 特に興味深いのは,Webブラウザ上で使いやすいグラフィカルな等式エディタとしての機能を持つ JavaのアプレットのWebEQ Input Controlです.これは,特殊な記号の簡単な入力や全体の構造用のテ ンプレート等を可能にする,カスタマイズ可能なツールバーを提供します. WebEQの使い方で重要なもののひとつに,Web上でのテンプレートベースの数学記号入力システムが あります.これは特定の主題に特化することができ,大変柔୬で強力です. 244 webMathematica User Guide 9.6.3 Mozilla http://www.mozilla.org MozillaはWindows,Macintosh,Linux,Unixを含む幅広いプラットフォームでサポートされてい る,オープンソースのWebブラウザです.Mozillaの最新バージョンはMathMLをネイティブにサポー トしており,上述のようにMathMLのスタイルシートでも使われています.Mozillaは従来のWebブラ ウザの機能の多くを提供し,Netscape Navigatorと関連があります. 9.6.4 Amaya http://www.w3.org/Amaya/ AmayaはWeb上でのドキュメント出版を可能にするブラウザ/著作ツールです.Windows,Linux,Solarisで使用することができます.Am ayaはMathMLをネイティブにサポートし,上 述の よ うに MathMLのスタイルシートでも使われています.また,AmayaはXMLの描画用アプリケーションの SVGもネイティブにサポートしています. 9.7 ファイルのレイアウト このセクションではwebMathematica のアーカイブのファイルのレイアウトについて説明します. webMathematica Webアプリケーション これはwebMathematica Webアプリケーションのファイルのレイアウトです. webMathematica index.html BrowseExamples セスできるwebMathematica の例題 Examples Computation Data DesignTemplates HTML MathML PDF SVG XML Resources applets CSS Documentation ErrorPages ページ images banners buttons Template XSL デザインテンプレートからアク 例題の計算 データをロードする例 よりきれいなデザインの例 HTMLフォーマットの例 MathMLの例 PDF生成の例 SVGの例 XMLの例 HTMLスタイルシート エラーメッセージを表示する MathMLの描画のための webMathematica index.html BrowseExamples セスできるwebMathematica の例題 Examples Computation Data DesignTemplates webMathematica User Guide HTML MathML PDF SVG XML Resources applets CSS Documentation ErrorPages ページ images banners buttons Template XSL XSLTスタイルシート WEB-INF web.xml Applications Data ExampleUtilities JLink ョン MSP リケーション conf mathpass イルのサンプル MSP.conf webMathematica.tld classes lib アーカイブ kernelpool.jar JLink.jar servlets.jar tags.jar SystemFiles MSPScripts src ス デザインテンプレートからアク 例題の計算 データをロードする例 よりきれいなデザインの例 HTMLフォーマットの例 MathMLの例 PDF生成の例 SVGの例 XMLの例 245 HTMLスタイルシート エラーメッセージを表示する MathMLの描画のための データファイルのサンプル 基本的な例題のプログラム JLink Mathematica アプリケーシ MSP Mathematica アプ webMathematica ライセンスファ webMathematica の設定ファイル 追加クラスの場所 webMathematica 実行 JLink ネイティブライブラリ 以前のwebMathematica の例題 webMathematica のソー これらのファイルの多くは例題,ドキュメント,ソースとして提供されています.これに加え て,webMathematica が実行できる全プラットフォームについてそれぞれに独自のファイルもありま す.より小さな環境で実行したい場合はこれらのファイルの多くを除去することができます.これに ついては「最小インストール」で説明します. 246 webMathematica User Guide MSP Mathematica アプリケーション MSPアプリケーションのファイルのレイアウトは次のようになります. MSP MSP.m HTML.m SVG.m Security.m Kernel init.m Documentation English webMathematicaUserGuide.nb 9.8 リンク 以下のリンクはこのドキュメント作成時に有効であるものです. 9.8.1 Mathematica 技術 Wolfram Researchメインサイト http://www.wolfram.co.jp webMathematica http://www.wolfram.co.jp/products/webmathematica webMathematica リリースノート http://documents.wolfram.co.jp/webmathematica/releasenotes webMathematica ドキュメントアップデート http://documents.wolfram.com/webmathematica/updates webMathematica サポート http://support.wolfram.co.jp/webmathematica Mathematica http://www.wolfram.co.jp/products/mathematica webMathematica User Guide Mathematica 製品 http://www.wolfram.co.jp/products J/Link http://www.wolfram.co.jp/solutions/mathlink/jlink LiveGraphics3D http://wwwvis.informatik.uni-stuttgart.de/~kraus/LiveGraphics3D. 9.8.2 Mathematica パッケージ パッケージを書く http://documents.wolfram.com/v4-ja/AddOns/StandardPackages/6.18.5.html パッケージを書き保存する http://support.wolfram.co.jp/mathematica/packages/writing/make.html 9.8.3 Java SunのJava情報 http://java.sun.com Sun JDKのダウンロード.Windows/Intel,Linux/Intel,Solaris用 http://java.sun.com/j2se/downloads/index.html Mac OS X Java情報 http://www.apple.com/java/ PA-RISC/HP-UX Java情報とJDKのダウンロード http://www.hp.com/java/ IBM-RISC/AIX Java情報とJDKのダウンロード http://www.ibm.com/developerworks/java/jdk/aix/ Alpha/Tru64 Java情報とJDKのダウンロード http://www.hp.com/java/ Itanium/Linux JDKデベロッパリリース http://java.sun.com/j2se/downloads/index.html 247 248 webMathematica User Guide 9.8.4 Tomcat 現行バージョンへのリンク http://documents.wolfram.com/webmathematica/updates/install/tomcat/current Apache Tomcatダウンロード http://jakarta.apache.org/site/binindex.cgi Apacheメインサイト http://jakarta.apache.org 9.8.5 サーバJSPとサーブレット サーブレット技術のメインサイト http://java.sun.com/products/servlet/ サーブレットアプリケーション http://java.sun.com/products/servlet/industry.html JSP技術のメインサイト http://java.sun.com/products/jsp/ Apache HTTPサーバ http://httpd.apache.org JRunサーブレットエンジン http://www.macromedia.com/software/jrun/ 9.8.6 XML,HTML,MathML,SVG XML http://www.w3.org/XML/ HTML 4.0 http://www.w3.org/TR/REC-html40/ XHTML http://www.w3.org/TR/xhtml1/ webMathematica User Guide MathML http://www.w3.org/Math/ MathML文字 http://www.w3.org/TR/MathML2/chapter6.html Unicode文字 http://www.unicode.org/ MathPlayer http://www.dessci.com/webmath/mathplayer/ WebEQ http://www.dessci.com/webmath/webeq/features.stm Mozilla http://www.mozilla.org Amaya http://www.w3.org/Amaya/ SVG http://www.w3.org/Graphics/SVG/ Adobe SVG http://www.adobe.com/svg/ 9.8.7 JavaScript NetscapeによるJavaScript情報 http://developer.netscape.com/docs/manuals/communicator/jsguide4/ 9.8.8 PDFツール PStill http://www.pstill.com ps2pdf http://www.cs.wisc.edu/~ghost/doc/AFPL/8.00/Ps2pdf.htm 249 250 webMathematica User Guide 9.8.9 X Window System Xvnc: http://www.uk.research.att.com/archive/vnc/download.html Xvfb: http://www.xfree86.org/4.3.0/Xvfb.1.html RealVNC: http://www.realvnc.com/ TightVNC: http://www.tightvnc.com/