数学置标语言
数学标记语言(Mathematical Markup Language,MathML),是一种基于XML的标准,用来描述数学符号和公式。它的目标是把数学公式集成到万维网和其他文档中。从2015年开始,MathML成为了HTML5的一部分和ISO标准。 由于数学符号和公式的结构复杂且符号与符号之间存在多种逻辑关系,MathML的格式十分繁琐。因此,大多数人都不会去手写MathML,而是利用其它的工具来编写,其中包括TeX到MathML的转换器。 历史它是由W3C的数学工作组提出的。语言规格1.01版于1999年7月公布,2.0版于2001年2月出现。W3C的数学工作组在2003年10月发布了MathML 2.0的第二版, 之后又在2010年10月发布了MathML 3.0. 结构和语法MathML十分类似HTML,但非常繁琐。它继承了角括号和双标签(<标签>内容</标签>)的用法。 MathML不但规定数学式子的表现,而且也规定数学数字的含义(前者叫做“Presentation MathML”,后者叫做“Content MathML”)。由于数学式子的意义与表现是分离开的,如何交流内容留给了用户。例如,内嵌MathML的网页可以让许多浏览器按照正常的网页一样浏览。但是视觉受损者也可以用相同的MathML,通过屏幕阅读器(例如IE浏览器的MathPlayer插件、Opera浏览器9.50构建号9656+、火狐浏览器的Fire Vox附加组件)有声朗读出来。 Presentation MathMLPresentation MathML 侧重于如何显示一个数学式子,大约有30个元素。元素名字全部以 记号元素只包含文字(没有其他元素),它们有:
注意到尽管这些记号元素能用于表示扩展要点,允许用宿主语言来标记。HTML5的MathML几乎允许在mtext中内联HTML标记,可以把HTML标记放在MathML中来标记内嵌文本(在例子中使得第一个单词加粗)。并且
是合格的。 这些是布局元素,它们都只能包含元素。它们有:
与HTML和XML一样,有许多实体来指定特殊符号,例如
MathML的完整实体说明在标准的第七章,并且和HTML与XML的协调在 [1] (页面存档备份,存于互联网档案馆)。 所以,表达式需要两个元素:一个是创建总体的水平行,另一个创建上标的指数。只有元素和(没有标记的)裸记号的布局的结构如下: <mrow>
a ⁢ <msup>x 2</msup>
+ b ⁢ x
+ c
</mrow>
然而,单个记号也必须用标识符(mi)、操作符(mo)或数字(mn)表示。添加到记号标记,完整的形式如下: <mrow>
<mi>a</mi> <mo>⁢</mo> <msup><mi>x</mi><mn>2</mn></msup>
<mo>+</mo><mi>b</mi><mo>⁢</mo><mi>x</mi>
<mo>+</mo><mi>c</mi>
</mrow>
有效的MathML文档需要包含XML声明、DOCTYPE声明和文档元素。 文档体包含位于<math>元素内的MathML表达式。通常,MathML会被内嵌于多种通用文档中,例如HTML、DocBook,获知其它的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>⁢</mo>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
<mo>+</mo>
<mi>b</mi>
<mo>⁢ </mo>
<mi>x</mi>
<mo>+</mo>
<mi>c</mi>
</mrow>
</math>
Content MathMLContent MathML 侧重于表达式的语义,而不是布局。中间的 Content MathML 是用 标识符和数字之类的记号被单独标记,就像 Presentation MathML 一样,但是元素类似 例如, 表达式可以被表示为: <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)中的表达式。 (plus
(times a (power x 2))
(times b x)
c)
这放映出XML元素结构和LISP或Scheme的S-表达式的长期的亲密关系。[2][3] 与其它格式的对比例如,书写以下的二次方程求根公式: 若用LaTeX,则只需要一行代码: x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
若用eqn,则也只需一行代码 x={-b +- sqrt{b sup 2 – 4ac}} over 2a 若用Apache OpenOffice Math和LibreOffice 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">−<!-- − --></mo>
<mi>b</mi>
<mo>±<!-- ± --></mo>
<msqrt>
<msup>
<mi>b</mi>
<mn>2</mn>
</msup>
<mo>−<!-- − --></mo>
<mn>4</mn>
<mo>⁢<!-- ⁢ --></mo>
<mi>a</mi>
<mo>⁢<!-- ⁢ --></mo>
<mi>c</mi>
</msqrt>
</mrow>
<mrow>
<mn>2</mn>
<mo>⁢<!-- ⁢ --></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或HTML5文件中内嵌MathMLMathML是一种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>⁢<!-- ⁢ --></mo>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
<mo>+</mo>
<mi>b</mi>
<mo>⁢<!-- ⁢ --></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">−<!-- − --></mo>
<mi>b</mi>
<mo>±<!-- ± --></mo>
<msqrt>
<msup>
<mi>b</mi>
<mn>2</mn>
</msup>
<mo>−<!-- − --></mo>
<mn>4</mn>
<mo>⁢<!-- ⁢ --></mo>
<mi>a</mi>
<mo>⁢<!-- ⁢ --></mo>
<mi>c</mi>
</msqrt>
</mrow>
<mrow>
<mn>2</mn>
<mo>⁢<!-- ⁢ --></mo>
<mi>a</mi>
</mrow>
</mfrac>
</mrow>
</math>
.
</p>
</body>
</html>
![]() 而内联MathML同样被HTML5文件支持。支持的浏览器有当前版本的WebKit(Safari)和Gecko(Firefox)。 例如: 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>⁢</mo>
<msup>
<mi>x</mi>
<mn>2</mn>
</msup>
<mo>+</mo>
<mi>b</mi>
<mo>⁢</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>±</mo>
<msqrt>
<msup>
<mi>b</mi>
<mn>2</mn>
</msup>
<mo>−</mo>
<mn>4</mn>
<mo>⁢</mo>
<mi>a</mi>
<mo>⁢</mo>
<mi>c</mi>
</msqrt>
</mrow>
<mrow>
<mn>2</mn>
<mo>⁢</mo>
<mi>a</mi>
</mrow>
</mfrac>
</mrow>
</math>
.
</p>
</body>
</html>
软件支持浏览器在现在几个主要的网页浏览器中,基于Gecko的浏览器(如Firefox)有最完备的原生支持。[5][6] 而WebKit排版引擎有针对MathML的开发版,[7]这一特性只出现在Safari 5.1及更高版本、[8]Chrome 24,[9][10]但是不在后来的Chrome版本里面。[11]Google移除了MathML支持,宣称架构上的安全问题和低使用量不会证明他们的维护时间有理。[12]截至2013年10月年[update],WebKit/Safari的实现存在多个bug。[13] Opera 9.5—12支持MathML CSS配置,[14][15]但不能使附加符号正确放置。[16]9.5之前需要用户脚本或样式以模拟MathML支持。[17]从Opera 14开始,Opera通过迁移到Chromium 25引擎移除了MathML支持。[18] Internet Explorer原生不支持MathML。IE6到IE9在安装了MathPlayer插件后也可以识别MathML。[19]IE10使用MathPlayer时存在一些崩溃bug,并且微软决定在IE11完全禁止MathPlayer所需的二进制插件界面。[20]MathPlayer有协议条款会限制在商用页面或软件上面的使用或发行。使用或发行MathPlayer插件以通过商用软件中的WebBrowser控件显示HTML内容也有可能受到禁止。 基于KHTML的Konqueror不提供对MathML的支持。[21] 编辑器MathML还得到了主要办公软件的支持,如Apache OpenOffice、LibreOffice、Microsoft Office,以及数学软件的支持,如Mathematica、Maple。 Firemath是火狐浏览器的附加组件,提供WYSIWYG的MathML编辑器。 手写识别Windows 7自带工具名叫Math Input Panel。可以把手写输入转换为MathML。 参考文献
外部链接
参见
|
Portal di Ensiklopedia Dunia