トップへ
MathMLトップへ
この"MathMLの書き方"は, 筆者(高村吉一)自身が書いたMathMLマニュアル"3.MathMLの書き方"に対し, 加筆, 修正したものです.

MathMLの書き方

MathMLを含むHTML文書を書く場合, 大きく分けてHTML構文で書く方法XML構文で書く方法の2つがあります.

1 HTML構文の場合

HTML構文で書く場合, リスト1のように書きます. Firefoxで表示するには, 拡張子をhtmlとします. なお, Firefoxはバージョン4.0以降である必要があります. ちなみに, この場合, MathMLのバージョンは最新のものとなります. 2024年現在, 最新の勧告はMathML3で, MathMLコアとMathML4が勧告に向けて作業中です.

<!DOCTYPE html> ...(1)
<html lang="ja"> ...(2)
<head>
  <meta charset="UTF-8"> ...(3)
   :
   : 省略
   :
</head>
<body>
  <p>数式
  <math> ...(4)
    <mrow> ...(5)
      <mi>x</mi> ...(6)
      <mo>+</mo> ...(7)
      <mn>1</mn> ...(8)
      <mo>=</mo>
      <mn>2</mn>
    </mrow>
  </math>
  を表示します.</p>
   :
   : 省略
   :
</body>
</html>
リスト1 MathMLを含む文書(HTML構文で書く場合)

このリスト1図1のように表示されます.


図1 MathMLを含む文書の表示例(HTML構文の場合)

はじめに, 文書全体について見ていきます. HTML構文で書く場合, まず(1)のように書き始めます. HTML4以前の文書や従来のXHTMLと違い, PUBLICから先の宣言部分は書かなくてもかまいません. (2)のようにhtmlのタグには, 後で述べるXML構文のようなxmlns="~"といった名前空間宣言は書きません. なお, 従来のHTML4以前から利用されているlang属性を使用します. また, HTMLでは, UTF-8文字コードで書くのが標準であり, (3)のように指定します.

実際に数式を書くところには, (4)のように, mathという元々のHTMLにはないタグを使います. ここでも, 後で述べるXML構文のような名前空間宣言は書きません.

続いて, mathの中身を見ていきます. まず, (5)のmrowですが, これは, 数式の構成要素を横にまとめるタグです. このmrowは, mrowの中に入れ子にすることもできます. 例えば, リスト2のようにも, リスト1mathの中身を表すことができます. また, mathの中に入れるタグは, 必ずしもmrowである必要はありません. 後述するmi, mo, mnなど様々なタグを入れることができます.

  <mrow>
    <mrow>
      <mi>x</mi>
      <mo>+</mo>
      <mn>1</mn>
    </mrow>
    <mo>=</mo>
    <mn>2</mn>
  </mrow>
リスト2 mrowの入れ子の例

最後に, mrowの中身を見ていきます. mrowの中には, mi( (6) ), mo( (7) ), mn( (8) )の3つのタグが含まれています. まず, miは, x,yといった記号や, sin,cosといった関数名を示すのに使われます. 次に, moは, +,-,=といった演算子を表すのに使われます. 演算子には, コンマ","やカッコ()等も含まれます. 最後に, mnは, 数字を表すのに使われます.

また, πやⅇといった特殊な文字を入力する場合, &pi;や&ExponentialE;といった名前付き文字参照(実体参照)を利用すると便利です. HTML構文では, 特別に宣言などを書かなくても名前付き文字参照を利用できます.

2 XML構文で書く場合

XML構文で書く場合, リスト3のように書きます. 従来は, 2.2 従来のXHTMLで書く場合のとおりDTD宣言を含めた妥当な文書として書いていました. 現在は, DTD宣言を含めない整形式の文書として書くことが一般的です. Firefoxで表示するには, 拡張子をxmlまたはxhtmlとします. ちなみに, この場合, MathMLのバージョンは最新のものとなります.

<?xml version="1.0" encoding="UTF-8" ?> ...(1)
<!DOCTYPE html> ...(2)
<html xmlns="http://www.w3.org/1999/xhtml"
  xml:lang="ja"> ...(3)
<head>
  <meta charset="UTF-8"/> ...(4)
   :
   : 省略
   :
</head>
<body>
  <p>数式
  <math xmlns="http://www.w3.org/1998/Math/MathML"> ...(5)
    <mrow>
      <mi>x</mi>
      <mo>+</mo>
      <mn>1</mn>
      <mo>=</mo>
      <mn>2</mn>
    </mrow>
  </math>
  を表示します.</p>
   :
   : 省略
   :
</body>
</html>
リスト3 MathMLを含む文書(XML構文で書く場合)

このリスト3図2のように表示されます.


図2 MathMLを含む文書の表示例(XML構文で書く場合)

XML構文で書く場合, まず(1)のようなXML宣言で書き始めます. 次に, (2)のように, HTML文書であることを宣言します. 文書は, (3)のように, 従来のHTML文書と同じ書き出しで始めます. ただし, xmlns="http://www.w3.org/1999/xhtml"という名前空間の宣言を必ず書く必要があり, 従来のHTML文書で使われていたlang属性の代わりにxml:lang属性を使う必要があります. なお, XHTML1.0で使われるlang属性とxml:lang属性を併記する書き方はできません. また, リスト1はUTF-8文字コードを書いた場合で, metaタグを書く際は(4)のように書きます.

実際に数式を書くところには, (5)のようにmathというタグを使います. XML構文では, mathに1つ1つxmlns="http://www.w3.org/1998/Math/MathML"という名前空間の宣言を付ける必要があります.

2.1 名前付き文字参照の利用方法

πやⅇといった特殊な文字を入力する場合, &pi;や&ExponentialE;といった名前付き文字参照(実体参照)を利用すると便利です. ただし, 整形式の文書ではDTD宣言を書いていないので, そのままでは利用できません. 利用する場合, リスト4のように書きます.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html [
  <!ENTITY % htmlmathml-f PUBLIC
    "-//W3C//ENTITIES HTML MathML Set//EN//XML"
    "http://www.w3.org/2003/entities/2007/htmlmathml-f.ent">
  %htmlmathml-f; ...(6)
]>
<html xmlns="http://www.w3.org/1999/xhtml"
  xml:lang="ja">
<head>
  <meta charset="UTF-8"/>
   :
   : 省略
   :
</head>
<body>
  <p>数式
  <math xmlns="http://www.w3.org/1998/Math/MathML">
    <msub>
      <mi>log</mi>
      <mi>&ExponentialE;</mi> ...(7)
    </msub>
    <mo>&ApplyFunction;</mo>
    <mi>x</mi>
  </math>
  を表示します.</p>
   :
   : 省略
   :
</body>
</html>
リスト4 MathMLを含む文書(XML構文で書く場合:名前付き文字参照の利用方法)

このリスト4図3のように表示されます.


図3 MathMLを含む文書の表示例(XML構文で書く場合:名前付き文字参照の利用方法)

名前付き文字参照を利用する場合, (6)のように名前付き文字参照の宣言を含む外部のファイルを読み込む必要があります. こうすることで, (7)のように名前付き文字参照を利用できます. なお, この方法はFirefoxでは正しく読み込まれますが, 他のブラウザでは読み込まれない場合があります.

MathML3は, 名前付き文字参照だけではなく数値文字参照の利用方法も挙げています. 数値文字参照を利用する場合, リスト5のように書きます.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html> ...(8)
<html xmlns="http://www.w3.org/1999/xhtml"
  xml:lang="ja">
<head>
  <meta charset="UTF-8"/>
   :
   : 省略
   :
</head>
<body>
  <p>数式
  <math xmlns="http://www.w3.org/1998/Math/MathML">
    <msub>
      <mi>log</mi>
      <mi>&#x2147;</mi> ...(9)
    </msub>
    <mo>&#x2061;</mo>
    <mi>x</mi>
  </math>
  を表示します.</p>
   :
   : 省略
   :
</body>
</html>
リスト5 MathMLを含む文書(XML構文で書く場合:数値文字参照の利用方法)

数値文字参照を利用する場合, (8)のように特別なファイルの読み込みは不要で, (9)のように数値文字参照を直接書くことができます.

2.2 従来のXHTMLで書く場合

従来は, XHTMLで書く場合にリスト5のようにDTD宣言を含めた妥当な文書として書いていました. Firefoxで表示するには, 拡張子をxmlまたはxhtmlとします. ちなみに, この場合MathMLのバージョンはMathML2となります.

<?xml version="1.0" encoding="Shift_JIS" ?>
<!DOCTYPE html PUBLIC
  "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN"
  "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd">
    ...(10)
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
  <meta http-equiv="Content-Type"
    content="text/html;charset=Shift_JIS"/> ...(11)
   :
   : 省略
   :
</head>
<body>
  <p>数式
  <math xmlns="http://www.w3.org/1998/Math/MathML">
    <mrow>
      <mi>x</mi>
      <mo>+</mo>
      <mn>1</mn>
      <mo>=</mo>
      <mn>2</mn>
    </mrow>
  </math>
  を表示します.</p>
   :
   : 省略
   :
</body>
</html>
リスト6 MathMLを含む文書(従来のXHTMLで書く場合)

このリスト6図4のように表示されます.


図4 MathMLを含む文書の表示例(従来のXHTMLで書く場合)

従来は, XHTMLで書く場合, (10)のように, MathMLを含んだXHTMLのDTDを使うことを宣言するのが一般的でした. また, リスト6は日本語環境でShift_JIS文字コードを書いた場合で, (11)のように文字コードを指定していました.

また, 従来のXHTMLの書き方はDTD宣言を書いているので, この中に名前付き文字参照の宣言が含まれています. そのため, 名前付き文字参照を利用できます.

3 参考文献