本页使用了标题或全文手工转换

数学置标语言

维基百科,自由的百科全书
跳转至: 导航搜索
数学标记语言(MathML)
開發者 万维网联盟(W3C)
格式 标记语言
延伸自 XML
标准 W3C MathML

数学标记语言Mathematical Markup LanguageMathML),是一种基于XML的标准,用来在互联网上书写数学符号和公式的标记语言。它是由W3C的数学工作组提出的。语言规格1.01版于1999年7月公布,2.0版于2001年2月出现。W3C的数学工作组在2003年10月发布了MathML 2.0的第二版, 之后又在2010年10月发布了MathML 3.0.

由于数学符号和公式的结构复杂且符号与符号之间存在多种逻辑关系,MathML的格式十分繁琐。因此,大多数人都不会去手写MathML,而是利用其它的工具来编写,其中包括TeX到MathML的转换器。

軟件支援[编辑]

在现在几个主要的网页浏览器中,Safari(包括iOS版)、Mozilla浏览器火狐浏览器网景导航者浏览器已经提供原生支持,不需安裝其他插件即可浏览MathML內容。[1]

微软IE浏览器在安装了MathPlayer插件后也可以识别MathML。

Chrome 24支援MathML,其後因穩定性問題移除了相關功能。[1]

此外,MathML还得到了一些办公软件的支持,如OpenOffice.orgMicrosoft Office

结构和语法[编辑]

MathML十分类似HTML,但非常繁琐。它继承了角括号和双标签(<标签>内容</标签>)的用法。

MathML不但规定数学式子的表现,而且也规定数学数字的含义(前者叫做“Presentation MathML”,后者叫做“Content MathML”)。由于数学式子的意义与表现是分离开的,如何交流内容留给了用户。例如,内嵌MathML的网页可以让许多浏览器按照正常的网页一样浏览。但是视觉受损者也可以用相同的MathML,通过屏幕阅读器(例如IE浏览器MathPlayer插件Opera浏览器9.50构建号9656+、火狐浏览器Fire Vox附加组件)有声朗读出来。

Presentation MathML[编辑]

Presentation MathML 侧重于如何显示一个数学式子,大约有30个元素。元素名字全部以m开头。构建 Presentation MathML 表达式的记号是有一些更高层的元素组合而成的,这些元素控制它们的界面(大约有50个属性,基本很好地控制了细节)。

记号元素只包含文字(没有其他元素),它们有:

  • <mi>x</mi> —— 标识符
  • <mo>+</mo> —— 操作符
  • <mn>2</mn> —— 数字
  • <mtext>non zero</mtext> —— 文本

注意到尽管这些记号元素能用于表示扩展要点,允许用宿主语言来标记。HTML5的MathML几乎允许在mtext中内联HTML标记,并且

  • <mtext><b>non</b> zero</mtext>

是合格的。,可以把HTML标记放在MathML中来标记内嵌文本(在例子中使得第一个单词加粗)。

这些是布局元素,它们都只能包含元素。它们有:

  • <mrow> —— 水平的一行
  • <msup><munderover> 等等 —— 上标,规定上下操作符,就像求和号等等一样
  • <mfrac> —— 分数
  • <msqrt><mroot> —— 方根
  • <mfenced> —— 用栅隔离开内容,例如括号

与HTML和XML一样,有许多实体来指定特殊符号,例如&pi;&RightArrow;。有趣的是,通常不可见操作符也依然存在实体,例如 &InvisibleTimes; 用于表示乘法运算中被省略的乘号。这些不可见操作符是:

  • U+2061 函数应用
  • U+2062 不可见乘号
  • U+2063 不可见分隔符
  • U+2064 不可见加号

MathML的完整实体说明在 [1],并且和HTML与XML的协调在 [2]

所以,表达式ax2 + bx + c需要两个元素:一个是创建总体的水平行,另一个创建上标的指数。只有元素和(没有标记的)裸记号的布局的结构如下:

    <mrow>
      a &InvisibleTimes; <msup>x 2</msup>
      + b &InvisibleTimes; x
      + c
    </mrow>

然而,单个记号也必须用标识符(mi)、操作符(mo)或数字(mn)表示。添加到记号标记,完整的形式如下:

    <mrow>
      <mi>a</mi> <mo>&InvisibleTimes;</mo> <msup><mi>x</mi><mn>2</mn></msup>
      <mo>+</mo><mi>b</mi><mo>&InvisibleTimes;</mo><mi>x</mi>
      <mo>+</mo><mi>c</mi>
    </mrow>

有效的MathML文档需要包含XML声明、DOCTYPE声明和文档元素。 文档体包含位于<math>元素内的MathML表达式。通常,MathML会被内嵌于多种通用文档中,例如HTMLDocBook,获知其它的XML模式。一个包含如上MathML的完整的文档显示如下:

 <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE math PUBLIC "-//W3C//DTD MathML 2.0//EN"
           "http://www.w3.org/Math/DTD/mathml2/mathml2.dtd">
  <math xmlns="http://www.w3.org/1998/Math/MathML">
    <mrow>
      <mi>a</mi>
      <mo>&InvisibleTimes;</mo>
      <msup>
        <mi>x</mi>
        <mn>2</mn>
      </msup>
      <mo>+</mo>
      <mi>b</mi>
      <mo>&InvisibleTimes; </mo>
      <mi>x</mi>
      <mo>+</mo>
      <mi>c</mi>
    </mrow>
  </math>

Content MathML[编辑]

Content MathML 侧重于表达式的语义,而不是布局。中间的 Content MathML 是用<apply>元素来表示功能的具体应用。被应用的功能的长子元素放在<apply>下,并且它的操作数或参数是剩下来的子元素, Content MathML 只有少许属性。

标识符和数字之类的记号被单独标记,就像 Presentation MathML 一样,但是元素类似 cicn。不同于仅仅是另一个类型的记号,操作符表示具体的元素。它们的数学语义可以从MathML中的制鞋符号中看出来:timespower等等。为不同的功能和操作符超过100个不同的元素(见[3])。

例如,<apply><sin/><ci>x</ci></apply>代表sin x,而<apply><plus/><ci>x</ci><cn>5</cn></apply>代表x+5。表示操作符和功能的元素是空元素,因为它们的操作数是其它在下面包含有<apply>的元素。

表达式ax2 + bx + c可以被表示为:

<math>
    <apply>
        <plus/>
        <apply>
            <times/>
            <ci>a</ci>
            <apply>
                <power/>
                <ci>x</ci>
                <cn>2</cn>
            </apply>
        </apply>
        <apply>
            <times/>
            <ci>b</ci>
            <ci>x</ci>
        </apply>
        <ci>c</ci>
    </apply>
</math>

Content MathML 近乎是同构于一个功能语言(例如Scheme)中的表达式。<apply>...</apply>的数量就是Scheme的(...),而且许多操作符和功能元素的就是Scheme的函数。有了这些精细的文本转换,外加去标签的单独记号,上面的例子就成为:

  (plus
    (times a (power x 2))
    (times b x)
    c)

这放映出XML元素结构和LISP或Scheme的S-表达式的长期的亲密关系。[2][3]

与其它格式的对比[编辑]

例如,书写以下的公式:

x = b ± b² − 4ac/2a

若用LaTeX,则只需要一行代码:

x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}

若用eqn,则也只需一行代码

x={-b +- sqrt{b sup 2 – 4ac}} over 2a

若用OpenOffice Math,则也只需要一行代码(以下三种均可):

x={-b plusminus sqrt {b^2 – 4 ac}} over {2 a}
x={-b ± sqrt {b^2 – 4ac}} over 2a
x={-b +- sqrt {b^2 – 4ac}} over 2a

若用ASCIIMathML,则也只需要一行代码

x = (-b +- sqrt(b^2 – 4ac)) / (2a)

但用MathML,则需要:

<math mode="display" xmlns="http://www.w3.org/1998/Math/MathML">
  <mrow>
    <mi>x</mi>
    <mo>=</mo>
    <mfrac>
      <mrow>
        <mo form="prefix">&#x2212;<!-- − --></mo>
        <mi>b</mi>
        <mo>&#x00B1;<!-- &PlusMinus; --></mo>
        <msqrt>
          <msup>
            <mi>b</mi>
            <mn>2</mn>
          </msup>
          <mo>&#x2212;<!-- − --></mo>
          <mn>4</mn>
          <mo>&#x2062;<!-- &InvisibleTimes; --></mo>
          <mi>a</mi>
          <mo>&#x2062;<!-- &InvisibleTimes; --></mo>
          <mi>c</mi>
        </msqrt>
      </mrow>
      <mrow>
        <mn>2</mn>
        <mo>&#x2062;<!-- &InvisibleTimes; --></mo>
        <mi>a</mi>
      </mrow>
    </mfrac>
  </mrow>
  <annotation encoding="TeX">
     x=\frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
  </annotation>
  <annotation encoding="StarMath 5.0">
     x={-b plusminus sqrt {b^2 - 4 ac}} over {2 a}
  </annotation>
</math>

虽然如此,由于MathML是严格遵守XML规范的语言,很多已经运用XML的软件可以轻易的读懂MathML。这也是这种语言的制作者W3C组织宁可选择复杂的句法也要和标准一致的一个重要原因。

在XHTML文件中内嵌MathML[编辑]

MathML是一种XML,可以通过使用XML命名空间来嵌入XML文件中,例如XHTML文件。现代浏览器例如火狐浏览器版本3以上版本和Opera浏览器9.6以上版本(不完全支持)可以展示XHTML内嵌的MathML。

例如 math-test.xhtml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN" "http://www.w3.org/Math/DTD/mathml2/xhtml-math11-f.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
	<head>
		<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
		<title>Example of MathML embedded in an XHTML file</title>
		<meta name="description" content="Example of MathML embedded in an XHTML file" />
		<meta name="keywords" content="Example of MathML embedded in an XHTML file" />
	</head>
	<body>
		<h1>Example of MathML embedded in an XHTML file</h1>
		<p>
			Given the quadratic equation
			<math xmlns="http://www.w3.org/1998/Math/MathML">
				<mrow>
					<mi>a</mi>
					<mo>&#x2062;<!-- &InvisibleTimes; --></mo>
					<msup>
						<mi>x</mi>
						<mn>2</mn>
					</msup>
					<mo>+</mo>
					<mi>b</mi>
					<mo>&#x2062;<!-- &InvisibleTimes; --></mo>
					<mi>x</mi>
					<mo>+</mo>
					<mi>c</mi>
					<mo>=</mo>
					<mi>0</mi>
				</mrow>
			</math>
			, the roots are given by
			<math xmlns="http://www.w3.org/1998/Math/MathML">
				<mrow>
					<mi>x</mi>
				<mo>=</mo>
					<mfrac>
						<mrow>
							<mo form="prefix">&#x2212;<!-- − --></mo>
							<mi>b</mi>
							<mo>&#x00B1;<!-- &PlusMinus; --></mo>
							<msqrt>
								<msup>
									<mi>b</mi>
									<mn>2</mn>
								</msup>
								<mo>&#x2212;<!-- − --></mo>
								<mn>4</mn>
								<mo>&#x2062;<!-- &InvisibleTimes; --></mo>
								<mi>a</mi>
								<mo>&#x2062;<!-- &InvisibleTimes; --></mo>
								<mi>c</mi>
							</msqrt>
						</mrow>
						<mrow>
							<mn>2</mn>
							<mo>&#x2062;<!-- &InvisibleTimes; --></mo>
							<mi>a</mi>
						</mrow>
					</mfrac>
				</mrow>
			</math>
			.
		</p>
	</body>
</html>
使用带有STIX Beta字体的火狐浏览器3.5版显示MathML的图片例子 (math-test.xhtml)
使用带有 STIX Beta字体的 火狐浏览器3.5版显示MathML的图片例子 (math-test.xhtml)

在HTML5文件中内嵌MathML[编辑]

内联MathML同样也被HTML5文件支持。支持的浏览器有当前版本的WebKitSafariChrome 24)、GeckoFirefox),和PrestoOpera)。

例如: math-test.htm

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Example of MathML embedded in an HTML5 file</title>
	</head>
 
	<body>
		<h1>Example of 
			<abbr title="Mathematical Markup Language">MathML</abbr>
			embedded in an 
			<abbr title="HyperText Markup Language">HTML</abbr>
			5 file
		</h1>
		<p>
			Given the quadratic equation
			<math>
				<mrow>
					<mi>a</mi>
					<mo>&InvisibleTimes;</mo>
					<msup>
						<mi>x</mi>
						<mn>2</mn>
					</msup>
					<mo>+</mo>
					<mi>b</mi>
					<mo>&InvisibleTimes;</mo>
					<mi>x</mi>
					<mo>+</mo>
					<mi>c</mi>
					<mo>=</mo>
					<mi>0</mi>
				</mrow>
			</math>
			, the roots are given by
			<math>
				<mrow>
					<mi>x</mi>
					<mo>=</mo>
					<mfrac>
						<mrow>
							<mo form="prefix"></mo>
							<mi>b</mi>
							<mo>&PlusMinus;</mo>
							<msqrt>
								<msup>
									<mi>b</mi>
									<mn>2</mn>
								</msup>
								<mo></mo>
								<mn>4</mn>
								<mo>&InvisibleTimes;</mo>
								<mi>a</mi>
								<mo>&InvisibleTimes;</mo>
								<mi>c</mi>
							</msqrt>
						</mrow>
						<mrow>
							<mn>2</mn>
							<mo>&InvisibleTimes;</mo>
							<mi>a</mi>
						</mrow>
					</mfrac>
				</mrow>
			</math>
			.
		</p>
	</body>
</html>

参考文献[编辑]

  1. ^ 1.0 1.1 Can I use MathML. Can I use MathML. [2014-11-25]. 
  2. ^ Steven DeRose. The SGML FAQ Book: Understanding the Relationship of SGML and XML, Kluwer Academic Publishers, 1997. ISBN 978-0-7923-9943-8.
  3. ^ Canonical S-expressions#cite note-0

外部链接[编辑]

参见[编辑]