在 SOA 架构中,程序员经常使用 XML 在应用程序之间交换结构化和半结构化的数据。XML 及其相关技术 — 文档对象模型(Document Object Model,DOM)、XPath、HTTP、XQuery 和可扩展样式表语言转换(Extensible Stylesheet Language Transformations,XSLT) — 为快速应用程序开发提供了一个强大的环境。构建在这些技术之上的应用程序将占用更小的内存空间,需要更低的维护成本,同时又拥有更高的品质和灵活性。
DB2 和其他关系数据库的 XML 方面的特性已经相当成熟,因此除了存储和管理关系数据之外,它们还是存储和管理 XML 数据的理想选择。DB2 9 XML 支持(称为 pureXML)提供了以纯 XML 的形式(换句话说,就是带注释的、树型的分层存储)存储 XML 的能力。在 DB2 9 中,XML 数据可以用 XML 模式索引,可以从关系数据组合而成,可以分解为关系数据,可以查询和转换,可以独立发布,或者通过混合使用 SQL/XML 和 XQuery 与关系数据组合起来。
Web 浏览器也正在为客户机脚本提供更多的功能来有效地处理 XML。通过使用异步 JavaScript 和 XML(Asynchronous JavaScript and XML,Ajax),Web 页面现在可以直接对应用服务器进行远程过程调用,并且可以在任何返回的 XML 数据上使用 DOM API。
本文将展示如何利用 DB2 XML、Ajax 和 PHP Hypertext Preprocessor (PHP) 提供的功能来编写简单的基于 XML 的应用程序。通过示例场景的帮助,您将学习如何在 JavaScript 中调用 PHP 应用程序;如何使用 DOM 和 SimpleXML API 修改 XML 数据;如何将 XML 从客户机传送到应用程序再到数据库;以及如何创建 PHP Web 服务来使用 SQL/XML 和 XQuery 发布关于 XML 数据的报告。
XML 优点
大多数应用程序都用于创建、存储、操纵和呈现业务数据。对象包装是指将业务数据绑在一起,使业务逻辑更容易处理它们。这些包装器对象的很多功能都是根据关系和格式化规则来提供业务数据的结构,并使业务逻辑能够操纵、发布和串行化封装的数据。
图 1. 基于对象包装器的应用程序
图 1 阐释了使用对象包装器的一个示例人寿保险应用程序。每个方框表示一个对象,每个对象至少有:
·一个构造函数
·Getter 和 Setter 方法
·验证代码
·内部对象层次的串行化
这些对象与实际的业务逻辑没有关系。对象包装是为了使业务逻辑更容易管理业务数据。包装数据所需的代码比业务逻辑要多得多。更多的代码将导致更多的 bug、更大的固定性、更多的维护和更高的成本。
如果对象中的数据变量可以格式化为 XML 结构,并且对象的主要作用是将这些数据暴露给业务逻辑并让业务逻辑操纵它们,那么可以用 DOM 代替对象。
图 2. 基于 XML 的应用程序
图 2 展示了一个使用 XML 和 DOM 包装器的示例保险应用程序。图 1 中的所有数据包装器对象都用一个 DOM 对象代替。业务数据是用 XML 建模的,DOM 提供了必要的 API 来:
·创建新的 XML 对象。
·更新 XML 对象的值。
·导航 XML 对象。
·使用 XPath 在对象层次中搜索。
·串行化和反串行化 XML 对象层次(换句话说,就是内建持久性)。
通过使用 XML,可以避免使用大多数用于管理业务数据的包装器对象。应用程序将变得更加简洁,并且更多地将重点放在业务逻辑上,而不是数据管理上。
XML 和架构
将 XML 引入架构中可以为表示业务数据带来一种标准化的方式。XML 可以提供数据的结构;XML 模式施加结构和格式化规则;DOM API 和 XQuery、XPath 及 XSLT 之类的语言使业务逻辑可以有效地操纵、发布和串行化数据。由于业务数据的 XML 表示在客户机、中间层和数据库中都是一致的,因此操纵这些对象的代码也是类似的。
我将展示如何在三层环境中构建基于 XML 的应用程序,这个三层环境由以下几个部分组成:
·Web 客户机:Asynchronous JavaScript and XML (Ajax),DOM
·应用服务器:PHP 和 SimpleXML
·数据库: DB2 9 和 SQL/XML,XQuery