Mathematical Markup Language
Mathematical Markup Language(マスマティカル マークアップ ランゲージ 略:MathML(マスエムエル))は、XMLアプリケーションの一つで、数式を記述するためのマークアップ言語である。単体では数式の記述しかできないため、文書として利用するにはXHTMLに埋め込んでXHTML文書として扱うなどする。
コンピュータ上で数式を記述する要求はウェブが普及する前からあった。なかでもTeXは有名でかつよく使われており、数式の表記方法としてもテキストのみで表記せざるを得ないときなどに用いられる他、ウィキペディアを含むウィキ等での数式を表現する手段として今日でもよく使われている。しかし、HTML上で数式を表現する手段がなく、ウェブで数式を表現するにはにするか、PDFなどHTML以外の形式にすることが多い。
なお、HTML 3.0では数式を表現できるようにしていた。1995年の案ではMATH要素が入れられることになっていた。これはMathematicaで有名な Wolfram Research の提案をもとにしたものである。しかしHTML3.0は後に破棄され、またほとんどのブラウザはMATH要素に対応しなかった。HTMLに数式を載せること自体は果たせなかったものの、後のW3CのMathワーキンググループの前身といえる HTML Math Editorial Review Board が設立されるなどした。ちなみに、これは現在のMathMLとは違い、TeXの数式表記に似た表記法であった。
1999年7月にMathML規格バージョン1.01がW3CのMathワーキンググループから勧告された。そして2001年2月にバージョン2.0が勧告され、2003年10月にバージョン2.0第2版が勧告された。その後、2010年10月にバージョン3.0が勧告された。
MathMLのオリジナルのバージョンでは名前空間が決められていなかった。というのも、まだXML名前空間の仕様自体が決まっていなかったからである。こうした事情から名前空間を指定されないことが多いが、名前空間を http://www.w3.org/1998/Math/MathML と指定しないとMathMLと認識しない実装も多い。
MathMLは数式の要素のその表示をもってだけでなくその意味もまた処理する(MathMLの後者のものは「内容MathML」として知られる)。その内容が利用者にたいして通じるかどうかは、(方程)式の意味がその表示から離れて保たれるかどうかによる。例えば、それらにおいてMathMLが埋め込まれたウェブページは多くのブラウザーで自然なウェブページとして見ることができる、しかし視覚障害の利用者はそれらをスクリーンリーダー(例えば、Internet Explorer、(あるいは)9656+ビルトのOpera9.5のためのMathPlayerプラグイン、またはFirefoxのためのFire Vox拡張版)の利用を通して同じようにMathMLを読むこともできる。
表現MathMLは(方程)式の(視覚的)表示に向けて用途を絞る、そしておおよそ30
個の構成要素をもつ。構成要素の名前はすべてmから始まる。ひとつの表現MathMLの表示は、それらのレイアウトを制御するものである(主に細部を細かく制御するものである、おおよそ50個の標識がまたある)、上位レベルの構成要素を使って組み合わされたところのトークンから組み立てられる。
内容MathMLは意味論においてまたは意味について、またはそれのレイアウトよりもむしろ表現に向いて用途を絞る。内容MathMLの中心は関数の適用を表示するところのapply構成要素である。適用されるその関数はapplyのもとの最初の子の構成要素であり、そしてそれのオペランドまたはパラメーターは子の構成要素を保持する。内容MathMLはわずかな標識しか用いない。
識別子のようなものや数は、表現MathMLと比べて多量に、しかしciとcnのようなものの構成要素をもって、個別にマークアップされる。トークンの単なる他のタイプの存在よりもむしろ、times、powerなどの、数学的な意味をMathMLが認めるものである、明確な構成要素によってオペレーターは表示される。いろいろな関数とオペレーターのために100個を超えるいろいろな構成要素がある(を見よ)。
よく知られた二次方程式の解の公式を例にする:
x = \frac{-b \pm \sqrt{b^2 - 4ac}{2a}
これをTeXで記述すると以下のようになる:
MathMLで記述すると以下のようになる:
このように人間の可読性を求めるならばTeXのほうが優れている。しかし、XMLアプリケーションであるMathMLは本来コンピュータによる数式の意味認識において有利となるよう設計されたものであり、人間がMathMLを直接書いたり編集したりすることは意図していない。
2015年現在、普及はしているとは言い難いが、MathML出力をサポートしているソフトは増えつつある。
MathMLをサポートするネイティブなエディタにはデザイン・サイエンスからのMathFlowとMathType、ウルフラム・リサーチからのMathMagic、Publicon、そしてWIRISがある。 W3CにMathMLのエディタのリストがある。
Mathematica、MapleおよびCasio ClassPad 300のウィンドウズ版のようなものの数学のソフトウェア製品と同様に、(OpenOffice Mathによる)Apache OpenOffice、(LibreOffice Mathによる)LibreOffice、(以前の KOfficeの)Calligra Suite、そしてMS Office 2007のような主要な製品によってもMathMLはサポートされている。
Mozilla FirefoxのアドオンのFiremathは、WYSIWYGのMathMLエディタを提供する。
たいていのエディタは表現MathMLだけを作り出す。MathDoxの数式エディタは表現だけでなく内容MathMLもまた提供するOpenMathエディタである。MathMLの表現、内容、ならびにそれらの混ざったマークアップを編集するのにFormulator MathML WeaverはWYSIWYGスタイルを使う。
TeXmacsなどのWYSIWYGなエディタでMathML出力をすることができるものや、MathMLをネイティブに読込・保存できるソフトとしてFormulator、Amayaなどがある。
他の数式表現形式からMathMLに変換するソフトもあり、例えばTeXからの変換ソフトとしてConTeXtやMathType、itex2mmlなどがある。またウェブ上で変換をするページもある。
ブラウザでのMathMLネイティブサポート(ブラウザのレンダリングエンジンによるMathMLのレンダリング)は進んでいない。対応しているのは、Gecko を採用している Mozilla Firefox などのブラウザ、Safari 5.1 以降にとどまる。Google ChromeではChrome 24で対応したが、実装上の問題からChrome 25で非対応になり、それ以降実装されていない。Presto を採用している、Opera 9.50〜12.1 においては単体でほとんどの数式の表示が可能となったが、Opera 14 よりレンダリングエンジンが WebKit そして Blink になり非対応となった。
Google Chrome、Microsoft Edge、Internet Explorer は対応していない。ただしJavaScriptライブラリのMathJaxや、Internet Explorer 用のプラグインなどを使うと、Math ML非対応ブラウザでも表示することができる。
ブラウザでのMath MLのレンダリングの品質はインストールされているフォントに依存する。STIXフォント事業はオープンライセンスの数学フォントをリリースしている。Microsoft Windows付属のCambria Mathフォントもサポートしている。
アンテナハウスのAH FormatterはXMLまたはHTML中に埋め込まれたMathMLを可視化して印刷したり、PDFやSVGなどに出力できる。
JAWSは2015年に発売されたVersion 16.0よりMathMLに対応している。
コンピューター・エイデッド・エデュケーション(遠隔教育、電子教科書、そして他の教材);魅力的なレポートの自動作成;数式処理システム;著作、教育、出版ツール(ウェブとデスクトップ・オリエンテッドの両方)、そして数学、科学、ビジネス、経済、その他の多くの他のアプリケーションのような多様なものにおいてMathMLフォーマットのサポートはソフトウェア・アプリケーションの開発を加速する。ソフトウェア開発者らにたいして彼らのアプリケーションにおいて機能的で数学的なレンダリング/編集/処理を組み入れるように簡易な方法の提供を行って、幾つかのソフトウェア・ベンダーらは彼らのMathMLエディタのコンポーネント・エディションを提案する。例えば、Hermitech LaboratoryからのFormulator ActiveX ControlはMathMLのエディタと同じようになるようにアプリケーションへ合併するようできる、Design Scienceはインタラクティブな数式を含むものであるウェブ・ページを組み立てるためのツールキットを提供する(MathFlow DEvelopers Suite)。