Mathematical Markup Language

（マスマティカル マークアップ ランゲージ 略：MathML（マスエムエル））は、XMLアプリケーションの一つで、数式を記述するためのマークアップ言語である。単体では数式の記述しかできないため、文書として利用するにはXHTMLに埋め込んでXHTML文書として扱うなどする。

 歴史 
コンピュータ上で数式を記述する要求はウェブが普及する前からあった。なかでもは有名でかつよく使われており、数式の表記方法としてもテキストのみで表記せざるを得ないときなどに用いられる他、ウィキペディアを含むウィキ等での数式を表現する手段として今日でもよく使われている。しかし、HTML上で数式を表現する手段がなく、ウェブで数式を表現するには画像にするか、PDFなどHTML以外の形式にすることが多い。

なお、HTML 3.0では数式を表現できるようにしていた。1995年の案ではMATH要素が入れられることになっていた。これはMathematicaで有名な Wolfram Research の提案をもとにしたものである。しかしHTML3.0は後に破棄され、またほとんどのブラウザはMATH要素に対応しなかった。HTMLに数式を載せること自体は果たせなかったものの、後のW3CのMathワーキンググループの前身といえる HTML Math Editorial Review Board が設立されるなどした。ちなみに、これは現在のMathMLとは違い、の数式表記に似た表記法であった。

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のための拡張版）の利用を通して同じようにMathMLを読むこともできる。

 表現MathML 
表現MathMLは（方程）式の（視覚的）表示に向けて用途を絞る、そしておおよそ30
個の構成要素をもつ。構成要素の名前はすべてmから始まる。ひとつの表現MathMLの表示は、それらのレイアウトを制御するものである（主に細部を細かく制御するものである、おおよそ50個の標識がまたある）、上位レベルの構成要素を使って組み合わされたところのトークンから組み立てられる。

 内容MathML 
内容MathMLは意味論においてまたは意味について、またはそれのレイアウトよりもむしろ表現に向いて用途を絞る。内容MathMLの中心は関数の適用を表示するところの構成要素である。適用されるその関数はのもとの最初の子の構成要素であり、そしてそれのオペランドまたはパラメーターは子の構成要素を保持する。内容MathMLはわずかな標識しか用いない。
識別子のようなものや数は、表現MathMLと比べて多量に、しかしciとcnのようなものの構成要素をもって、個別にマークアップされる。トークンの単なる他のタイプの存在よりもむしろ、times、powerなどの、数学的な意味をMathMLが認めるものである、明確な構成要素によってオペレーターは表示される。いろいろな関数とオペレーターのために100個を超えるいろいろな構成要素がある（を見よ）。

 例 
よく知られた二次方程式の解の公式を例にする:

これをで記述すると以下のようになる:
 x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}

MathMLで記述すると以下のようになる:
<math>
 <mrow>
 <mi>x</mi>
 <mo>=</mo>
 <mfrac>
 <mrow>
 <mrow>
 <mo>-</mo>
 <mi>b</mi>
 </mrow>
 <mo>±</mo>
 <msqrt>
 <mrow>
 <msup>
 <mi>b</mi>
 <mn>2</mn>
 </msup>
 <mo>-</mo>
 <mrow>
 <mn>4</mn>
 <mo>⁢</mo>
 <mi>a</mi>
 <mo>⁢</mo>
 <mi>c</mi>
 </mrow>
 </mrow>
 </msqrt>
 </mrow>
 <mrow>
 <mn>2</mn>
 <mo>⁢</mo>
 <mi>a</mi>
 </mrow>
 </mfrac>
 </mrow>
</math>

このように人間の可読性を求めるならばのほうが優れている。しかし、XMLアプリケーションであるMathMLは本来コンピュータによる数式の意味認識において有利となるよう設計されたものであり、人間がMathMLを直接書いたり編集したりすることは意図していない。

 ソフトウェアでの対応状況 
2015年現在、普及はしているとは言い難いが、MathML出力をサポートしているソフトは増えつつある。

 エディタ 
MathMLをサポートするネイティブなエディタにはからのMathFlowとMathType、ウルフラム・リサーチからの、、そしてWIRISがある。 W3CにMathMLのエディタのリストがある。
Mathematica、Mapleおよびのウィンドウズ版のようなものの数学のソフトウェア製品と同様に、（OpenOffice Mathによる）Apache OpenOffice、（LibreOffice Mathによる）LibreOffice、（以前の KOfficeの）Calligra Suite、そしてMS Office 2007のような主要な製品によってもMathMLはサポートされている。
 Mozilla Firefoxのアドオンのは、WYSIWYGのMathMLエディタを提供する。
たいていのエディタは表現MathMLだけを作り出す。MathDoxの数式エディタは表現だけでなく内容MathMLもまた提供するOpenMathエディタである。MathMLの表現、内容、ならびにそれらの混ざったマークアップを編集するのにFormulator MathML WeaverはWYSIWYGスタイルを使う。

TeXmacsなどのWYSIWYGなエディタでMathML出力をすることができるものや、MathMLをネイティブに読込・保存できるソフトとしてFormulator、Amayaなどがある。

他の数式表現形式からMathMLに変換するソフトもあり、例えばからの変換ソフトとしてやMathType、itex2mmlなどがある。またウェブ上で変換をするページもある。

 ブラウザ 
ブラウザでのMathMLネイティブサポート（ブラウザのレンダリングエンジンによるMathMLのレンダリング）は進んでいない。対応しているのは、Gecko を採用している Mozilla Firefox などのブラウザ、Safari 5.1 以降にとどまる。Google ChromeではChrome 24で対応したが、実装上の問題からChrome 25で非対応になり、Chrome 109から再び対応した。Microsoft Edgeでも同様に対応した。Presto を採用している、Opera 9.50〜12.1 においては単体でほとんどの数式の表示が可能となったが、Opera 14 よりレンダリングエンジンが WebKit そして Blink になり非対応となった。

Internet Explorer は対応していない。ただしJavaScriptライブラリのMathJaxや、Internet Explorer 用のプラグインMathPlayerなどを使うと、MathML非対応ブラウザでも表示することができる。

ブラウザでのMathMLのレンダリングの品質はインストールされているフォントに依存する。STIXフォント事業はオープンライセンスの数学フォントをリリースしている。Microsoft Windows付属のCambria Mathフォントもサポートしている。