ボルボックス


すべてをすばやくムダなく
volvox

第09話:CMSの基本機能を描いてみる (文書変換とパイプライン)

CMSの基本ブロックを描くとしたら、こんな形になるのかな?
SRC > TRS > DST
入力(SRC )、変換(TRS )、出力(DST )
これは文書変換の、内容(テキスト)→体裁(スタイル)→結果(リザルト)、に相当するね。

 

たとえばテキストにスタイルを適用して、結果をHTMLファイルとして生成するときは:

例:

a.xml > t.xsl > a.htm ... テキストにスタイルを適用し、ファイルに出力
ファイルの生成しかできないの? ブラウザ画面への表示とかは?

 

出力を汎用にするため、最後の出力を述語で記述する:
SRC > TRS > set(DOC)
SRC > TRS > mon()
ファイルへの出力(set )、第1項はファイル名(DOC )
ブラウザ画面への出力(mon )

例:

a.xml > t.xsl > set(a.htm) ... テキストにスタイルを適用し、ファイルに出力
a.xml > t.xsl > mon() ... テキストにスタイルを適用し、ブラウザ画面に表示
これなら静的サイトも動的サイトも描けるね。たしかに静的/動的の違いは、出力の違いだし。

 

出力だけでなく、入力と変換も述語で記述する(汎用にする)。これでフォーム入力やメール送信、データベース操作などもあらわすことができる:
get(DOC) > use(DOC) > set(DOC)
dbm(SQL) > use(DOC) > mon()
frm() > use(DOC) > msg()
ファイルからの入力(get )、第1項はファイル名(DOC )
スタイルシートの適用(use )、第1項はファイル名(DOC )
データベースからの入力(dbm )、第1項は操作命令(SQL )
フォームからの入力(frm )
メールでの送信(msg )

例:

get(a.xml) > use(t.xsl) > set(a.htm) ... テキストにスタイルを適用し、ファイルに出力
dbm(select * from a_tab) > use(m.xsl) > mon() ... データベースからの出力にスタイルを適用し、ブラウザ画面に表示
frm() > use(t.xsl) > msg() ... フォームに入力されたテキストを変換し、メールで送信
ファイルの生成(静的)、データベースとの連携(動的)、メールフォーム、……

 

さらに変換はいくつでも連結できるようにする。それと最初の出力には結合のルールを、最後の出力には分配のルールを指定できるようにする:
SRC + SRC + ... > TRS > TRS > ... > DST / DST / ...
結合の規則(+ )……入力を足し合わせる
分配の規則(/ )……出力を個別に分ける
複合操作が記述できるね。ファイルの内容とデータベースの内容を合わせて入力したり、変換結果にさらに修正をくわえたり、結果をファイルとして生成すると同時にブラウザ画面に表示したり。

 

これに制御、つまりブロックどうしをつなぐ接着剤をくわえれば:

例:

if CND
then
  get(DOC) > use(DOC) > set(DOC) / mon()
  get(DOC) + dbm(SQL) > use(DOC) > mon()
else
  get(DOC) + frm() > use(DOC) > set(DOC) / msg()
これってパイプラインを使った、それなりに汎用のアプリケーションだよね。[※1][※2]
それなり? 汎用?
すくなくともクライアントサーバのアプリケーション層は、この形式で記述できる。メールフォームとかスケジュール管理とか掲示板とかブログ管理とか会員制サイトとか……つまり典型的なウェブ・アプリケーションのフローということだけれど。[※3][※4]

 

そうなの? CMS専用の基本ブロックだったはずなのに。
べつにいいんじゃないかなあ……典型的なウェブ・アプリケーションはなんらかのコンテンツ管理システムなんだし、これでシューティング・ゲームがつくれるわけでもないし。
※1
パイプライン(パイプ)……前のプログラムの出力が、次のプログラムの入力になる処理モデル。
※2
ツール「ボルボックス」の基礎は、このパイプライン・モデルです。パイプラインの記述(および名前空間の利用)にはXMLを、制御(および変数や演算)の推奨言語にはXSLを採用しています。なおボルボックス本体はXMLパイプラインの解釈器でしかなく、プログラミングは任意のスタイルシートの適用による、という構造になっています。
※3
クライアントサーバ・モデル……現在の主流は、プレゼンテーション層(ユーザ・インタフェース)/アプリケーション層(フロー)/データ層(データベース)の3層からなるモデルです。
※4
ツール「ボルボックス」は、さまざまなウェブ・アプリケーションを開発するための、文書管理指向のフレームワークとなっています。