Sealyu

--- 博客已迁移至: http://www.sealyu.com/blog

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  618 随笔 :: 87 文章 :: 225 评论 :: 0 Trackbacks

作者: 周靖 译
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内容的一种方式。

posted on 2009-10-15 09:39 seal 阅读(243) 评论(0)  编辑  收藏 所属分类: Java基础

只有注册用户登录后才能发表评论。


网站导航: