Apache Cocoon入門
作者: 周靖 譯
http://www.zdnet.com.cn/developer/tech/story/0,3800067013,39139224-1,00.htm
在某種意義上,可將Cocoon視為一個(gè)基于XML的內(nèi)容管理系統(tǒng),因其提供了一種機(jī)制來(lái)描述Web信息項(xiàng)目(內(nèi)容)的結(jié)構(gòu)和語(yǔ)義、這些項(xiàng)目的關(guān)系、它們?nèi)绾坞S著時(shí)間的推移而發(fā)生改變(邏輯)以及在請(qǐng)求時(shí)如何向用戶呈現(xiàn)(它們的樣式)。事實(shí)上,Cocoon項(xiàng)目作為Apache Web服務(wù)器項(xiàng)目的一部分,它的作用之一就是組織和控制Apache麾下眾多項(xiàng)目的文檔化過(guò)程。
作為對(duì)其真實(shí)用途的一個(gè)比喻,Cocoon(繭)這個(gè)名字具有深遠(yuǎn)的意義。它代表一種包裹結(jié)構(gòu),其中的某些東西將從幼蟲階段成長(zhǎng)為美麗的蝴蝶,并準(zhǔn)備展翅飛翔。但在Apache Cocoon的主頁(yè)上,沒(méi)有對(duì)這個(gè)巧妙的比喻進(jìn)行說(shuō)明。相反,它只是對(duì)這個(gè)項(xiàng)目進(jìn)行了準(zhǔn)確的技術(shù)性解釋:“Apache Cocoon是一個(gè)XML發(fā)布框架,它將XML和XSLT技術(shù)在服務(wù)器應(yīng)用程序中的應(yīng)用提升到一個(gè)新級(jí)別。Cocoon的宗旨是提升管道化SAX處理的性能和擴(kuò)展性,通過(guò)對(duì)內(nèi)容、邏輯和樣式的分離來(lái)營(yíng)造一個(gè)靈活的環(huán)境?!?BR>
到底什么是Cocoon?
Cocoon最初的型態(tài)是一個(gè)簡(jiǎn)單的Java servlet,全部使用標(biāo)準(zhǔn)W3C組件:用文檔對(duì)象模型(DOM)來(lái)解析文檔,用XML來(lái)捕捉和格式化數(shù)據(jù),用XSLT來(lái)轉(zhuǎn)換數(shù)據(jù)和合并/操縱XML文檔,并用XSL來(lái)管理文檔的表示以便通過(guò)Web傳送。但人們很快就要求它為其他類型的內(nèi)容提供服務(wù)(比如程序和文檔),所以Cocoon逐漸發(fā)展成為一個(gè)完整的、基于XML的發(fā)布框架及系統(tǒng)。
隨著時(shí)間的推移,幾個(gè)新的XML組件問(wèn)世了,比如SAX。另外,XSL也逐漸細(xì)分為幾個(gè)不同的組件,分別提供Transforms、Formatting Objects和XPath功能。這些新標(biāo)準(zhǔn)直接促成了Cocoon 2在2002年的問(wèn)世,它定義了一個(gè)標(biāo)準(zhǔn)的(而且仍在發(fā)展的)內(nèi)容管理系統(tǒng),并面向公眾開放。
就目前來(lái)說(shuō),我們可采取幾種不同的方式來(lái)描述Cocoon:一個(gè)XML發(fā)布框架,一個(gè)數(shù)據(jù)源聚合器以及一系列管道和組件的集合。
作為發(fā)布框架的Cocoon
Cocoon基于對(duì)SAX事件的管道式處理。Web應(yīng)用程序如果圍繞這個(gè)框架來(lái)構(gòu)建,將獲得較好的擴(kuò)展性和性能。利用一個(gè)集中式的配置系統(tǒng),你可以方便地創(chuàng)建、部署和維護(hù)Web應(yīng)用程序。Cocoon使用了一個(gè)緩存系統(tǒng),所有組件都可根據(jù)需要進(jìn)行動(dòng)態(tài)配置。接收到用戶請(qǐng)求后,會(huì)自動(dòng)檢查緩存,判斷請(qǐng)求的URI(統(tǒng)一資源標(biāo)識(shí)符)是否存在。如果存在,就直接傳遞緩存的內(nèi)容,不需要通過(guò)一個(gè)管道來(lái)處理它。
Cocoon作為數(shù)據(jù)源聚合器
Cocoon可作為一個(gè)抽象的引擎使用(通過(guò)一個(gè)Java servlet),它基于自定義的協(xié)議處理程序,能通過(guò)標(biāo)準(zhǔn)URI來(lái)訪問(wèn)外部數(shù)據(jù)源。Cocoon甚至能遞歸調(diào)用自身,使數(shù)據(jù)流能在多個(gè)管道化階段同時(shí)處理,從而提高處理速度和效率。
管道和組件
Cocoon體系結(jié)構(gòu)的核心設(shè)計(jì)思想是模塊化和抽象處理。Cocoon管道在概念上和UNIX系統(tǒng)中使用的管道差不多,只是Cocoon管道中的所有元素都是通過(guò)解析XML文檔而創(chuàng)建的SAX事件。Cocoon識(shí)別3種類型的管道元素(組件),分別是生成器(generators)、轉(zhuǎn)換器(transformers)和序列化器(serializers)。其中,生成器使用一個(gè)請(qǐng)求的URI來(lái)生成SAX事件;轉(zhuǎn)換器使用SAX事件并生成其他SAX事件;序列化器使用SAX事件并生成一些響應(yīng)。
Cocoon的用途
簡(jiǎn)單地說(shuō),Cocoon管道用于生成和遞送內(nèi)容。內(nèi)容采用的是某種可識(shí)別的形式,由一個(gè)生成器和一個(gè)序列化器構(gòu)成。在較典型的Cocoon管道中,生成器之后可能緊接著一個(gè)或多個(gè)轉(zhuǎn)換器鏈,而序列化器用于生成不同格式的輸出。采取這種方式,同一個(gè)源文檔可為Web瀏覽器生成HTML格式的內(nèi)容,為WAP設(shè)備生成WML格式的內(nèi)容,為打印輸出生成PDF格式的內(nèi)容。
作為一個(gè)開發(fā)平臺(tái),Cocoon最吸引人的地方在于它提供了品種豐富的生成器、轉(zhuǎn)換器和序列化器。人們?yōu)镃ocoon 2項(xiàng)目開發(fā)和捐贈(zèng)了許多這樣的組件。一經(jīng)捐贈(zèng),這些組件就可進(jìn)行定制,以添加新功能或者進(jìn)行擴(kuò)展,從而創(chuàng)建出新的組件。表A總結(jié)了適用于Cocoon的一些常用生成器、轉(zhuǎn)換器和序列化器。
表A
類別 | 名稱 | 說(shuō)明 |
生成器 | DirectoryGenerator | 將目錄列表轉(zhuǎn)換成XML格式,以便從中生成SAX事件 |
生成器 | FileGenerator | 解析一個(gè)文件或URI,并生成SAX事件 |
生成器 | JSPGenerator | 根據(jù)JSP頁(yè)來(lái)生成XML和SAX事件 |
生成器 | ServerPagesGenerator | 根據(jù)XSP頁(yè)來(lái)生成XML和SAX |
轉(zhuǎn)換器 | i18nTransformer | 使用i18n字典和語(yǔ)言參數(shù)值來(lái)轉(zhuǎn)換SAX事件 |
轉(zhuǎn)換器 | XincludeTransformer | 通過(guò)為現(xiàn)有的SAX流添加SAX事件,從而處理xinclude命名空間,并包括外部源 |
轉(zhuǎn)換器 | XSLTransformer | 根據(jù)XSLT樣式表定義來(lái)轉(zhuǎn)換SAX事件流 |
序列化器 | HTMLSerializer | 根據(jù)SAX事件來(lái)生成HTML響應(yīng) |
序列化器 | PDFSerializer | 根據(jù)SAX事件,使用Apache FOP(格式輸出處理器)來(lái)生成PDF |
序列化器 | SVG2JPGSerializer | 根據(jù)SVG SAX事件,使用Apache Batik來(lái)生成JPEG圖像 |
序列化器 | TextSerializer | 根據(jù)SAX事件來(lái)生成純文本輸出,適用于非XML文本,比如CSS或程序語(yǔ)言代碼 |
序列化器 | XMLSerializer | 根據(jù)SAX事件來(lái)生成XML響應(yīng) |
可由Cocoon使用的部分組件
如所你見(jiàn),Cocoon的功能并非只是簡(jiǎn)單地將數(shù)據(jù)格式化成HTML。在未來(lái)的文章中,我們將研究如何在Cocoon環(huán)境中創(chuàng)建和處理文檔,并更詳細(xì)地介紹在這個(gè)環(huán)境中工作所牽涉的問(wèn)題。就目前來(lái)說(shuō),你只需理解Cocoon是針對(duì)多種目的來(lái)捕捉、呈現(xiàn)和遞送Web內(nèi)容的一種方式。
posted on 2006-02-15 15:28 bluesky 閱讀(8786) 評(píng)論(1) 編輯 收藏 所屬分類: 記事本