Kahua Release
- Release Note
- Download
- Current Version 1.0.7.3 (2008-05-08)
kahua-web Release
- kahua-webとは
- Release Note
- Download
- Current Version 0.3.1 (2007-06-12)
Security Advisory
Event Log
Documentation
For developers
Site info
Related Site
Kahuaアプリケーションコードの概要
bookmarksをその名の通りのソーシャルブックマークに仕立てる前に、 kahua-package generateが吐き出したサンプルコードを見ながら、Kahuaのアプ リケーションがどういう構造をしているのかをざっと説明しましょう。
生成されたコードを眺める
$HOME/work/bookmarks/bookmarks/bookmarks.kahua をEmacsで開いてみます。 こんな具合になっているはずです。ただし、番号は説明の便宜上付け加えたも ので、生成されたコードには含まれていません。
; (1)
(load "bookmarks/version.kahua")
; (2)
(define page-template
(kahua:make-xml-template
(kahua-template-path "bookmarks/page.xml")))
; (3)
(define-entry (version)
(kahua:xml-template->sxml
page-template
:title (title/ (@/ (id "title"))
"bookmarks")
:body (div/ (@/ (id "body"))
(h1/ (format "bookmarks: version ~a"
*bookmarks-version*))
(a/cont/ (@@/ (cont greeting))
"greeting"))))
; (4)
(define-entry (greeting)
(kahua:xml-template->sxml
page-template
:body (div/ (@/ (id "body"))
(h1/ "Hello, Kahua!")
(a/cont/ (@@/ (cont version))
"version"))))
;
; initialization
;
; (5)
(initialize-main-proc greeting)
(1) は文字通り同じディレクトリにある version.kahua という ファイルをロードしています。version.kahuaの中身は
(define *bookmarks-version* "0.0.0")
これだけ。バージョン番号表す変数を定義しているわけですね。 この変数は後で version という名前のエントリの中で使われます。
(2) はページテンプレートを定義しています。 (kahua-template-path "bookmarks/page.xml") でテンプレートとして 使用するXMLファイルのフルパスを得、そこからkahua:make-xml-template でテンプレートオブジェクトを生成します。定義したテンプレートは、 各エントリの中でページを生成するのに使われます。
(3), (4) は、Kahuaのキモの1つであるwell known エントリを定義 しているフォームです。エントリについてはこの後詳細に説明します。
(5) は、デフォルトで起動するエントリを登録しています。つまり、リクエス トURにエントリを指定するパス要素が含まれていない場合に起動するエントリ ということで、実際にはthunk(引数をとらない手続き)であれば何でも登録 できます。
エントリとは
Kahuaアプリケーションにおけるエントリとは、そのアプリケーションの クライアント(例えばWebブラウザ)から直接起動することのできる手続き を指します。エントリは、以下のようにリクエストURIのパス要素にマッピング されます。
http://hostname:8088/bookmarks/greeting
<-------> <------>
アプリ名 エントリ名
ここで、エントリ名が渡されないとどうなるでしょうか
http://hostname:8088/bookmarks
この時起動されるのが、前述の(5)で登録された手続きなのです。便宜上、これ をデフォルトエントリと呼びます。
デフォルトエントリを含めたエントリは、SXMLもしくは高階タグノード(後述)を 返さなければなりません。
well known (有名)エントリ
前述の(3)と(4)で使われている define-entry は、well known エントリを定義するためのマクロです。well known エントリは名前 を持ち、URIのエントリ相当のパス要素にその名前を指定することでいつでも 呼び出すことができます。
無名エントリ
無名エントリは entry-lambda マクロで定義される手続きです。特定の名前を持たず、URI上は「継続ID」と呼ばれる 文字列として表現されます。無名エントリに対してdefine-entryを使って恒常的な名前 を与えることができます。
お待たせしました。今度こそソーシャルブックマークのプログラミングを始めます。