...

webMathematica ユーザガイド

by user

on
Category: Documents
66

views

Report

Comments

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を使うことです.
以下は&af;という名前付きの実体を参照する例題です.
webMathematica User Guide
95
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
<mi>sin</mi>
<mo>&af;</mo>
<mrow>
<mo>(</mo>
<mi>x</mi>
<mo>)</mo>
</mrow>
</mrow>
</math>
次の例題では数値&#8289;が使われています.推薦できるのはこちらです.
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
<mi>sin</mi>
<mo>&#8289;</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>&#8289;</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&#160;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&#160;-&#160;1&#160;-&#160;1&#160;-&#160;1&#160;-&#160;1&#160;-&#160;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&amp;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&amp;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>&af;<ê
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>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2<br>x&nbsp;+&nbsp;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>&af;<ê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>&af;<ê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/
Fly UP