一方SuperSQLを使えば、同じページをプログラミングなしに次の4行で生成できます。
FOREACH r.id
GENERATE HTML [r.name ! [c.name ! [t.name, [h.name, h.year]!]!]!]!
FROM region r, country c, type t, heritage h, belong b
WHERE c.region=r.id and b.country=c.id and b.heritage=h.id and h.type=t.id;
デモページでは、国名や遺産名をクリックすると、それぞれの国、遺産の詳細ページへのリンクとなっています。このリンクを生成するためには2行目のGENERATE句にlink関数を2つ書き加えて以下のようにすればokです。
GENERATE HTML [r.name ! [link(c.name, ‘country.ssql’, c.id) !
[t.name, [link(h.name, ‘heritage.ssql’, h.id), h.year]!]!]!]!
プログラマはこれだけ書いて、後はWebデザイナに任せれば、色やフォントなどのデザインが決まって出来上がり!もうプログラミングは必要ない?
世界遺産の例では12種類、計1284ページのWebサイトを作るのに、画面の種類ごとに全部で12個のSuperSQL質問文と、CSSスタイルシートを一つ使っています。
もうちょっと詳しく見てゆきましょう。SuperSQLはデータベースからの検索と出力媒体の生成を同時に行うデータベース出版・プレゼンテーション言語なのですが、出版の際にはレイアウトを、角カッコのペアで表すグルーピングと、連結方向(横、縦、奥行)の指定で定義します。2次元なら横結合をカンマ (,)、縦結合を感嘆符 (!) で表します。ここでグルーピングだけに着目すると、たとえば国名だけならば [国名] の一通りしかありませんが、国名、遺産名の2項目だと、
[国名, 遺産名] [国名, [遺産名]] [[国名], 遺産名] [国名], [遺産名]
の4通りのバリエーションが可能です。右端の例では、国名のリストと遺産名のリストを並べて表示しますが、どの遺産がどの国に属するかはわからなくなります。国名、種別、遺産名のように3項目ならば22通り、4項目なら146通り、5項目で1,082通り、6項目だと計算上は8,609通りにもなります。さらに結合方向の指定も加わるので極めて多くのレイアウトの指定ができることが分かります。SuperSQLではこれらの違いの表現はカッコのつけ方と結合子だけで制御するので色々と試行錯誤もできますが、Javaなどのプログラミングでこれらを表現し分けたり、表現を変更したりするには大きな手間がかかります。
遠山研究室ではSuperSQLの出力媒体としてWeb (HTML) ばかりでなく、時間軸を加えて動画を生成したり、Unityを媒体として3次元VRを生成することなどにもチャレンジしています。