DSL

English page

Kahua Release

kahua-web Release

Security Advisory

Event Log

Documentation

For developers

Site info

Related Site

Kahua での HTML コンテンツの記述について (2004/02/19 -- nobsun)

1. 従来の記述方法

従来、Kahua では、HTML コンテンツは、SXML 形式で直かに記述していました。 たとえば、以下のようにです。

        (define (simple-page ttl . elems)
          `((html (head (title ,ttl))
                  (body (@ (bgcolor "white"))
                        (h1 ,ttl) ,@elems))))

このように表現した場合、html head body などの HTML 要素のタグに対応する 部分は、シンボルで表現されています。このような表現のなかで、変数を評価 してあつかいたい場合には、quasi-quote、unquote、unquote-splicing を利用 します。

2. 新たに追加した関数による記法

今、Kahua では、SXML のタグを関数で表現することもできるようになっています 以下の二つの記法はあくまでも過渡的なものなので、近い将来変更されることが 予想されます。

2.1 タグの関数化

タグを関数(SXMLノードを生成する関数)を使えるようにしました。

        (define (simple-page-bis ttl . elems)
          (node-set:
           (html: (head: (title: ttl))
                  (body: (@: (bgcolor "white"))
                         (h1: ttl)
                         (node-list-to-node-set elems)))))

関数名は、各タグの後に':'を追加したものになっています。 また、属性リストおよび補助属性リストの記述については、それぞれ '@:' および '@@:' というマクロで表現できます。これらの関数表現を利用する場合には、 基本的には quasi-quote、unquote、unquote-splicing は必要ありません。

今現在、Kahua/examples にあるサンプルアプリケーションは、こちらの 新しい関数による記法での記述に変更されています。

2.2 タグの高階関数化

タグの関数化をさらにすすめて、高階関数化したものも使えるようにしました。

        (define (simple-page-tres ttl . elems)
           (html/ (head/ (title/ ttl))
                  (body/ (@/ (bgcolor "white"))
                         (h1/ ttl) 
                         (node-set elems))))

関数名は、各タグの後に'/'を追加したものになっています。 また、属性リストおよび補助属性リストの記述については、それぞれ '@/' および '@@/' というマクロで表現できます。これらの関数は、関数を返しますので、 上の2つの記法とは混在できません。

3. 今後の記法の進化と互換性

今後、Kahua では SXML の各タグは高階関数化し、組合せ子として構成する 予定です。現在はその過渡期として、シンボルによる表現と単純な関数としての 表現、高階関数の表現のどれでもできるようになっていますが、関数による表現は 現段階では実験的なもので、今後変更される可能性があります。シンボルの直書きに よる表現については、今後も(しばらくは)そのまま使えるようにしておく予定ですので、 データの互換性が気になる場合には、これを利用してください。

Copyright (c) 2003-2007 Kahua Project Contact | About Us