<html xmlns="http://www.w3.org/1999/xhtml" a0:Name="SuikaWiki" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:Version="0.9"><head></head><body><p><a0:anchor-end a0:anchor="1">[1]</a0:anchor-end> <code class="perl">Yuki::YukiWikiDBNS</code>
は、 <code class="perl">Yuki::YukiWikiDB2</code>
を拡張 (改悪)
して無理矢理<a0:anchor>名前空間</a0:anchor>に対応させたものです。
その名に反して、 <a0:anchor>YukiWiki</a0:anchor>
とは関係ありません。</p><p><a0:anchor-end a0:anchor="2">[2]</a0:anchor-end> ここで名前空間とは、
key の名前に応じてかってに
directory を作ってその中に key
の file を突っ込む仕組みです。
<a0:anchor>WikiName</a0:anchor> における名前空間に対応して木構造が出来るようになっています。
もっとも、 WikiName に名前空間があるかないかと
WikiDB の木構造は SuikaWiki
の実装的には無関係です。
WikiName の名前空間を使うのに
YukiWikiDBNS を使わないといけないわけではありません。
逆に YukiWikiDBNS を使うからといって
WikiName の名前空間を使う必要もありません。
(もっとも、 WikiName 名前空間なしで
SuikaWiki が動くかは怪しいです。)</p><p><a0:anchor-end a0:anchor="3">[3]</a0:anchor-end> key 名に <code class="perl">//</code>
が含まれていると、これを名前空間区切子とみなします。
これが directory 区切りに置換えられます。
(今の実装では hardcode 
されているので、この区切子をかえることは出来ません。)</p><p>例えば <samp>a//b</samp> という key
は、 <samp>a</samp> の directory
のしたの <samp>b</samp> という file
に格納されます。
実際には file の名前は encode
された上に接尾辞がつきますから、
<samp class="file">62.ns/63.txt</samp>
になります。
このうち <samp class="file">.txt</samp>
の部分は変更可能ですが、
<samp class="file">.ns</samp> の部分は 
hardcode されていてかえることが出来ません。<ul><li><a0:anchor-end a0:anchor="4">[4]</a0:anchor-end> 今の実装では、空になった directory を消しません。これは改善するべき点でしょう。</li><li><a0:anchor-end a0:anchor="5">[5]</a0:anchor-end> 部分 directory を別の DB として運用することもできると便利なこともあるかもしれませんが、今のところは実質的に出来ません。まずは lock file の問題。今の実装では任意の場所に作れませんから。次に、 <a0:anchor>Yuki::YukiWikiDBMeta</a0:anchor> として使う場合。この場合はメタ情報が根 directory に収納されるので、部分 directory DB からは access できません。最後に、DB とは別次元の問題ですが、 <a0:anchor>SuikaWiki/0.9</a0:anchor> でのリンク先の WikiName 指定方法で部分 DB を運用すると不便です。</li><li><a0:anchor-end a0:anchor="6">[6]</a0:anchor-end> 名前に <code>////</code> のような部分を含むとあまり嬉しくありません。 (<code class="file">.</code> で始まる directory や file が出来たりしますし)。今の実装ではそういうのはデータベースに与える前に正規化することになってるのでチェックしてませんが、これはちょっと SuikaWiki の今の WikiName の名前空間実装にべったりしすぎかもしれません。</li></ul></p><p><a0:anchor-end a0:anchor="7">[7]</a0:anchor-end>
と、ここに書いてあるのは、 SuikaWiki 2 版の <code class="perl">Yuki::YukiWikiDBNS</code> の実装の話です。
SuikaWiki 3.0 では、 <code class="perl"><a0:anchor>SuikaWiki::DB::FileSystem::YukiWikiDBNS</a0:anchor></code> を <a0:anchor>WikiDB</a0:anchor> 界面の wrapper としていて、間接的に access しているので、表面的には幾つかの問題 (名前空間区切子が固定であるとか) は解決されています。
もっとも、 SuikaWiki 2 の場当たり的な YukiWikiDBNS の code を適当に包んでいるだけの現状の code は綺麗ではないので、いずれ書き直すつもりではいます。
(<a0:anchor>名無しさん</a0:anchor> <a0:weak>2004-03-19 11:56:10 +00:00</a0:weak>)</p></body></html>