作者: 周靖 译
http://www.zdnet.com.cn/developer/tech/story/0,3800067013,39139224-1,00.htm
在某种意义上,可将Cocoon视为一个基于XML的内容管理系统,因其提供了一种机制来描述Web信息项目(内容)的结构和语义、这些项目的关系、它们如何随着时间的推移而发生改变(逻辑)以及在请求时如何向用户呈现(它们的样式)。事实上,Cocoon项目作为Apache Web服务器项目的一部分,它的作用之一就是组织和控制Apache麾下众多项目的文档化过程。
作为对其真实用途的一个比喻,Cocoon(茧)这个名字具有深远的意义。它代表一种包裹结构,其中的某些东西将从幼虫阶段成长为美丽的蝴蝶,并准备展翅飞翔。但在Apache Cocoon的主页上,没有对这个巧妙的比喻进行说明。相反,它只是对这个项目进行了准确的技术性解释:“Apache Cocoon是一个XML发布框架,它将XML和XSLT技术在服务器应用程序中的应用提升到一个新级别。Cocoon的宗旨是提升管道化SAX处理的性能和扩展性,通过对内容、逻辑和样式的分离来营造一个灵活的环境。”
到底什么是Cocoon?
Cocoon最初的型态是一个简单的Java servlet,全部使用标准W3C组件:用文档对象模型(DOM)来解析文档,用XML来捕捉和格式化数据,用XSLT来转换数据和合并/操纵XML文档,并用XSL来管理文档的表示以便通过Web传送。但人们很快就要求它为其他类型的内容提供服务(比如程序和文档),所以Cocoon逐渐发展成为一个完整的、基于XML的发布框架及系统。
随着时间的推移,几个新的XML组件问世了,比如SAX。另外,XSL也逐渐细分为几个不同的组件,分别提供Transforms、Formatting Objects和XPath功能。这些新标准直接促成了Cocoon 2在2002年的问世,它定义了一个标准的(而且仍在发展的)内容管理系统,并面向公众开放。
就目前来说,我们可采取几种不同的方式来描述Cocoon:一个XML发布框架,一个数据源聚合器以及一系列管道和组件的集合。
作为发布框架的Cocoon
Cocoon基于对SAX事件的管道式处理。Web应用程序如果围绕这个框架来构建,将获得较好的扩展性和性能。利用一个集中式的配置系统,你可以方便地创建、部署和维护Web应用程序。Cocoon使用了一个缓存系统,所有组件都可根据需要进行动态配置。接收到用户请求后,会自动检查缓存,判断请求的URI(统一资源标识符)是否存在。如果存在,就直接传递缓存的内容,不需要通过一个管道来处理它。
Cocoon作为数据源聚合器
Cocoon可作为一个抽象的引擎使用(通过一个Java servlet),它基于自定义的协议处理程序,能通过标准URI来访问外部数据源。Cocoon甚至能递归调用自身,使数据流能在多个管道化阶段同时处理,从而提高处理速度和效率。
管道和组件
Cocoon体系结构的核心设计思想是模块化和抽象处理。Cocoon管道在概念上和UNIX系统中使用的管道差不多,只是Cocoon管道中的所有元素都是通过解析XML文档而创建的SAX事件。Cocoon识别3种类型的管道元素(组件),分别是生成器(generators)、转换器(transformers)和序列化器(serializers)。其中,生成器使用一个请求的URI来生成SAX事件;转换器使用SAX事件并生成其他SAX事件;序列化器使用SAX事件并生成一些响应。
Cocoon的用途
简单地说,Cocoon管道用于生成和递送内容。内容采用的是某种可识别的形式,由一个生成器和一个序列化器构成。在较典型的Cocoon管道中,生成器之后可能紧接着一个或多个转换器链,而序列化器用于生成不同格式的输出。采取这种方式,同一个源文档可为Web浏览器生成HTML格式的内容,为WAP设备生成WML格式的内容,为打印输出生成PDF格式的内容。
作为一个开发平台,Cocoon最吸引人的地方在于它提供了品种丰富的生成器、转换器和序列化器。人们为Cocoon 2项目开发和捐赠了许多这样的组件。一经捐赠,这些组件就可进行定制,以添加新功能或者进行扩展,从而创建出新的组件。表A总结了适用于Cocoon的一些常用生成器、转换器和序列化器。
表A
类别 |
名称 |
说明 |
生成器 |
DirectoryGenerator |
将目录列表转换成XML格式,以便从中生成SAX事件 |
生成器 |
FileGenerator |
解析一个文件或URI,并生成SAX事件 |
生成器 |
JSPGenerator |
根据JSP页来生成XML和SAX事件 |
生成器 |
ServerPagesGenerator |
根据XSP页来生成XML和SAX |
转换器 |
i18nTransformer |
使用i18n字典和语言参数值来转换SAX事件 |
转换器 |
XincludeTransformer |
通过为现有的SAX流添加SAX事件,从而处理xinclude命名空间,并包括外部源 |
转换器 |
XSLTransformer |
根据XSLT样式表定义来转换SAX事件流 |
序列化器 |
HTMLSerializer |
根据SAX事件来生成HTML响应 |
序列化器 |
PDFSerializer |
根据SAX事件,使用Apache FOP(格式输出处理器)来生成PDF |
序列化器 |
SVG2JPGSerializer |
根据SVG SAX事件,使用Apache Batik来生成JPEG图像 |
序列化器 |
TextSerializer |
根据SAX事件来生成纯文本输出,适用于非XML文本,比如CSS或程序语言代码 |
序列化器 |
XMLSerializer |
根据SAX事件来生成XML响应 |
可由Cocoon使用的部分组件
如所你见,Cocoon的功能并非只是简单地将数据格式化成HTML。在未来的文章中,我们将研究如何在Cocoon环境中创建和处理文档,并更详细地介绍在这个环境中工作所牵涉的问题。就目前来说,你只需理解Cocoon是针对多种目的来捕捉、呈现和递送Web内容的一种方式。