本笔记随幽灵多啦学习过程不断修正和更新中...
XML兴起后,HTML派生出了XHTML。虽然这只多了一个字母X,却赋予了原来的HTML以无限的生命力。这生命力就来源于其无限的扩展能力(extensible)。旧有的HTML只有有限的标签,而XHTML的标签却可以无限扩展,这要归功于XML的命名空间(namespaces)的发明。在XHTML中,至少要加载XHTML命名空间,这样我们就可以使用几乎所有原来的HTML标签(当然有些已经被废弃或者不赞成使用(deprecated))。在此基础上,我们还可以加载其他命名空间,获得扩展的功能,例如MathML可以使网页能嵌入数学公式,这是一项非常实用的技术。MathML的官方文档可以从W3C的MathML主页找到。
- XHTML嵌入MathML的方法
下面的例子说明XHTML 1.0和MathML推荐标准联合使用的方法:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>A Math Example</title>
</head>
<body>
<p>The following is MathML markup:</p>
<math xmlns="http://www.w3.org/1998/Math/MathML">
<apply> <log/>
<logbase>
<cn> 3 </cn>
</logbase>
<ci> x </ci>
</apply>
</math>
</body>
</html>不过,上面这段代码是不符合原来的XHTML的DTD实体定义的,因为多出了math等实体(或者说标签)没有在XHTML的DTD文档中定义。W3C还正在努力解决该问题。目前一种解决办法是使用“XHTML plus Math 1.1 DTD”作DTD定义,这是一种联合使用XHTML 1.1和MathML 2.0的DTD定义。使用的时候文件头的定义为:
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN'
'http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd'
[<!ENTITY mathml 'http://www.w3.org/1998/Math/MathML'>]>这样就解决了DTD定义问题。
- 在浏览器上显示MathML
上面这种做法在把文件扩展名命名为xml(或者在服务器上输出xml的文件头)之后,已经测试能够被Firefox 1.5正确解析,也能通过W3C标记语言验证器验证(当然文档的其它部分要符合XHTML 1.1规范),但不能被IE 6(没有安装插件)正确解析。扩展名命名为html时,则Firefox和IE均无能为力。但是扩展名为xml时,无法执行javascript。
如果要IE能够正确显示MathML公式,可以加装免费的MathPlayer插件。不过有另一种不需要加装插件的方法,就是使用XSLT样式表把MathML解析成普通的HTML(需要IE 6版本)。具体的实现方法在:http://www.w3.org/Math/XSL/。
Firefox/Mozilla虽然有内建的MathML支持,但有时候会因缺字体而不能完全正确显示MathML公式,这可以通过下载这些字体解决。这些字体的列表在:http://www.mozilla.org/projects/mathml/fonts/。为方便Windows用户,MIT提供了这些字体的打包下载及使用指导。
- 两种MathML表达式
MathML有两种表达方式,一为表现式(Presentation MathML),一为内容式(Content MathML)。暂时发现表现式好像不太好用,例如没有找到好使的绝对值符号(如果使用“|”,绝对值符号无法自动伸缩,当嵌套分式较多时绝对值符号就会变得太短)。暂时倾向于以使用内容式为主,表现式为辅。不过还需多学习才能真正比较出两者的优劣。
- 学习资源
- W3C的MathML官方主页:http://www.w3.org/Math/
- 一个MathML入门教程:http://www.dessci.com/en/support/mathtype/tutorials/mathml/default.htm
- 一个MathML入门幻灯片:http://www.w3.org/Math/Documents/mathml-tutorial.pdf
- MathML 2 语言参考:http://www.zvon.org/xxl/MathML/Output/
- 工具
- MathCast:开源的所见即所得公式编辑器,能输出MathML格式;官方主页:http://mathcast.sourceforge.net/
- 检测浏览器能否正确显示xsl模式的MathML公式:
表现性MathML:http://www.w3.org/Math/XSL/pmathml2.xml
内容性MathML:http://www.w3.org/Math/XSL/csmall2.xml


