Clockworksのベース[taro:Memo]

[Written by たろう]
現行のClockworksではなく、次期Clockworksの整理
イメージとしては「WikiベースのWebアプリケーションフレームワーク」ってところ

○Model
・基本的なデータ
 ・Book(主キー)
 ・Word(主キー)
 ・Text
 ・ModifyDate
 ・Date
・Wordの履歴データ
 ・ModifyDate(主キー)
 ・Book(主キー)
 ・Word(主キー)
 ・Text
履歴データは更新できない

TextにはLineTagと呼ばれるタグを記述できる。
行頭から「タグ名:文字列(改行)」

高速化のために以下のCacheを持つ(DBをDBMで作る場合)
・LineTagCache(LineTagをKey:そのTagを含むWord,tagのある行番号,文字列のセット)
・SearchCache(検索単語をKey:その単語を含むWordList)
・KeyIndexCache(WordList:Wordでソート)
・RecentCache(WordList:Dateでソート)

データ登録は登録時に渡す値の組み合わせによって新規作成・更新・削除を自動で判断し処理を行う
・まだデータが存在していない場合:新規作成
 Wordが指定されていない場合は書き込み時間をWordにする)

・ModifyDateがない場合:追記処理
・ModifyDateがある場合
 データの値と同じ:更新処理
 データの値と違う:更新の衝突発生⇒エラー

・TextがなくModifyDateがデータの値と同じ場合:削除

・DateFlgがOffの場合:Dateは更新しない(ModifyDateは常に更新)
・DateFlgがOnの場合:Dateを更新(ModifyDateと同じ値)

○Controller
「index.cgi/Book/Word」のURLにGETアクセスすると、BookとWordから紐づくTextを表示する
「index.cgi/Book/Word」のURLにPOSTアクセスすると、BookとWordから紐づくTextを新規作成・更新・削除する

「ベースURI/Book/Word/Param1/Param2…」のように/で区切って複数のパラメータを指定することも可能
パラメータについては後述

URLアクセスがあると、適切な処理をModelに対して行う
Modelからエラー(値不整合等)が返ってくれはエラー表示
Modelから正常が返れば、それをViewに渡す

「feed.cgi/Book/Word」のURLにGETアクセスすると、BookとWordから紐づくTextを元にATOM出力する
「ical.cgi/Book/YYYY-MM」のURLにGETアクセスすると、YYYY-MMのiCalendar形式で出力する(データはWord=YYYY-MM,YYYY-MM-01..YYYY-MM-31のText)

○View
Textを表示する際、Textに記述されているS式を評価して表示する
HTML+CSSの出力もS式評価によって変換する必要がある
S式評価の際、パラメータの値も利用できる

また、一部のS式は別の記法(簡易記法)で記述することも可能。
厳密には、簡易記法で記述したテキストをS式テキストに変換しTextに保存する
また、Textの中身を簡易記法に変換して出力することも可能。
ClockworksのWiki記法はこの簡易記法のルールで対応する

ページの構成は以下のとおり

テンプレートヘッダー部分(HTMLの先頭から<body>タグまでの部分)
 Word=Headerの内容表示
  本体
 Word=Footerの内容表示
テンプレートフッター部分(任意のテキスト部分から</body>タグまでの部分)

テンプレートも変数が指定可能
テンプレート内の変数の値をS式で指定することも可能(ページタイトルを差し替える等)

○プラグイン
プラグインは以下の定義を行う
・S式命令の定義
・「ベースURI/Book/Word」のURLにGETアクセスしたときの挙動
・「ベースURI/Book/Word」のURLにPOSTアクセスしたときの挙動

S式命令はすべてプラグインなので、プラグインを一切入れていないとS式評価は行われない(Textをそのまま出すだけ)

初期状態はデータがないので、補助として指定したWordにPOSTアクセスするFORMを記述したHTMLを用意
tags:
[2007-09-27 01:07:31]


Comment


(このNoteは書き込みから約半年以上経過したためコメントFormを非表示しています)

Zenback