| | | | | |  
 
 

深入讲述 MathML,文件名和属性
(2005-6-26) 作者:Jay Allen


 
 

    MathML 即 Mathematical Markup Language(数学标记语言),可用来使用 XML 语法描述数学表达式。MathML 的目标是将数学内容与它的表示分离开来,并对数学表达式进行描述,以便数学软件工具可以评估该表达式并对其执行计算。

    在计算系统上描述数学与计算系统本身的历史一样久远。最初,很自然是使用直线形式描述数学表达式的,如 (a^2 + b^2 = c^2)。但是很快,人们开始发明各种方式来表示这些公式,以便它们可以以一种更加熟悉的格式进行显示或输出。其中一个这样的系统为 TeX,它在学术界非常受欢迎,直到如今仍然如此。另一个这样的系统为 SGML 标准 ISO 12083。尽管这些语言在表示数学表达式方面的功能非常卓越,但还是需要以数学的方式描述表达式,以便可以对其进行分析和评估。某些数学软件程序包(如 Wolfram Research 的 Mathematica)数年来一直在解决这个问题,它开发了一个数学表示系统,以便表达式既可以表达又能够计算。随着 90 年代 Web 和 XML 数量上的激增,提出了使用 XML 标准来描述数学的理念,这样,浏览器既能够显示数学表达式,数据也能与数学软件产品进行交换以用于评估。于是诞生了 MathML。

    现在的标准为 MathML 2.0,它已经达到了 W3C 推荐状态。MathML 包含了用于在浏览器中表示的标记,也包含了一些内容标记可用于明白地描述数学表达式的意思。

    管 Internet Explorer 本身不会显示 MathML 内容,但是存在几个第三方 ActiveX 控件或 DHTML 行为,它们专门用于 MathML 的表示。其中一个这样的程序为 Design Science Inc. 的 MathPlayer。另一个是 IBM 的 techexplorer。在 Web 浏览器中显示 MathML 内容还有一个选择就是在 XHTML 文档中包括 MathML,并指定伴随 W3C 提供的一个 XSLT 样式表,该样式表会将其转换为格式良好的 HTML。

下面是几个示例,说明了公式在 MathML 表示中是如何表达的,之后又说明了在 MathML 内容中是如何表达的。

首先,下面是以直线形式表示的勾股定理:

a^2 + b^2 = c^2
            

在表示 MathML 中,它如下所示:

<math xmlns='http://www.w3.org/1998/Math/MathML'>
    <msup>
        <mi>a</mi>
        <mn>2</mn>
    </msup>
    <mo>+</mo>
    <msup>
        <mi>b</mi>
        <mn>2</mn>
    </msup>
    <mo>=</mo>
    <msup>
        <mi>c</mi>
        <mn>2</mn>
    </msup>
</math>
            

在内容 MathML 中,它如下所示:

<math xmlns='http://www.w3.org/1998/Math/MathML'>
    <apply>
        <eq/>
        <apply>
            <plus/>
            <apply>
                <power/>
                <ci>a</ci>
                <cn type='integer'>2</cn>
            </apply>
            <apply>
                <power/>
                <ci>b</ci>
                <cn type='integer'>2</cn>
            </apply>
        </apply>
        <apply>
            <power/>
            <ci>c</ci>
            <cn type='integer'>2</cn>
        </apply>
    </apply>
</math>
            

接下来,下面是表示万有引力的等式:

F = G*m1*m2 / r^2
            

在表示 MathML 中,它如下所示:

<math xmlns='http://www.w3.org/1998/Math/MathML'>
    <mi>F</mi>
    <mo>=</mo>
    <mfrac>
        <mrow>
            <mi>G</mi>
            <mo>&#8290;</mo>
            <mi>m1</mi>
            <mo>&#8290;</mo>
            <mi>m2</mi>
        </mrow>
        <msup>
            <mi>r</mi>
            <mn>2</mn>
        </msup>
    </mfrac>
</math>
            

在内容 MathML 中,它如下所示:

<math xmlns='http://www.w3.org/1998/Math/MathML'>
    <apply>
        <eq/>
        <ci>F</ci>
        <apply>
            <times/>
            <ci>G</ci>
            <ci>m1</ci>
            <ci>m2</ci>
            <apply>
                <power/>
                <apply>
                    <power/>
                    <ci>r</ci>
                    <cn type='integer'>2</cn>
                </apply>
                <cn type='integer'>-1</cn>
            </apply>
        </apply>
    </apply>
</math>
            

    我们单独列出了表示和内容 MathML,但是它们可以组合到一个 节点中,因此可以将它们从需要表示 MathML 的应用程序或需要内容 MathML 的应用程序中进行复制粘贴。

用于以 XML 描述化学元素和音乐的其他方式也在进行开发,Web 上可以找到相关信息。

提供名称和其他属性

    因为您没有为我们提供要使用的示例,所以我们使用了一个以前用过的示例,但是其中带有一些我们发现的新信息。此示例会在 HTML 中生成一个 Excel 文件。这样可以省去服务器的很多工作,因为这就意味着无需在服务器上实例化和自动化 Excel 了。我们不会对主代码进行过多的解释,只是对一些新内容进行适当的说明。如果您想了解基本情况,请阅读 2000 年 7 月的专栏 Turning the Tables section。但是,有关您问题的答案要查看内容布置行。

    此示例中有以下很棒的新内容:使用 HTML 创建 Excel 文件时如何为其设置文档属性 — 就是那些在文件菜单选项下选择属性时获取的文档属性。当您阅读下面的示例时,请寻找一些这样的内容,如,如何告知 Excel 怎样在电子表格中显示日期,对于该文件使用什么文件名,以及如何指定 office 文档属性。

<%@ language=vbscript %>
<%
  response.buffer = true
  response.ContentType = "application/vnd.ms-excel"
  response.AddHeader "content-disposition", "inline; filename=dynamic.xls"
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML xmlns:o="urn:schemas-microsoft-com:office:office">
<HEAD>
<title>an Excel page</title>
<!--[if gte mso 9]><xml>
 <o:DocumentProperties>
  <o:Subject>An experiment with HTML in Excel</o:Subject>
  <o:Author>auto-generated</o:Author>
  <o:Keywords>HTML</o:Keywords>
  <o:Description>Blah blah blah</o:Description>
  <o:Created><%= now %></o:Created>
  <o:Category>Experiments</o:Category>
  <o:Company>My Company</o:Company>
 </o:DocumentProperties>
</xml><![endif]-->
<style>
  .xl25 { WHITE-SPACE: normal; mso-number-format: "mmm\ d,\ yyyy" }
  .head { BACKGROUND: #ccccff; COLOR: green}
</style>
</HEAD>
<body>
<table width=260>
<tr><td class=head colspan=5 align=center><b>Our Data</b></td></tr>
<tr><td class=xl25>5/10/2002</td>
<%
  for i = 1 to 4
    response.write "<td width=40>"
    response.write i + i
    response.write "</td>"
  next
%>
<tr>
   <td colspan=4><b>total</b></td>
   <td><b>=sum(B2:E2)</b></td>
</tr>
</table>
</body>
</HTML>
<%
  response.flush
  response.end
%>
              

    首先,涉及到属性时,请注意我们在 标记中建立了一个命名空间,以便可以引用该 office xml DTD。另外,还请注意,该文档的标题没有与其他文档属性一起存储。它是从 HTML 文档标题中直接提取的。最后,我们通过使用样式表声明指定了日期格式。请仔细了解一下样式 .xl25。如果您想了解更多有关如何对信息进行格式设置以及还能进行哪些操作的信息,请尝试将 Excel 文件另存为 HTML。Excel 还使用了其他很多标记,要寻找您要的内容可能需要一些时间。如果要动态生成 Excel 文件,而不使用在硬盘上保存 Excel 文件这一中间步骤的话,上述方法是一个很好的选择,因为它是 HTML,而不是一个完整的 Excel 文件,从而使得仍在使用调制解调器的查看者能够更加容易地进行工作

 

 

 


   ©2007 北京海通星辰信息技术有限公司.版权所有.
  建议使用 IE 6.0 以上版本,1024X768分辨率浏览本站!

京ICP备05016544