作者: 周靖 譯
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內容的一種方式。