MathMLを使う
はじめに
MathMLはXMLベースのマークアップ言語で,数式を表記するためのものである.これはW3Cによって開発されたもので,これにより,Webページ上で数式を効果的に表示できるようになり,アプリケーション間での数学的内容の転送・再利用も容易になった.最大の利点は,数学的表記における意味と外観の両方の情報がコード化できるということである.そのため,MathMLは数学的情報を保管し,交換するための理想的なデータ形式となる.例えば,MathML式はWebページからコピーし,評価のために直接Wolfram言語のようなアプリケーションにペーストできる.
MathMLは数学的表記の一般的で広く受け入れられている標準として,多くの面白く便利なアプリケーションの基礎となる.MathMLを使うと,例えばインタラクティブな式を掲載したダイナミックな数式Webサイトを作成したり,内容の検索・索引の作成・アーカイブが簡単にできる技術文書のデータベースを作ったり,数式の音声出力ができる音声合成ソフトウェアを開発したりできる.
MathMLは1998年に初めてリリースされて以来,産業界・学術界の両方の幅広い支援を受け,急速に人気が高まった.現在では最新のWebブラウザで直接,または無料のプラグインを使用してMathML式を見ることができる.MathMLの著作,閲覧,処理のためのツールが増えるに従い,その重要性は増していくばかりであると考えられる.
Wolfram ResearchはMathMLの開発における主要メンバーであり,この重要なWeb技術のサポートに力を注いでいる.Wolfram言語はこの言語の最新バージョンであるMathML 2.0を完全にサポートしている.MathML式をWolfram言語ノートブックにインポートして評価したり,式をノートブックからMathMLにエキスポートして,HTMLにペーストしたりすることができる.MathMLとボックスの間の変換のためのいくつかのカーネルコマンドや,Wolfram言語が数式を表すために使う式もある.
MathMLのシンタックス
概要
MathMLはXMLアプリケーションであるので,MathMLのシンタックス規則はXML規格で定められている.各MathML式はHTMLと同様に,アングルブラケットのシンタックスで書かれた一連の要素で構成されている.各要素は複数の属性を持つことができる.使用できる要素と属性はMathML DTDで定められている.
すべてのMathML要素は,インターフェース要素,表示要素,内容要素の3つのカテゴリに分類できる.
最上位のmath要素等のインターフェース要素は,MathML式をどのようにXMLドキュメントに組み込むかを指定するものである.
表示要素は,数式の視覚的二次元構造についての情報をコード化する.例えばmrow,mfrac,msqrt,msub要素はそれぞれ行,分数,平方根,下付き文字を表している.
内容要素は数式の論理的意味の情報をコード化する.例えばplusとsin はそれぞれ加算関数と三角法の正弦関数を表しており,applyは関数を適用する操作を表している.
与えられた式は,MathMLではいくつかの異なる方法で表すことができる.
- 内容MathML—内容要素のみ.これは数学的意味をコード化することが重要である状況で便利.例えば,読者がコピーしてWolfram言語にペーストして評価できるようにWebページに数式を掲載するときに使用できる.
表示MathML
表示MathMLは約30の要素と50の属性で構成されており,数式の視覚的二次元構造をコード化する.例えばWolfram言語のタイプセット式は,MathMLでは次のように表現される.
式全体はmath要素で囲まれている.これはMathMLマークアップのすべてのインスタンスに対するルート要素でなければならない.この他に以下のような表示要素を使っている.
識別子,演算子,数値は,それぞれがフォント,空白等について異なるタイプセット変換を行うので,それぞれ別の要素で表される.例えば,変数は通常斜体で,数値は標準フォントで,演算子は接頭辞,接尾辞,挿入辞のどこに現れるかによってその周りに空白を伴って表示される.
mi,mn,mo要素に加え,分数,平方根,下付き文字,上付き文字,行列等の一般的な表記構造に対応する表示要素もある.どのような式も構成部分に分解し,各表記構成を対応する表示要素に置き換えることで表現できる.例えば,タイプセット式は,MathMLでは以下のように表される.
ここでmfrac,msqrt,msupはそれぞれ分数,平方根,上付き文字を表している.これらの各要素は固定数の子要素を取る.子要素の位置は特定の意味を表す.これらの子要素は引数と呼ばれる.例えば,mfracとmsup要素は,以下のシンタックスに従って両方とも2つの引数を取る.
<mfrac> numerator denominator </mfrac>
<msup> base superscript </msup>
mrow要素はその行に現れる他の要素を囲むために使われる.例えば,タイプセット式 はMathMLでは次のように表される.
ここで,積分の範囲は表示要素msubsupを使って表されている.この要素は以下のシンタックスに従って3つの引数を取る.
<msubsup> base subscript superscript </msubsup>
この他に注意すべきことは,積分記号,指数文字,微分記号dを表すシンボルは,それぞれ文字実体∫,&exp;,ⅆを使って表されているということである.これらはMathML DTDで定められている約2000個の特殊シンボルの一部である.これらはUnicode文字コードを使う名前付き実体参照や文字実体参照を使ってドキュメントに含むことができる.
mstyle要素はスタイルを式に適用するために使われている.mstyle要素で指定された属性はすべて,その子要素にも適用される.この要素を使用して,以下の例のように式のフォントサイズや色等の属性を指定することができる.乗算には実体⁢が使われる.
例題は,要素の例を使って,表示マークアップがどのように動作するかを示すことだけを意図したものである.すべての表示要素と属性のリストは, http://www.w3.org/TR/MathML2/でMathML仕様書を参照のこと.
内容MathML
内容MathMLは約140の要素と12の属性で構成されており,数式の論理的意味をコード化する.内容要素ci,cnはそれぞれ識別子と数値を表すのに使われる.これらは表示マークアップにおけるmi,mn要素に似ている.例えばタイプセット式 は,内容MathMLでは次のように表現される.
apply要素は,式に演算子や関数を適用するために使われる.apply要素の第1引数は,通常は演算子や関数を表す空要素である.残りの引数は第1引数を適用する1つまたは複数の式である.この例では,apply関数の第1引数は加算を表す空要素plusである.
cnのtype属性はコード化された数のタイプを表す.これはreal,integer,rational,complex-polar,complex-cartesian,constantのいずれかの値を取る.次の例のように,空要素sepは分数の分子と分母や,複素数の実部と虚部等,数値の異なる部分を区別するために使われる.
内容要素の多くは,特定の演算子や関数を表す空要素である.さまざまな要素が数学に関する特定の基本的な分野に従って名付けられたグループに分けられる.
高校の数学に現れるほとんどの演算子や関数に対応する要素がある.例えば基本的な算数演算子はplus,minus,times,divide,powerで表される.
積分はint要素で表される.積分の変数はbvar要素を使って表される.積分の上限・下限はそれぞれ要素uplimitおよびlowlimitを使って表される.
interval要素は開区間,閉区間を表すのに使われる.これは属性closureを取る.closureは可能な4つのタイプの区間を表すclosed,open,closed-open,open-closedのいずれかを取ることができる.closureのデフォルトの値はclosedである.
uplimitとlowlimitを使う代りに,interval要素を使って定積分の区間を指定することもできる.
matrixおよびmatrixrow要素は,それぞれ行列と行列の行を表すのに使われる.eq要素は等価を表す.
例題は,代表的な要素の例を使って,内容マークアップがどのように動作するかを示すことだけを意図したものである.すべての内容要素と属性のリストは,http://www.w3.org/TR/MathML2/でMathML仕様書を参照のこと.
MathMLのインポート
MathML式は以下の2通りの方法でWolfram言語にインポートできる.
- MathML式をWebブラウザ等の他のアプリケーションでコピーし,直接ノートブックにペーストする.正しいMathML式をノートブックにペーストすると,Wolfram言語はマークアップをそのままペーストするか,あるいは解釈してペーストするかを尋ねる.マークアップを解釈するように選択すると式は自動的にWolfram言語式に変換される.
MathMLインポートオプション
標準のImportオプションを使うと,インポート処理がより詳細に制御できる.変換オプションを指定するシンタックスは以下の通りである.
Import[file,expr,"MathML",option1->value1,option2->value2,…]
MathMLの生成
Wolfram言語には,Wolfram言語で数式を表すために内部的に使われているボックスや式からMathMLを生成するための,いくつかの関数が含まれている.ノートブックにパレット,メニュー,キーボードショートカットを使って数式を入力し,これらの変換関数の1つを使ってMathMLに変換することができる.すべてのMathML変換関数はXML`MathML` コンテキストに置かれている.
annotation-xml要素は,コード化属性で指定されるタイプについての追加情報を有している.ここでは,コード化属性は"MathML-Content"という値を持っており,これはannotation-xml要素が内容MathMLを含んでいることを示している.
ExportStringは,第1引数をMathMLに変換する前にまず評価する.評価の際に簡約できる式を与えると,期待とは異なる結果が返ってくることがある.
オプションの設定
ExportとExportStringはオプション"Annotations","Presentation","Content","NamespacePrefixes"を取る.
これらのオプションを使うと,生成されるMathMLにXML宣言やDTD宣言を含んだり,表示マークアップ,内容マークアップ,またはその両方を生成したり,明示的な名前空間宣言と名前空間接頭辞を含んだり等,さまざまな機能を制御することができる.
MathML関数を評価するたびにこれらのオプションを指定することができる.またはSetOptionsを使って,特定の関数のオプションのデフォルト値を変更することもできる.デフォルト値を変更すると,その関数のその後の評価の際にはこのオプション値が使われる.
MathMLのエキスポート
はじめに
適切にフォーマットされた数式を作り,MathMLに変換してWebで表示するには,Wolfram言語の高度なタイプセット機能を使う.Wolfram言語ノートブックの数式をMathMLにエキスポートするには,いくつかの方法がある.
- 「編集」 ▶ 「形式を選択してコピー」 ▶ 「MathML」により,選択された式がMathML形式でクリップボードにコピーされる.これはノートブックから特定の数式をコピーしてHTMLドキュメントにペーストするときに便利である.
- 「ファイル」 ▶ 「別名で保存」の「ファイルの種類」サブメニューから「XML – XHTML+MathML (*.xml)」を選ぶ.これはノートブック全体をXHTMLに変換し,その際,ノートブックに含まれる数式をすべてMathMLとして保存する.数式はMathMLの「データアイランド」としてXHTMLファイルに埋め込まれる.これは直接,または特別なプラグインを使用してWebブラウザに表示できる.
- エキスポート形式を "MathML"として,またはファイルの拡張子として.mmlを付けてExportString関数を使う.
出力にはsemantics要素で囲まれた表示マークアップと内容マークアップの両方を含まれる."Presentation"と"Content"の値を変更すると,表示マークアップ,内容マークアップのどちらかだけで生成することもできる.囲まれている要素の名前空間に関する情報を与えるために,xmlns属性が最上位のmath要素に加えられる.
MathMLエキスポートオプション
Export関数またはExportString関数の標準オプションを使うと,エキスポート処理がより詳細に制御できる.変換オプションを指定するシンタックスは以下の通りである.
Export[file,expr,"MathML",option1->value1,option2->value2,…]
ExportString[expr,"MathML",option1->value1,option2->value2,…].
オプションは出力としてMathMLを生成するどの関数の中でも直接指定することができる.
XML`MathML`ExpressionToMathML[expr,"MathML",option1->value1,option1->value1,…].
MathMLとしてのエキスポートには,一般のXMLドキュメントのエキスポートに使用できるExportオプションのいずれでも使うことができる.
"Annotations"
このオプションはどの注釈をMathML出力に含めるかを制御するものである.値は要素が"DocumentHeader","XMLDeclaration","DOCTYPEDeclaration"のいずれかの値を取るリストである.リスト中の要素はどのような順序でも構わない.
XMLDeclaration
注釈のひとつに"XMLDeclaration"が含まれている場合,XML宣言<?xml version="1.0"?>がヘッダに含まれる.
DOCTYPEDeclaration
注釈のひとつに"DOCTYPEDeclaration"が含まれている場合,<!DOCTYPE ...>という形式のXMLドキュメントタイプ宣言がヘッダに含まれる.この文は,出力が書き出されるXMLアプリケーションのDTDを指定する.
DocumentHeader
"Annotations"->{"DocumentHeader", "XMLDeclaration", "DOCTYPEDeclaration"}と設定すると,XML宣言とMathML DTDのドキュメントタイプ宣言を含むヘッダが自動的に出力に加えられる.
"Annotations"が"DocumentHeader"を含まない場合は,MathMLはヘッダを持たない.これは"Annotations"が"XMLDeclaration"や"DOCTYPEDeclaration"等の他の要素を含んでいる場合でも成り立つ.
"Presentation" と"Content"
これらのオプションはどのタイプのMathMLマークアップを生成するかを制御する.デフォルトの設定は"Presentation"->Trueと"Content"->Falseである.
"IncludeMarkupAnnotations"
このオプションは,MathMLに明らかには対応するものがないWolfram言語特有の構造を取る式のエキスポートの際に,付加的な注釈を加えるかどうかを指定するものである.
オプション
|
値
|
動作
|
"IncludeMarkupAnnotations" | True | Mathematica 特有の情報が別の注釈要素に加えられる (デフォルト) |
False | 付加的な注釈要素は加えられない |
"IncludeMarkupAnnotations"->Trueでは,Wolfram言語注釈はsemantics要素に囲まれる.これにより,損失なくWolfram言語に戻すことができる.
"MathAttributes"
このオプションを使うと,MathML式のルート要素に属性を加えることができる.このオプションのシンタックスは"MathAttributes"->{attribute1->value1,attribute2->value2,…}という形である.
"UseUnicodePlane1Characters"
このオプションは,文字がUnicodeの1面に属する文字を0面の同様の文字に置き換えるかどうかを指定するものである.現時点では多くのブラウザで1面の文字を適切に表示することができないため,このオプションが役立つであろう.
オプション | 値 | 動作 |
"UseUnicodePlane1Characters" | True | Unicodeの1面に属する特殊文字を置換せずにエキスポートする (デフォルト) |
False | Unicodeの1面に属する特殊文字のエキスポートの際に,0面の文字に置き換え,mathvariant属性を加える |
"UseUnicodePlane1Characters"の値
MathML要素のシンボル
MathML中の内容要素には,Wolfram言語内に直接的な類似形がないものもあるため,XML`MathML`コンテキストではいくつかのシンボルが特別に定義されている.