以Web的形式实现高质量的图表一直是个老大难的问题。大多数此类编程技术都是在服务器端进行的,首先在内存中产生图表的图像,然后转换为位图再传送给浏览器显示。下面我们就讨论一些更有效的方式,其中并不涉及到采用VB或者Java的过程式编程但同样可以为浏览器创建图表,这就是SVG。
以上的过程分为两个方面:首先是从图像中获取数据,然后根据这些数据绘制图像。我们关注的焦点是获取XML格式的数据,然后把这些XML数据转换为SVG-XML,后者正好包含了绘制图像的指令。浏览器插件负责解释SVG-XML并在浏览器中具体绘制图形。这类插件之一可以由Adobe公司提供。
由于XML已经成为事实上的数据格式标准,所以我们在这里做个假设:数据的输出格式就是XML。专门交付XML格式数据的工具不少,比如Oracle的XSQL和Indent的Aspire等。在以上两种工具的应用情况下,你都必须在交付XML数据文件的URL调用Oracle或Aspire时指定有关的SQL语句或者存储过程。数据源不必是数据库,它们也可以是EJB、DCOM或者其他组件。
比方说,Aspire下的数据采集SQL调用程序如代码清单A所示。首先,select以 arg1作为输入参数并返回category。然后SQL返回该类的若干行数据。
在SVG中采用XML 数据文件绘制图表有两种方式:XSLT和服务器端解决方案。
XSLT
采用XSLT的方法会通过XSLT将输入XML转换为SVG-XML文件。这里有一些XSLT的示例,这些例子分别针对特定类型的图形。XSLT文件容量比较大,在处理复杂图形的时候编码量也较大。XSLT的维护和扩展都不太容易。如果你要用XSLT编程,那么你多半会觉得这简直是件苦差使——哪怕是处理一幅非常简单的图形。
服务器端解决方案
在这种方式下,服务器端程序会创建为图形创建SVG-XML文件并把它交付给浏览器。来自Apache 的Batik为创建这类服务器端程序提供了基于Java的工具包。另外还有些公司开发了服务器端的、基于SVG图表处理的商业产品,比如Corda Technologies, Inc.、ElanSoft和Visual Mining, Inc.等。这些服务器端程序针对图表、特定类型的图形及其参数产生输入XML数据。这是一种相当出色的技术,因为它并不牵扯的到任何编程任务。实际上,用户不过是在XML文件中设置希望图形的有关参数而已。图 A所示为具有专门图形和数据规范的服务器端解决方案的结构图。数据服务器起了代理的作用,它从多个数据来源采集数据并返回XML数据。以下是一个示例图形规范文件,该例来自Corda的PopCharts,代码如程序清单B所示。
图A
Web图形和图表的创建在采用SVG的情况下可就轻松多了,至少你不必再去编写讨厌的处理程序。唯一需要的规范就是定义数据的采集和图形的属性。
欢迎评论或投稿