Wolfram Research製品ご購入サービスとリソース会社概要その他のWolframサイト
XMLパッケージ >

MathMLを使う

はじめに

MathMLはXMLベースのマークアップ言語で,数式を表記するためのものです.これはW3Cによって開発されたもので,これにより,Webページ上で数式を効果的に表示できるようになり,アプリケーション間での数学的内容の転送・再利用も容易になりました.最大の利点は,数学的表記における意味と外観の両方の情報がコード化できるということです.そのため,MathMLは数学的情報を保管し,交換するための理想的なデータ形式となります.例えば,MathML式はWebページからコピーし,評価のために直接Mathematicaのようなアプリケーションにペーストできます.
MathMLは数学的表記の一般的で広く受け入れられている標準として,多くの面白く便利なアプリケーションの基礎となります.MathMLを使うと,例えばインタラクティブな式を掲載したダイナミックな数式Webサイトを作成したり,内容の検索・索引の作成・アーカイブが簡単にできる技術文書のデータベースを作ったり,数式の音声出力ができる音声合成ソフトウェアを開発したりできます.
MathMLは1998年に初めてリリースされて以来,産業界・学術界の両方の幅広い支援を受け,急速に人気が高まりました.現在では最新のWebブラウザで直接,または無料のプラグインを使用してMathML式を見ることができます.MathMLの著作,閲覧,処理のためのツールが増えるに従い,その重要性は増していくばかりであると考えられます.
Wolfram ResearchはMathMLの開発における主要メンバーであり,この重要なWeb技術のサポートに力を注いでいます. Mathematica 6.0はこの言語の最新バージョンであるMathML 2.0を完全にサポートしています.MathML式をMathematica ノートブックにインポートして評価したり,式をノートブックからMathMLにエキスポートして,HTMLにペーストしたりすることができます.MathMLとボックスの間の変換のためのいくつかのカーネルコマンドや,Mathematica が数式を表すために使う式もあります.

MathMLのシンタックス

概要

MathMLはXMLアプリケーションなので,MathMLのシンタックス規則はXML規格で定められています.各MathML式はHTMLと同様に,アングルブラケットのシンタックスで書かれた一連の要素で構成されています.各要素は複数の属性を持つことができます.使用できる要素と属性はMathML DTDで定められています.
すべてのMathML要素は,インターフェース要素,表示要素,内容要素の3つのカテゴリに分類できます.
最上位のmath要素等のインターフェース要素は,MathML式をどのようにXMLドキュメントに組み込むかを指定するものです.
表示要素は,数式の視覚的二次元構造についての情報をコード化します.例えばmrowmfracmsqrtmsub要素はそれぞれ行,分数,平方根,下付き文字を表しています.
内容要素は数式の論理的意味の情報をコード化します.例えばplussin はそれぞれ加算関数と三角法の正弦関数を表しており,applyは関数を適用する操作を表しています.
与えられた式は,MathMLではいくつかの異なる方法で表すことができます.
  • 表示MathML—表示要素のみ.数式を表示することのみが重要である状況,例えば閲覧のみを目的としたWebページに数式を掲載する場合等に便利です.
  • 内容MathML—内容要素のみ.これは数学的意味をコード化することが重要である状況で便利です.例えば,読者がコピーしてMathematica にペーストして評価できるようにWebページに数式を掲載するときに使用できます.
  • 複合マークアップ—内容および表示要素の組合せ.数式の外観と意味をコード化したい場合に使われます.例えば,一般的な数式構成の非標準的な記述を指定したり,通常は異なる意味を持つ記述にある特定の数学的意味を割り当てたりするときに使うことができます.
Mathematica を使うと,どのような式に対しても表示,内容,複合マークアップが生成できます.

表示MathML

表示MathMLは約30の要素と50の属性で構成されており,数式の視覚的二次元構造をコード化します.例えばMathematica のタイプセット式x+1は,MathMLでは次のように表現されます.
式全体はmath要素で囲まれています.これはMathMLマークアップのすべてのインスタンスに対するルート要素でなければなりません.この他に以下のような表示要素を使っています.
  • mrow—その行にあるサブ要素を表示します.
  • mi—関数名や変数名等の識別子を表します.
  • mo—演算子や区切り記号を表します.
  • mn—数値を表します.
識別子,演算子,数値は,それぞれがフォント,空白等について異なるタイプセット変換を行うので,それぞれ別の要素で表されます.例えば,変数は通常斜体で,数値は標準フォントで,演算子は接頭辞,接尾辞,挿入辞のどこに現れるかによってその周りに空白を伴って表示されます.
mimnmo要素に加え,分数,平方根,下付き文字,上付き文字,行列等の一般的な表記構造に対応する表示要素もあります.どのような式も構成部分に分解し,各表記構成を対応する表示要素に置き換えることで表現できます.例えば,タイプセット式は,MathMLでは以下のように表されます.
ここでmfracmsqrtmsupはそれぞれ分数,平方根,上付き文字を表しています.これらの各要素は固定数の子要素を取ります.子要素の位置は特定の意味を表します.これらの子要素は引数と呼ばれます.例えば,mfracmsup要素は,以下のシンタックスに従って両方とも2つの引数を取ります.

<mfrac> numerator denominator </mfrac>

<msup> base superscript </msup>

mrow要素はその行に現れる他の要素を囲むために使われます.例えば,タイプセット式-x x はMathMLでは次のように表されます.
ここで,積分の範囲は表示要素msubsupを使って表されています.この要素は以下のシンタックスに従って3つの引数を取ります.

<msubsup> base subscript superscript </msubsup>

この他に注意すべきことは,積分記号,指数文字,微分記号dを表すシンボルは,それぞれ文字実体&int;&exp;&dd;を使って表されているということです.これらはMathML DTDで定められている約2000個の特殊シンボルの一部です.これらはUnicode文字コードを使う名前付き実体参照や文字実体参照を使ってドキュメントに含むことができます.
mstyle要素はスタイルを式に適用するために使われています.mstyle要素で指定された属性はすべて,その子要素にも適用されます.この要素を使用して,以下の例のように式のフォントサイズや色等の属性を指定することができます.乗算には実体&InvisibleTimes;が使われます.
例題は,要素の例を使って,表示マークアップがどのように動作するかを示すことだけを意図したものです.すべての表示要素と属性のリストは, http://www.w3.org/TR/MathML2/でMathML仕様書をご覧ください.

内容MathML

内容MathMLは約140の要素と12の属性で構成されており,数式の論理的意味をコード化します.内容要素cicnはそれぞれ識別子と数値を表すのに使われます.これらは表示マークアップにおけるmimn要素に似ています.例えばタイプセット式x+1 は,内容MathMLでは次のように表現されます.
apply要素は,式に演算子や関数を適用するために使われます.apply要素の第1引数は,通常は演算子や関数を表す空要素です.残りの引数は第1引数を適用する1つまたは複数の式です.この例では,apply関数の第1引数は加算を表す空要素plusです.
cntype属性はコード化された数のタイプを表します.これはrealintegerrationalcomplex-polarcomplex-cartesianconstantのいずれかの値を取ります.次の例のように,空要素sepは分数の分子と分母や,複素数の実部と虚部等,数値の異なる部分を区別するために使われます.
内容要素の多くは,特定の演算子や関数を表す空要素です.さまざまな要素が数学に関する特定の基本的な分野に従って名付けられたグループに分けられます.
  • 算数,代数,論理式
  • 初等関数
  • 微積分
  • 線形代数
  • 数列と級数
  • 集合論
  • 統計学
高校の数学に現れるほとんどの演算子や関数に対応する要素があります.例えば基本的な算数演算子はplusminustimesdividepowerで表されます.
積分はint要素で表されます.積分の変数はbvar要素を使って表されます.積分の上限・下限はそれぞれ要素uplimitおよびlowlimitを使って表されます.
interval要素は開区間,閉区間を表すのに使われます.これは属性closureを取ります.closureは可能な4つのタイプの区間を表すclosedopenclosed-openopen-closedのいずれかを取ることができます.closureのデフォルトの値はclosedです.
uplimitlowlimitを使う代りに,interval要素を使って定積分の区間を指定することもできます.
matrixおよびmatrixrow要素は,それぞれ行列と行列の行を表すのに使われます.eq要素は等価を表します.
例題は,代表的な要素の例を使って,内容マークアップがどのように動作するかを示すことだけを意図したものです.すべての内容要素と属性のリストは,http://www.w3.org/TR/MathML2/でMathML仕様書をご覧ください.

MathMLのインポート

MathML式は以下の2通りの方法でMathematica にインポートできます.
  • MathML式をWebブラウザ等の他のアプリケーションでコピーし,直接ノートブックにペーストします.正しいMathML式をノートブックにペーストすると,Mathematica はマークアップをそのままペーストするか,あるいは解釈してペーストするかを尋ねてきます.マークアップを解釈するように選択すると式は自動的にMathematica 式に変換されます.
デフォルトでは,MathMLマークアップはMathematica のボックス式としてインポートされます.ToExpressionコマンドを使うと,ボックスを式に変換できます.
In[2]:=
Click for copyable input
Out[2]=

MathMLインポートオプション

標準のImportオプションを使うと,インポート処理がより詳細に制御できます.変換オプションを指定するシンタックスは以下の通りです.

Import[file, expr, "MathML", option1->value1, option2->value2, ...]

MathMLの生成

Mathematica 6.0には,Mathematica で数式を表すために内部的に使われているボックスや式からMathMLを生成するための,いくつかの関数が含まれています.ノートブックにパレット,メニュー,キーボードショートカットを使って数式を入力し,これらの変換関数の1つを使ってMathMLに変換することができます.すべてのMathML変換関数はXML`MathML` コンテキストに置かれています.
ボックス構造からMathMLを生成するためには,ExportStringを使います.デフォルトでは,これは表示マークアップのみ生成します.
In[3]:=
Click for copyable input
Out[1]=
ノートブックのタイプセット式をMathMLに変換するためにはExportStringを使います.デフォルトではこれは表示マークアップと内容マークアップの双方がsemantics要素の中に置かれる,複合マークアップを生成します.
In[2]:=
Click for copyable input
Out[2]=
annotation-xml要素は,コード化属性で指定されるタイプについての追加情報を有しています.ここでは,コード化属性は"MathML-Content"という値を持っており,これはannotation-xml要素が内容MathMLを含んでいることを示しています.
表示MathMLまたは内容MathMLだけを生成するためには"Presentation"または"Semantics"を使います.ヘッダ情報を出力しないようにするには,"Annotations"->{}と設定します.
In[35]:=
Click for copyable input
Out[35]=
ExportStringは,第1引数をMathMLに変換する前にまず評価します.評価の際に簡約できる式を与えると,期待とは異なる結果が返ってくることがあります.
以下の定積分の表示マークアップを生成します.
In[4]:=
Click for copyable input
Out[4]=
積分の結果は1となるため,以下のコマンドは積分ではなく1のMathML表現を生成します.
In[36]:=
Click for copyable input
Out[36]=
積分のMathML表現を得るためには,積分の周りをUnevaluated関数で囲んで,積分が評価されないようにします.
In[55]:=
Click for copyable input
Out[55]=

オプションの設定

以下は出力としてMathMLを生成する関数です.
これらの関数はすべて以下のオプションを取ります.
  • "Annotations"
  • "Presentation"
  • "Semantics"
  • "NamespacePrefixes"
これらのオプションを使うと,生成されるMathMLにXML宣言やDTD宣言を含んだり,表示マークアップ,内容マークアップ,またはその両方を生成したり,明示的な名前空間宣言と名前空間接頭辞を含んだり等,さまざまな機能を制御することができます.
MathML関数を評価するたびにこれらのオプションを指定することができます.またはSetOptionsを使って,特定の関数のオプションのデフォルト値を変更することもできます.デフォルト値を変更すると,その関数のその後の評価の際にはこのオプション値が使われます.

MathMLのエキスポート

はじめに

適切にフォーマットされた数式を作り,MathMLに変換してWebで表示するには,Mathematica の高度なタイプセット機能を使います.Mathematica ノートブックの数式をMathMLにエキスポートするには,いくつかの方法があります.
  • 編集形式を選択してコピーMathMLにより,選択された式がMathML形式でクリップボードにコピーされます.これはノートブックから特定の数式をコピーしてHTMLドキュメントにペーストするときに便利です.
  • ファイル別名で保存ファイルの種類サブメニューからXML - XHTML+MathML (*.xml)を選びます.これはノートブック全体をXHTMLに変換し,その際,ノートブックに含まれる数式をすべてMathMLとして保存します.数式はMathMLの「データアイランド」としてXHTMLファイルに埋め込まれます.これは直接,または特別なプラグインを使用してWebブラウザに表示できます.
出力にはsemantics要素で囲まれた表示マークアップと内容マークアップの両方を含まれます."Presentation""Semantics"の値を変更すると,表示マークアップ,内容マークアップのどちらかだけで生成することもできます.囲まれている要素の名前空間に関する情報を与えるために,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オプションのいずれでも使うことができます.
  • "AttributeQuoting"
  • "Annotations"
  • "CheckXML"
  • "ElementFormatting"
  • "Entities"
  • "NamespacePrefixes"
  • "PrefixCreation"
これらに加え,特にMathMLのエキスポートに使用するためのオプションがあります.
  • "Presentation"—表示MathMLをエキスポートするかどうかを制御します.
  • "Semantics"—内容MathMをエキスポートするかどうかを制御します.
  • "IncludeMarkupAnnotations"—注釈として式のMathematica エンコードを含むかどうかを指定します.
  • "MathAttributes"—MathML式のルートタグに追加の属性を挿入します.
  • "UseUnicodePlane1Characters"—各MathML要素に名前空間接頭辞を含むかどうかを指定します.

"Annotations"

このオプションはどの注釈をMathML出力に含めるかを制御するものです.こ値は要素が"DocumentHeader""XMLDeclaration""DOCTYPEDeclaration"のいずれかの値を取るリストです.リスト中の要素はどのような順序でも構いません.

XMLDeclaration

注釈のひとつに"XMLDeclaration"が含まれている場合,XML宣言<?xml version="1.0"?>がヘッダに含まれます.
In[39]:=
Click for copyable input
Out[39]=
In[40]:=
Click for copyable input
Out[40]=

DOCTYPEDeclaration

注釈のひとつに"DOCTYPEDeclaration"が含まれている場合,<!DOCTYPE ...>という形式のXMLドキュメントタイプ宣言がヘッダに含まれます.この文は,出力が書き出されるXMLアプリケーションのDTDを指定します.
In[41]:=
Click for copyable input
Out[41]=

DocumentHeader

"Annotations"->{"DocumentHeader", "XMLDeclaration", "DOCTYPEDeclaration"}と設定すると,XML宣言とMathML DTDのドキュメントタイプ宣言を含むヘッダが自動的に出力に加えられます.
In[42]:=
Click for copyable input
Out[42]=
"Annotations""DocumentHeader"を含まない場合は,MathMLはヘッダを持ちません.これは"Annotations""XMLDeclaration""DOCTYPEDeclaration"等の他の要素を含んでいる場合でも成り立ちます.
In[43]:=
Click for copyable input
Out[43]=

"Presentation" と"Semantics"

これらのオプションはどのタイプのMathMLマークアップを生成するかを制御します.デフォルトの設定は"Presentation"->True"Semantics"->Falseです.
表示MathMLのみエキスポートします.
In[30]:=
Click for copyable input
Out[30]=
内容MathMLのみエキスポートします.
In[31]:=
Click for copyable input
Out[31]=

"IncludeMarkupAnnotations"

このオプションは,MathMLに明らかには対応するものがないMathematica 特有の構造を取る式のエキスポートの際に,付加的な注釈を加えるかどうかを指定するものです.
オプション
動作
"IncludeMarkupAnnotations"TrueMathematica 特有の情報が別の注釈要素に加えられる (デフォルト)
False付加的な注釈要素は加えられない

"IncludeMarkupAnnotations"の値

"IncludeMarkupAnnotations"->Trueでは,Mathematica 注釈はsemantics要素に囲まれます.これにより,損失なくMathematica に戻すことができます.
Mathematica の特殊文字「->」は,Unicodeには対応する文字がありません(Unicodeの右矢印は似ているように見えますが,コードポイントが異なります).「」をエキスポートするとき,付加的な注釈がマークアップに加えられます.
In[45]:=
Click for copyable input
Out[45]=
"IncludeMarkupAnnotations"->Falseという設定では,付加的な注釈は加えられません.
In[33]:=
Click for copyable input
Out[33]=

"MathAttributes"

このオプションを使うと,MathML式のルート要素に属性を加えることができます.このオプションのシンタックスは"MathAttributes"->{attribute1->value1, attribute2->value2, ...}という形です.
MathMLをエキスポートし,インライン形式で表示するように指定します.
In[49]:=
Click for copyable input
Out[49]=
MathML式を表示形式でエキスポートします.
In[50]:=
Click for copyable input
Out[50]=

"UseUnicodePlane1Characters"

このオプションは,文字がUnicodeの1面に属する文字を0面の同様の文字に置き換えるかどうかを指定するものです.現時点では多くのブラウザで1面の文字を適切に表示することができないため,このオプションが役立つでしょう.
オプション
動作
"UseUnicodePlane1Characters"TrueUnicodeの1面に属する特殊文字を置換せずにエキスポートする (デフォルト)
FalseUnicodeの1面に属する特殊文字のエキスポートの際に,0面の文字に置き換え,mathvariant属性を加える

"UseUnicodePlane1Characters"の値

"UseUnicodePlane1Characters"Trueに設定すると,Unicodeの1面に属する特殊文字(ゴシック文字,スクリプト文字,2重文字等)は1
In[51]:=
Click for copyable input
Out[51]=
"UseUnicodePlane1Characters"Falseに設定すると,Unicodeの1面に属する特殊文字はすべて,それに対応する0面の文字で置き換えられ,mathvariant属性に適切な値が指定されます.
In[52]:=
Click for copyable input
Out[52]=

MathML要素のシンボル

MathML中の内容要素には,Mathematica 内に直接的な類似形がないものもあるため,XML`MathML`コンテキストではいくつかのシンボルが特別に定義されています.
シンボルと,そのそれぞれが表すMathMLマークアップ.
これらのシンボルを使ったいくつかの例.これらはすべて従来のタイプセット形式を持ちます.
In[26]:=
Click for copyable input
Out[26]=
In[27]:=
Click for copyable input
Out[27]=
In[28]:=
Click for copyable input
Out[28]=
In[29]:=
Click for copyable input
Out[29]=