开始之前
本教程的目的有二 —— 展示使用 Ajax/Web 2.0 方法进行 Web 开发的优点,以及展示 DB2 9 pureXML™ 的强大功能。根据这两个目的,我结合 Information On Demand 2006 Global Conference 编写了 Information On Demand 2006 Scheduler 应用程序。这是一个简单的可用来规划会议日程的应用程序。它利用了 Ajax —— Asynchronous JavaScript and XML —— 方法来进行 Web 编程,从而实现直观简单的用户交互。它还利用了 IBM DB2 9 的快速 pureXML 功能。
图 1 演示了 IOD Planner 应用程序的开发。在后台进行了全部的加载以避免刷新延迟,并对表单字段、对话框和下拉菜单使用了丰富的部件。
图 1. IOD Planner 2006
您应该对 Web 开发和数据库有适当的了解。教程 “DB2 XML evaluation guide”(developerWorks,2006 年 6 月)对 DB2 9 进行了很好的介绍,而 “Query DB2 XML Data with XQuery”(developerWorks,2006 年 4 月)则介绍了 XQuery。
要部署源代码,需要 Windows 或 Linux 操作系统。在其上,需安装 Zend Core for IBM(参见 参考资料 中的下载链接)。Zend Core 很方便地捆绑了 DB2 9 Express-C 数据服务器、Apache2 Web 服务器、PHP 脚本语言、DB2 的 PHP 扩展和一个功能强大的管理控制台。
图 2. 传统的 Web 模型和 Ajax 模型
Ajax 基本原理的关键原则是避免加载新的 Web 页面。相反,可以在后台加载新的内容并在现有页面中显示它。这样就避免了重新加载基本框架的浪费,而且也不需要花时间等待浏览器呈现相同的导航和设计。您的用户不会看到加载中的空页面。最终的结果是一个迅速的、响应性很好的应用程序。
使用 XMLHTTPRequest 对象向服务器发送请求,并在响应到达时对其进行异步处理。和其名字相反,该对象并不只限制于 XML。任何空白的文本格式,从 JavaScript (JSON) 到 CSV 再到预先生成的 HTML,都可以使用这种机制接收。我们选择后者 —— 在服务器中生成的 HTML。
Ajax 风格的 Web 应用程序主要包括 Bloglines、Del.icio.us、Digg、Flickr、Google Map、Gmail 和 Reddit。
为什么使用 Dojo JavaScript Framework?
在过去两年里,作为一种语言和平台,JavaScript 获得了很大程度的发展。这种语言没有正式的库、框架或 API,所以出现了一些业内支持的开源的替代选择。它们提供了方便的 Aax、丰富的小部件、数据结构、辅助函数、效果和布局帮助。Dojo 是其中一种工具箱。
Dojo 是一个开源的 JavaScript 框架,IBM、Sun、AOL、JotSpot 等都对其提供支持。Ajax for IBM WebSphere® 使用 Dojo 0.4.1。Dojo 对任何服务器端工具箱都没有限制 —— 这意味着它可与 PHP、Java、servlets、.NET 或其他任何后端结合使用。Dojo 有一个活跃的用户和开发人员社区,在 dojo 的邮件列表里面有大量的日常消息。
Dojo 具有模块化设计,根据需要可以加载额外的功能。
图 3. JavaScript 框架采用(Ajaxian.com, 2006)
图 3 所示的竞争者份额中,Dojo 是一块新的领域,并正在迅速壮大。在过去一年里,Dojo 和 Script.aculo.us 都获得了巨大市场份额增长。其中,Dojo 具有更健壮的架构和更好的业内支持。
需要使用一种关系数据库作为 Web 应用程序的后端。我们选择使用 DB2 Express-C,它是 DB2 9 数据服务器的一个可以免费下载、免费部署、免费发布的版本。它还具有原生 XML 功能,这种功能需要进行细化。
图 4. 组合 XML 和关系数据库的传统方法
任何足够大的企业应用程序都希望使用 XML。通常,XML 是表示数据的最自然的形式。这意味着 XML 可以存储在文件中,或者大量存储在数据库 CLOB 中,或者解析为分离的列。
但是,在关系数据库中混合分离的 XML 文件将很难进行扩展;CLOB 中 XML 很难进行查询,而且速度缓慢;将 XML 解析为关系列意味着关系模式必须与 XML 模式同步 —— 即每一次对 XML 结构做出更改将触发对整个数据库的回归测试,这种代价是非常昂贵的。
图 5. DB2 中的原生 XML
DB2 9 解决了这种问题。使用 SQL 和 W3C 标准的 XQuery 对其原生 XML 数据类型进行查询非常简单。它可随数据库进行扩展,并且特定于 XML 的优化使得它具有比 CLOB 更好的性能。最后,它将 XML 和关系模式分离 —— 即当只改变 XML 结构时不需要对所有内容进行回归测试。
图 6. XQuery 和 DB2
XQuery 是从 XML 文件中查询数据的 W3C 标准。XQuery 中的 WHERE 子句与 SQL 类似,FOR 循环对于初级的程序员来说比较直观。XQuery 代码与其等价的 XSL 相比,编写起来更加快捷,更易于阅读,并且通常更友好。
FLWOR(“flower”)经常会在 XQuery 上下文中提到。它指的是 for、LET、ORDER BY、WHERE 和 RETURN 语句,这些语句是 XQuery 的基础。
关于优秀的介绍性文章,请参考文章 “Query DB2 XML Data with XQuery”。
PHP 是一种流行的并易于掌握的服务器端脚本语言。与 Java servlets 或 .NET 相比较,它具有较低的学习曲线,但同样为资深专业人员提供了功能强大的高级特性。作为一种解释性的脚本语言,它非常适用于重复开发 —— 不需要在做出个别更改后重新编译,并且能够实时看到更改代码后的效果。
无需多言,您应该将开发、测试和生产环境分离。不推荐进行即时编辑。
我们之所以选择 XSL,是因为其强大的转换功能。用过之后发现,它其实只依赖于 XQuery 。它的工具也非常优秀,代码变得更加简短也更加优雅。XQuery 是一种更加友好的、无任何副作用的语言,专门用于将一种 XML 结构转换为另一种。我们已经使用 XQuery 生成了格式良好的 XML,所以可以完全避免进行第二次转换。