Apache Cocoon(アパッチ・コクーン)は、ウェブアプリケーションフレームワークであり、パイプ、関心の分離、コンポーネントベースのウェブアプリケーション開発といった概念に基づいたものである。単に Cocoon と呼ばれることが多い。CocoonフレームワークはXMLとXSLTによる出版に焦点をおいており、Javaで開発されている。
XML技術を基盤としてXML技術を積極的に活用することにより高い柔軟性を持っており、XHTML、PDF、WMLなどさまざまな形式での迅速な文書 (コンテンツ) の出版が可能である。コンテンツ管理システムである Apache Lenya と Daisy は、Apache Cocoon を基盤として開発されている。Cocoonはまた、データウェアハウスのETL (抽出: Extract、変換: Transform、ロード: Load) のツールとしても使われており、情報システム間のデータ転送のためのミドルウェアとしても使われている。
Apache Cocoon の中心部分にサイトマップ (sitemap.xmapファイル) が存在する。サイトマップにおいて、ウェブサイトの開発者が、さまざまな Cocoon のコンポーネントを環境設定し、クライアントサーバの相互作用を定義する。このクライアントサーバ相互作用において、CocoonはXML変換言語によるXMLパイプラインとして参照する。
Cocoonのコンポーネントは、機能ごとに分類される。
matchersの用途は、利用者のURLやcookieなどのHTTPリクエスト情報が、ワイルドカードや正規表現のパターンに対して、一致するものをみつけることである。利用者のHTTPリクエストのおのおのは、Cocoonを使ったウェブアプリケーションに送信され、パターンに対して一致するものをみつける処理が行われる。その後におのおののリクエストに対する処理が行われる。
generatorsは、高度な処理のためのストリームを生成する。
このストリームは、配置されたXML文書をもとに生成することができる。generatersとしては、ディレクトリ構造や画像データなどサーバに関する何らかのデータを表現するために、一からXML文書を生成できるものも存在する。
transformersは、データのストリームを取得して、何らかの方法でデータストリームの内容の変更を行う。多くの場合に共通して使われる変更方法は、XSLT (XSL Transformations) のスタイルシートである。XSLTスタイルシートは、あるXML文書の構造を別の構造に変換する技術であり、XSLTスタイルシート自身もXMLで記述される。他の形式で記述されたデータを取得して変更を行うtransformersも存在する (例えばSQLなど) 。
一つのserializerは、一つのデータストリームを取得し、データストリームに対して必要な何らかの変更を行い、変更後の内容をクライアント側 (利用者側) に配信する。さまざまな種類の形式でデータを配信するserializersが存在する。Cocoonで配信可能なデータの形式としては、例えば、XHTML、HTML、PDF、RTF、SVG、WML、プレーンテキストがある。
selectorsはswitch文と同じことができる。selectorsを使うことで、HTTPリクエストから特定の要素を選びだして、HTTPリクエストを処理するために使うための正しいパイプライン部を選択することができる。
viewsの用途は主としてテストである。一つのviewは一つのパイプラインの終了場所である。この終了場所までに生成されたXMLデータストリームを出力することができる。このためウェブアプリケーションが正しく動作しているかどうかを、viewsを使って調べることができる。
readersはデータのパースを行わないでデータを配信する。つまりreadersはXML技術に基づいた処理は行わない。画像データのようなデータに対して使われる。
actionsはJavaのクラスであり、このクラスが何らかのビジネスロジックを実行したり新しいコンテンツの生成を管理したりする。
XSP page [1] とは、Cocoon XML 文書であり、このXML文書はタグに基づいた命令 (ディレクティブ) を含む。XSP page に含まれる命令は、HTTPリクエストを受けたときにどのようにして動的な文書を生成するかを指定する。
Cocoonでの処理において、こうした命令は生成された文書に置き換えられる。その結果として、対象となるXML文書に対して高度な処理を行うことができる (XSLTスタイルシートによる変換処理を行うことが多い) 。
XSP page は、Cocoon の文書生成機構によって変換処理が行われる。XSP page を扱う際の Cocoon の文書生成機構は、Javaのクラスである場合が多い。ただし何らかのスクリプト言語があり、そのスクリプト言語の処理機構がJavaで実装されている場合、そのスクリプト言語を文書生成機構として使うこともできる。
XSP page に含まれる命令は、XSP組込みの処理タグである場合と、開発者が定義したライブラリタグである場合とがある。
- XSP組込みのタグの用途は、手続き的なロジックの埋め込み、式の置き換え、そして動的なXMLのノードの構築である。
- 開発者が定義したライブラリタグは、おのおのの動的なタグの内にコード化された情報をもとにしてプログラムコードを生成する方法を指示する雛型として役割を果たす。
パイプラインの用途は、さまざまな Cocoon コンポーネントがさまざまなHTTPリクエストと相互作用してHTTPレスポンスを生成する方法を定義することである。
XProcモデルと標準化も参照。
- Reactor Pattern - Cocoon が基にしているデザインパターン
- XML pipeline
- XSLT (XSL Transformations) - Cocoon が文書の変換方法を格納するために使うXMLのマークアップ言語