网络的飞速发展使得人们能够在不同时间、空间交流。然而目前交流还只限于文本方式或简单的、事先编辑好的图片。当讨论数学问题时,人们常常苦于无法用简单的数学符号直接表达准确的意思,这大大限制了远程教学的发展。同时使网络交流停留在近乎原始的方式上,可以说仅仅只是用文字代替了语音。本文介绍利用svg和java开发包处理这一问题的解决方案。通过此种方案,在不同网络终端的用户可以用近似于mathlab中的数学语言描述自己想要得到的数学符号,由服务器动态生成数学符号图像,并向其它终端发送。
现有的几种方案
目前网上解决数学符号显示的方案有以下几种:
◆ mathml这是w3c根据xml标准制定出的在网络上显示数学符号的语言,但它非常复杂,并且目前ie暂时不支持需要的插件。同时,由于它需要在客户端解释显示,速度也是一个问题。
◆ applet 在以前的教学软件中就有使用applet解决数学符号显示的例子,但是速度问题和微软对applet的抵制使得它已逐渐失去生命力。
◆ svg 虽然ie目前也暂不支持,但它的插件相对而言很容易得到。只要安装了acrobat reader,插件就自动装上了。
相关技术
xml
扩展标记语言(xml,extensible markup language)是一种可扩展的元置标语言。xml是由sgml(standard general markup language)发展而来的语言,其目标是为了适应web应用环境,将网络上传输的文档规范化。它用文档的结构标记定义手段来表达文档内容的语义元素及其关联,从而提供了网上数据交换的语义格式标准,以及各类业务文档置标语言标准的实现方法。
xslt
xslt(extensible stylesheet language transformation)是一种将xml文档转换成其它类型文档的语言。
jaxp
jaxp(java api for xml processing)是sun公司推出的一种最新的xml工具包。支持最新的dom和sax api。
svg
svg(scalabel vector graphics)是一种以xml格式描述二维图形的规范。这些xml文档以.svg扩展名结尾,并且可由svg浏览器读取这些文件,然后显示。目前大多数web浏览器都支持用插件或activex控件(比如adobe svg brower)查看svg文档。之所以称“可缩放矢量图形”是因为svg处理的是矢量类型的图形,而不是光栅类型的图形。矢量图形是可缩放的,并且在图形缩放或旋转时不会降低分辨率或模糊细节。可缩放矢量图形还可以采用轻巧的可移植格式描绘复杂图形。与其它格式比较起来,矢量图形格式主要优点在于:第一,用于包含图形信息的文件尺寸较小;第二,组织信息的方式便于理解。
在svg中所有图像都由图元组成,例如line、path、text等。
jsp
jsp(java serve page)能在web server端整合java语言至html网页环境中,利用网页内含的java程序代码取代原有的cgi、isapi或者idc的程序。主要用于动态网页的制作。
设计思路
要显示数学符号,显然不能用ascⅱ字符,这就需要一种可定制的图形规范,svg正好充当了这一角色。svg是以xml格式描述二维图形的规范,并且能够动态生成,这一点正好便于生成数学符号。
数学公式的描述可以用xml来完成。xml在描述有序嵌套结构时非常方便、清晰,而且它本身是树结构,而数学公式可以抽象成为树形结构。例如以下数学符号可以抽象为图1。

数学符号
其中可以自己定义一些符号元素,例如根号、数字、求和符号等。再为这些元素加上描述其特点的属性,例如要有根号的长度等。这样就可以把一个数学公式的信息完整地描述出来。由于我们的目标是显示,因此上(下)标等都可以看作兄弟元素,统一用表示。

图1 公式结构树
由于在svg中显示的图形都是由图元组成的,因此需要根据图元定义符号显示格式。如图2对于字母或数字,按照现行的字形规则定义,对于特殊符号定义它的一些特征部位的格式。
图2 显示格式定义
根据svg图元显示的特点,每个图元都需要指定坐标。因此在定义完格式后还需要得到显示的坐标数据,例如根号就需要最左端的坐标、高度、宽度,数字则只需知道起始位置的坐标,如图3。

图3 显示坐标数据
为了用户输入方便,在系统中定义了一套输入规则,其中关键字是以“$”开头,由三个字母组成,如表1。
表1 自定义关键字
$sqr 根号
$inx 下标
$sig 求和符号
$fra 分号
符号的子元素在“[ ]”内描述。特殊符号,例如求和符、上下界等用“,”分开。例如上述的数学符号就可以表示为:$sqr[243$sig[n, i=1] x $inx[i] ]。
这里要说明的是,定义词法时尽量符合书写习惯,避免过多的嵌套,例如变量的下标和变量属于兄弟关系而不是父子关系。
图4是将用户输入转变为图形显示的主要流程图,其中通过jaxp包将xml描述的公式树转化为svg文件。在显示时可根据情况将svg转变为jpg格式或直接嵌入网页中。

图4 用户输入转变为图形显示的流程图
一个例子
将前一节的描述语句$sqr[243$sig[n, i=1] x $inx[i] ] 编译得到的xml文件为:
math.xml
将其用jaxp和math.xsl转换为的svg文件为:
math.svg
最后得到的显示图形见图5。

图5 运行结果图
此外,这种模式还可以用于化学符号、地图等特殊符号的显示。特别是在网络服务和瘦客户端发展趋势下,这种仅需要浏览器的处理机制会得到大力发展。
现有的几种方案
目前网上解决数学符号显示的方案有以下几种:
◆ mathml这是w3c根据xml标准制定出的在网络上显示数学符号的语言,但它非常复杂,并且目前ie暂时不支持需要的插件。同时,由于它需要在客户端解释显示,速度也是一个问题。
◆ applet 在以前的教学软件中就有使用applet解决数学符号显示的例子,但是速度问题和微软对applet的抵制使得它已逐渐失去生命力。
◆ svg 虽然ie目前也暂不支持,但它的插件相对而言很容易得到。只要安装了acrobat reader,插件就自动装上了。
相关技术
xml
扩展标记语言(xml,extensible markup language)是一种可扩展的元置标语言。xml是由sgml(standard general markup language)发展而来的语言,其目标是为了适应web应用环境,将网络上传输的文档规范化。它用文档的结构标记定义手段来表达文档内容的语义元素及其关联,从而提供了网上数据交换的语义格式标准,以及各类业务文档置标语言标准的实现方法。
xslt
xslt(extensible stylesheet language transformation)是一种将xml文档转换成其它类型文档的语言。
jaxp
jaxp(java api for xml processing)是sun公司推出的一种最新的xml工具包。支持最新的dom和sax api。
svg
svg(scalabel vector graphics)是一种以xml格式描述二维图形的规范。这些xml文档以.svg扩展名结尾,并且可由svg浏览器读取这些文件,然后显示。目前大多数web浏览器都支持用插件或activex控件(比如adobe svg brower)查看svg文档。之所以称“可缩放矢量图形”是因为svg处理的是矢量类型的图形,而不是光栅类型的图形。矢量图形是可缩放的,并且在图形缩放或旋转时不会降低分辨率或模糊细节。可缩放矢量图形还可以采用轻巧的可移植格式描绘复杂图形。与其它格式比较起来,矢量图形格式主要优点在于:第一,用于包含图形信息的文件尺寸较小;第二,组织信息的方式便于理解。
在svg中所有图像都由图元组成,例如line、path、text等。
jsp
jsp(java serve page)能在web server端整合java语言至html网页环境中,利用网页内含的java程序代码取代原有的cgi、isapi或者idc的程序。主要用于动态网页的制作。
设计思路
要显示数学符号,显然不能用ascⅱ字符,这就需要一种可定制的图形规范,svg正好充当了这一角色。svg是以xml格式描述二维图形的规范,并且能够动态生成,这一点正好便于生成数学符号。
数学公式的描述可以用xml来完成。xml在描述有序嵌套结构时非常方便、清晰,而且它本身是树结构,而数学公式可以抽象成为树形结构。例如以下数学符号可以抽象为图1。

数学符号
其中可以自己定义一些符号元素,例如

图1 公式结构树
由于在svg中显示的图形都是由图元组成的,因此需要根据图元定义符号显示格式。如图2对于字母或数字,按照现行的字形规则定义,对于特殊符号定义它的一些特征部位的格式。
图2 显示格式定义
根据svg图元显示的特点,每个图元都需要指定坐标。因此在定义完格式后还需要得到显示的坐标数据,例如根号就需要最左端的坐标、高度、宽度,数字则只需知道起始位置的坐标,如图3。

图3 显示坐标数据
为了用户输入方便,在系统中定义了一套输入规则,其中关键字是以“$”开头,由三个字母组成,如表1。
表1 自定义关键字
$sqr 根号
$inx 下标
$sig 求和符号
$fra 分号
符号的子元素在“[ ]”内描述。特殊符号,例如求和符、上下界等用“,”分开。例如上述的数学符号就可以表示为:$sqr[243$sig[n, i=1] x $inx[i] ]。
这里要说明的是,定义词法时尽量符合书写习惯,避免过多的嵌套,例如变量的下标和变量属于兄弟关系而不是父子关系。
图4是将用户输入转变为图形显示的主要流程图,其中通过jaxp包将xml描述的公式树转化为svg文件。在显示时可根据情况将svg转变为jpg格式或直接嵌入网页中。

图4 用户输入转变为图形显示的流程图
一个例子
将前一节的描述语句$sqr[243$sig[n, i=1] x $inx[i] ] 编译得到的xml文件为:
math.xml
将其用jaxp和math.xsl转换为的svg文件为:
math.svg
最后得到的显示图形见图5。

图5 运行结果图
此外,这种模式还可以用于化学符号、地图等特殊符号的显示。特别是在网络服务和瘦客户端发展趋势下,这种仅需要浏览器的处理机制会得到大力发展。
闽公网安备 35060202000074号