SuikaWiki//欲しい機能//1//8

SuikaWiki//欲しい機能//1//8

[20] また、 WikiPage database も (YukiWiki でもやや実現されていますが) 固定とせず (hard-coding せず) に外部に完全に追い出して、従来の plain-text database on file-system や外部 database 以外に、 CVS database や HTTP などからの入(出)力も実装出来れば良いでしょう。

[23] >>20 これって今話題の WikiFarm の小さい版みたいなものかなあ?

[24] >>23 そうともいえるし違うともいえる。

[1] WikiDatabase 物理層の実装の問題について。

WikiDatabase のモデル

   (WikiDatabase への access)
    ↓↑                 ↓↑
+------------+           ↓↑
| 形式差吸収 |           ↓↑
| モジュール |           ↓↑
+------------+           ↓↑
    ↓↑WikiDatabase 界面↓↑
+--------+------------------------+
| 抽象層 | WikiPage, WikiNamespace|
+--(仮称)+------------------------+
           ↓↑ 物理層界面
+--------+------------------------+
| 物理層 | 実際のデータ           |
|        | (ディスク上のファイル, |
|        |  遠隔データ, etc.)     |
+--------+------------------------+

形式差吸収モジュールについては ..//6 参照。

[2] 物理層実装についての課題:

[6] 物理層の部分のモデル:

物理 DB(群) 論理 DB
+------+   +-------+
| DB 1 |<==>項目 1 |
+------+   | - - - |
+------+  =>項目 2 |
| DB 2 |<= | - - - |
+------+  =>項目 3 |
   :       : - - - :

こんな感じでいくのはどうでしょう?

論理 DB を実現する module を SuikaWiki::DB とすると、その実現値を生成する時に物理 DB 群との関係を設定します。 (suikawiki-config.ph で、こんな感じで書く:

$db = new SuikaWiki::DB;
$db->regist_prop (page => $page_db);
$db->regist_prop (last_modified => $meta_db);
$db->regist_prop (frozen => $meta_db);

ここで、 $page_db$meta_db は物理 DB の実現値。)

データを取り出すのには、 $db->get ($record_name => 'page')。 これで page DB から record $record_name が返る。

[8] SuikaWiki::DB の界面(案):

new
新しい実現値の生成
set_prop ($propname, $db)
新しい特性 (物理 DB) の追加
exist_prop ($propname)
ある特性を持っているか?
delete_prop ($propname)
特性の論理 DB からの削除
get ($propname, $recordname)
値の取得
set ($propname, $recordname, $value)
値の設定
exist ($propname, $recordname)
値が存在するか?
delete ($propname, $recordname)
値の削除
keys ($propname)
値一覧の取得

物理 DB の界面:

new (%option)
実現値の生成
get ($propname, $recordname)
値の取得
set ($propname, $recordname, $value)
値の設定
exist ($propname, $recordname)
値が存在するか?
delete ($propname, $recordname)
値の削除
keys ($propname)
値一覧の取得

界面がほぼ共通だから、 論理 DB を物理 DB として扱うこともできるわけだ。 (あんまり意味はないけど。)

[25] 結局どう実装したかというと: SuikaWiki3//WikiDB