本文描述了一种用于进行下列操作的机制:分别开发应用程序业务数据和表示数据,然后使用通用的 XSLT 样式表将它们组合在一起。应用程序业务数据被格式化成 XML 形式,而表示数据可以用传统工具来创建。附加属性增强了表示数据,样式表使用这些属性来将表示细节应用于实际内容。对于最终格式的创建,不需要专门的编程,因为这个过程是由 XSLT 处理器完成的。
为最充分地理解本文,您应该了解 XML 和 XSLT 的基础知识。请参阅 参考资料一节,以获得至可作为这些主题介绍的教程和文章的链接。这里显示的所有示例都是使用 Apache Xerces XML 解析器,版本 2.0.1 和 Apache Xalan XSLT 处理器,版本 2.3.1(请参阅 参考资料中的 Apache XML Project)产生的。
应用程序体系结构
对于应用程序体系结构,我选择了 Java 2 企业版(J2EE)提议的 n 层体系结构,如图 1 所示。
图 1. n 层体系结构
这里,我将集中讨论第 1 层和第 2 层。如果您期望用户输出由 servlet 处理,则可以改进这个体系结构。这个 servlet 调用与后端通信的应用程序业务逻辑。这个后端可以是(例如)存在于网络中独立服务器上的 Enterprise JavaBean。可以假设所有业务数据都被格式化成 XML。然后,通过使用 Java Server Page(JSP)准备该数据以进行表示,并将它发回客户机,如图 2 所示。
图 2. 使用 JSP 准备用于表示的数据
如果将该图片转换成“模型-视图-控制器(Model-View-Controller (MVC))”设计模式上,则 servlet 充当控制器角色,应用程序逻辑代表模型,JSP 是视图元素。(诚然,这种分配是简化了的,但它显示了基本原理。)
准备用于表示的应用程序数据
为了充分利用使用 XML 创建应用程序数据的好处,必须先将数据转换成可表示的格式。做到这一点的常用方法是 XSLT 样式表。在 XSL 规范(另见 参考资料中的可扩展样式表语言(eXtensible Stylesheets Language))中有两种可能的方法。您可以:
使用所谓的 格式化对象(FO)
创建简单的 XSLT 样式表
FO 通常创建二进制输出格式,但至今仍未被广泛使用(即使它们更专用于编辑表示数据)。另外,常用的 XSL 处理器和工具几乎也不支持它们。而另一方面,XSLT 样式表被更广泛地使用,所以本文中我将集中讨论 XSLT 样式表。
XSLT 样式表处理结构
XSLT 样式表始终使用一个 XML 文档来充当其输入。XSL 处理器根据样式表中的规则来处理这个输入文档。这会产生一个新的 XML 输出文档,如图 3 所示。
图 3. 使用 XSLT 样式表来处理 XML 文档
在大多数情况下,这种结构会导致样式表中规则和表示数据的混合。我假设我有 XML 格式的地址数据,需要将这些数据转换成 HTML,以在浏览器中表示。清单 1 显示了 XML 输入数据。注:XSLT 样式表处理步骤的输出是另一个 XML 文档。HTML 不一定是格式良好的,所以这里将始终产生 XHTML(XHTML 一定始终是格式良好)。稍后再讨论这个问题。