Documentation 5. アプリケーション![]() |
![]() ![]() |
webMathematica が提供するHTMLのテンプレート技術の利点のひとつに,ほとんどの場合Mathematica のプログラムを使ってHTML形式を生成してみる必要がないことがあります.事実,HTMLのフォーマットに関連する問題の多くは標準的なツールが使えるWebのデザイナーに任せることができます.しかし,Mathematica の式にHTMLをフォーマットできる関数が適用できると便利なこともあります.これは特にHTMLの表の場合に顕著です.webMathematica には表形式の関数をサポートするHTMLユーティリティパッケージが付いているので,HTMLをフォーマットすることができます.このセクションではこのHTMLのフォーマットについて見ていきます.出力に関するより一般的な説明は「評価のフォーマット」をご覧ください.
「HTML関数」で生成されたものではないHTMLを返したい場合は,自分でHTMLを構築し下記の例のようにこれを返さなければなりません.
<msp:evaluate>
StringJoin[ "<b>", ToString[ x], "</b>"]
</msp:evaluate>
HTML関数はwebMathematica のレイアウトの一部であるパッケージMSP`HTML`に含まれています.このパッケージはwebMathematica が起動されると自動的にロードされるので,これを手動でロードする必要はありません.しかし,このパッケージをwebMathematica とは関係なく使いたい場合は,これをMathematica のAddOns/Applicationsディレクトリにコピーしてください.コピーの仕方は前のセクションをご覧ください.
上記のようにMSP`HTML`パッケージはwebMathematica で使うことができ,通常のMathematica にインストールすることもできます.パッケージは以下のようにロードします.
Needs["MSP`HTML`"]
関数HTMLTableFormは入力を受け入れ,これをHTMLの表にフォーマットします.
HTMLTableForm[ {{a, b, c}, {d, e, f}}]
"<table border='1'>\n <tr>\n <td>a</td>\n <td>b</td>\n <td>c</td>\n </tr>\n <tr>\n <td>d</td>\n <td>e</td>\n <td>f</td>\n </tr>\n</table>"
これはTableFormのTableHeadingsオプションと同じように働くTableHeadingsオプションを取ります.
HTMLTableForm[ {{a, b, c}, {d, e, f}}, TableHeadings -> {{r1, r2}, {c1, c2, c3} }]
"<table border='1'>\n <th/>\n <th>c1</th>\n <th>c2</th>\n <th>c3</th>\n <tr>\n <th>r1</th>\n <td>a</td>\n <td>b</td>\n <td>c</td>\n </tr>\n <tr>\n <th>r2</th>\n <td>d</td>\n <td>e</td>\n <td>f</td>\n </tr>\n</table>"
各要素に特別の書式設定を施したければ第2要素として書式設定関数を与えることができます.書式設定関数は文字列を返さなければなりません.以下ではすべての要素がMathMLにフォーマットされています.
HTMLTableForm[ {{x^2, Sin[x]}}, ExportString[#, "MathML"]&]
"<table border='1'>\n <tr>\n <td><math xmlns='http://www.w3.org/1998/Math/MathML'>\n <semantics>\n <msup>\n <mi>x</mi>\n <mn>2</mn>\n </msup>\n <annotation-xml encoding='MathML-Content'>\n <apply>\n <power/>\n <ci>x</ci>\n <cn type='integer'>2</cn>\n </apply>\n </annotation-xml>\n </semantics>\n</math></td>\n <td><math xmlns='http://www.w3.org/1998/Math/MathML'>\n <semantics>\n <mrow>\n <mi>sin</mi>\n <mo>⁡</mo>\n <mo>(</mo>\n <mi>x</mi>\n <mo>)</mo>\n </mrow>\n <annotation-xml encoding='MathML-Content'>\n <apply>\n <sin/>\n <ci>x</ci>\n </apply>\n </annotation-xml>\n </semantics>\n</math></td>\n </tr>\n</table>"
HTMLTableFormのデフォルトの書式設定関数はHTMLFormatです.これについては次項をご覧ください.
HTMLTableFormの文字列の引数はどれもすでにフォーマットが施されており,それ以上のフォーマットはされません.このため,これはMSPShowやMSPFormatのような他のMSP関数の出力を取ることができます.
上記のようにMSP`HTML`パッケージはwebMathematica で使うことができ,通常のMathematica にインストールすることもできます.パッケージは以下のようにロードします.
Needs[ "MSP`HTML`"]
関数HTMLFormatは便利なフォーマッティング関数をHTMLに持ち込みます.これは次に示すように,数値のような小さな式をフォーマットするのに適しています.
HTMLFormat[ x^2]
"x<sup>2</sup>"
HTMLFormat[10.!]
"3.6288 10<sup>6</sup>"
すべてがInputFormになるので,大きな式のフォーマットにはあまり適していません.
Nest[ 1/(1-#)&, x, 5]
11-11-11-11-11-x
HTMLFormat[% ]
"1 - 1 - 1 - 1 - 1 - x<sup>-1</sup><sup>-1</sup><sup>-1</sup><sup>-1</sup><sup>-1</sup>"
大きな式には書式設定関数MSPFormatのバージョンのいずれかを使って画像形式かMathML形式で結果を得るとよいでしょう.
上記のようにMSP`HTML`パッケージはwebMathematica で使うことができ,通常のMathematica にインストールすることもできます.パッケージは以下のようにロードします.
Needs[ "MSP`HTML`"]
関数HTMLSelectはwebMathematica で選択タグを生成する便利な方法を提供します.この関数は異なるオプションのリストと,選択が送る際に使う名前を取ります.操作は次のようになります.
HTMLSelect[ {"a", "b", "c"}, "arg1"]
"<select name='arg1'>\n <option value='1'>a</option>\n <option value='2'>b</option>\n <option value='3'>c</option>\n</select>"
オプションSelectedOptionsを使って選択することもできます.この例では'a'というラベルが付いたオプションが選ばれています.
HTMLSelect[ {"a", "b", "c"}, "arg1", SelectedOptions -> a]
"<select name='arg1'>\n <option value='1' selected='selected'>a</option>\n <option value='2'>b</option>\n <option value='3'>c</option>\n</select>"
デフォルトでオプションタグの値は自動的に選ばれます.引数を使って設定することもできます.
HTMLSelect[ {"a", "b", "c"}, {"x", "y", "z"}, "arg1"]
"<select name='arg1'>\n <option value='x'>a</option>\n <option value='y'>b</option>\n <option value='z'>c</option>\n</select>"
オプションSelectedValuesは値に基づいた選択に使われます.
HTMLSelect[ {"a", "b", "c"}, {"x", "y", "z"}, "arg1", SelectedValues -> y]
"<select name='arg1'>\n <option value='x'>a</option>\n <option value='y' selected='selected'>b</option>\n <option value='z'>c</option>\n</select>"
選択オプションは,値のリストを使って複数の選択値を設定することができます.
HTMLSelect[ {"a", "b", "c"}, {"x", "y", "z"}, "arg1", SelectedValues -> {x, y}]
"<select name='arg1'>\n <option value='x' selected='selected'>a</option>\n <option value='y' selected='selected'>b</option>\n <option value='z'>c</option>\n</select>"
値が与えられていなければ,SelectedValuesオプションは数値を使います.
HTMLSelect[ {"a", "b", "c"}, "arg1", SelectedValues -> {3}]
"<select name='arg1'>\n <option value='1'>a</option>\n <option value='2'>b</option>\n <option value='3' selected='selected'>c</option>\n</select>"
上記の説明のようにMSP`HTML`パッケージはwebMathematica で使うことができ,普通のMathematica にインストールすることもできます.このパッケージは次のようにロードすることができます.
Needs[ "MSP`HTML`"]
関数HTMLCheckBoxは,webMathematica で入力をチェックするタグを生成する便利な機能を提供します.この関数はチェックボックスが引数として送信されるとその名前を使います.操作は次のようになります.
HTMLCheckBox[ boxname]
"<input type='checkbox' name='boxname'/>"
第2引数があった場合は,ボックスをチェックするかどうかを決定するのに使われます.次の例ではチェックボックスがチェックされています.
HTMLCheckBox[boxname, 10>5]
"<input type='checkbox' name='boxname' checked='checked'/>"
HTML書式設定パッケージを使うたくさんwebMathematica の例題が提供されています.このセクションではそれを見てみます.
最初の例は簡単な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が表にされます.この表自体が,ヘッディングが付くように別の表に入れられます.
HTMLSelectの使用法の例題はSelect.jspにあります.これのソースはwebMathematica/Examples/HTMLにあります.前述のようにwebMathematica Webアプリケーションをインストールするとhttp://localhost:8080/webMathematica/Examples/HTML/Select.jspでこのJSPに接続することができます(ご自分のサーバに接続するURLはこれとは多少異なる場合もあります).以下はこのソースです.
<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で取られて選ばれた日の次の日が計算されます.
![]() ![]() |