作为 API 的 XML (转)

作为 API 的 XML (转)[@more@]Chris Lovett
2000年10月16日张贴
2000年11月20日存档

microsoft.com/code/default.ASP?URL=/code/sample.asp?url=/msdn-files/026/002/038/msdncompositedoc.XML">下载 src="null1165925629843.gif" width=16 border=0> 查看和下载本文的源代码

你用过 Office web 组件吗?最近我经历了一件十分有趣的事 — 在这里介绍给大家,因为我认为它很好地说明了 XML 与面向对象api 之间的区别。

我正在编写一些 Active Server Pages (ASP) 代码,以便将我们小组修改错误的进度制成图表。我们有一个 sql SERVER 数据库,其中包括所有的错误,这些错误分配给谁来处理、何时打开、解决或关闭它们,以及它们当前的状态。

null1165925629843.gif

我们的 SQL SERVER 数据库保留的历史记录不足以生成这样的图形,所以我还得创建一个 XML 文件,用于缓存每日对数据库进行查询的结果。这样,根据该 XML 文件,我就可以生成这样的图形。这个 XML 文件也是一个 ListEditor(英文)文件,因此可以使用数据库外部的其它信息,如要修改错误的目标数(即上面图表中的黑线),直接对它进行编辑。

该 XML 文件中包括的各项如下所示:

328/31/20001461676919158484153639603336

 
 

初次尝试

我研读了 MSOWCVBA.CHM 中记录的 Office 2000 Web 图表组件 API,发现可以通过多种输入源来生成图表,这些输入源包括数组、字符串、记录集和电子数据表。我浏览了那些示例,确定使用数组是最简便的方式。

于是,我编写了一套 ASP 代码,用于生成客户端 jscript 代码,以便通过这些数组生成图表。这种 ASP 代码如下所示:

<object id=ChartSpace1 classid=CLSID:0002E500-0000-0000-C000-000000000046 style="width:100%;height:350">

 
 

我并不特别喜欢这种解决方案,因为维护 ASP 代码简直太困难了。我对它做了一些改动,这样它可以生成一个 HTML 页,将 XML 下载到客户机,并完全在客户端生成图表。这样还能够为我的 Web 服务器分担一部分负载。

所有事情都进行得很顺利,但是到了为 API 本身制作图表的时候,我却遇到了巨大的障碍。如果你常常使用 excel 图表,那么你可能看到过一些很棒的组合图表 — 可以在同一图表上显示两条刻度不同的纵轴,如果你仔细观察上文中显示的图表,就会发现这正是我想要实现的。我将图表设定为:线条使用左边的纵轴,其最大刻度为 700;条形则使用右边的纵轴,其最大刻度为 160。结果表明使用 Office 2000 Web 组件中的图表制作 API 无法生成这样的图表。我被难住了,于是给 Office 工作人员发了一封电子邮件,向他们询问是否有什么变通的方法。

Office 的工作人员告诉我,ChartSpace 对象有一个极好的 XmlData 属性,它可以为我生成的图表返回完全的 XML 格式。而我需要做的只是稍稍调整一下 XML,以便在右边的轴上插入另一种刻度,用 XML 的修正版设置 XmlData 属性,瞧,右边的轴就设好了!

该 XML 的格式如下所示:

9.0.0.2710206649260#F0F0F0LineStandard............ source>-1 ............ 2-1............-1............ ...

 
 

注意:对于这种编写方式,Office 工作人员不承诺支持这种 XML 格式,因为这种格式可能会发生变化。

使用 xsl/T 应急

我将它们两两放在一起,结果发现我根本不需要所有那些代码。只需要一个简洁的 XSL 样式表,它是根据我真正需要的图表的 XML 显示方式生成的。该 XSL 样式表可以插入我需要的数字,这些数字来自我的小 XML 文件。

客户端代码变得十分简洁:

 
 

其结果如下:

文件 说明 Test.htm(英文)显示图表的 HTML 页。如果你 安装了 Inte .NET Explorer 5. x 和 Office 2000 Web 组件,就可以查看这个图表。 Daily.xml(英文)包含错误历史记录的 XML 文件。 Chart.xsl(英文)以 XML 格式生成图表的 XSL 文件。 Tableview.xsl(英文)生成原始数据 HTML 表视图的 XSL 文件。 Mycss.css(英文)定义 HTML 页外观的级联式样式表。

结论

上述情况说明了什么?用紧密绑定的、面向对象的 API 处理图表功能更强大、更丰富,超过了我的应用程序的要求。

性能的制作图表 API 遇到了巨大的困难,它无法在多个坐标轴上设置不同的刻度。开发高性能的、紧耦合的 API 成本高昂,需要花费大量的精力和时间,而且 API 测试也很困难。试想一下对几十个类和几百个方法测试所有的调用顺序,这几乎是不可能的,因此本文介绍的这种重要功能就很必要。

我并不需要一个动态的图表,只需要一个由简单的 XML 生成的简单图表 — 除了数据以外,这种 XML 不会随时间发生太大的变化。

幸运的是,应用程序提供了松耦合的、技术要求低的 XML 格式。这种 XML 格式抛开所有 API 内容,使你能够直接访问每一个构成实际图表的数据。它使你可以进入图表的内部,根据需要进行任何调整。

这种方法的代价是:现在的粒度更粗了。你不能以毫秒为单位改变线条的颜色,也不能按消息的频度改变线条的宽度。但是,结果表明,这种较粗的粒度对于 Office Web 图表组件的多数基于 Web 的应用程序恰到好处。

关于松耦合、粗粒度的 XML API 如何还能够在两个组件间(这里是 Office Web 图表组件与我的 ASP 应用程序)实现更深入的集成,这是一个很好的例子,因为它绕开了可能产生妨碍的面向对象的接口。这里假设你的组件的 XML 格式设计良好,而且 XML 格式中提供了所有功能。

生成你的组件的 XML 界面所需的成本也要低得多。因为它不需要剖析调用顺序测试矩阵。它只是按一种具体的架构接受 XML — 若 XML 不符合该架构,就会被拒绝。你必须测试大量不同的 XML 输入,但比起通过功能齐备的 API 测试所有可能的调用顺序,这种工作量还是小多了。

请不要误解我,我喜欢对象,也喜欢功能齐备的 API — 因为我毕竟是个程序员。但是很多情况下,功能齐备的 API 矫枉过正,因此现在观念上已发生转变 — 客户在要求组件间更深入集成的同时,也追求简单易用,而 XML 就能解决这个问题。


Chris Lovett是 Microsoft 的 XML 小组的编程经理。

存档的 Extreme XML 专栏 2000年 9月18日   XML 和 www.microsoft.com 8月22日   SAX 的一些乐趣 7月25日   C# 编写的 ASP+ ListEditor(英文) 6月22日   从 XSL 参数获取值(英文) 5月29日   XInclude,有人吗? 4月21日   ListEditor:有用的 XML Web 服务(英文) 3月20日   内部的 MSXML3 性能(英文) 2月21日   内部的 MSXML 性能(英文) 1月17日   用 XML 优化 Web 站点(英文) 1999年 12月15日   XML for Microsoft windows 2000 的新内容(英文) 9月20日   ASP 技术和 XML dom(英文) 8月16日   架构:发掘内在潜力(英文) 7月20日   说明数据(英文) 6月21日   分析与共享(英文) 5月20日   各执一词:利用 XML 文档内的 Namespaces(英文) 4月19日   在客户机端服务中的超大 XML(英文) 3月18日   Internet Explorer 5 中扩展的 XML 支持(英文) 2月8日   用 XSL 排序和过滤数据(英文) 1月11日   我的 XML,您的浏览器(英文) 1998年 12月7日   交叉引用 XML 数据(英文) 11月4日   Internet Explorer 5 和 XML(英文) 8月19日   XML、验证和超值强项(英文) 7月15日   再次享受愉快时光:将 XML 张贴到服务器上(英文) 6月15日   在 Balboas 中有多少东西?通过 Visual Basic 访问 XML 元素的键入值(英文) 5月11日   让我们利用磁带:与 Microsoft XML 大师的问答(英文) 4月13日   请求帮助,我的 Web 页需要修改(英文) 3月9日   启动您的数据:从关系型数据库创建 XML 数据源(英文)

回到顶部

请以 IE4.0 以上版本 800 * 600 浏览本站
©2001 Microsoft Corporation 版权所有。保留所有权利。使用规定。

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-987921/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-987921/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值