HierarchicalWikiPage の参照のし方
?BasePathPageName を使用する方法
HierarchicalWikiPageはページを整理するのに便利だが、ページ名が長くなるので参照(リンク)するのが不便になる。 またリンクしたいページの階層を探すのも面倒。
WiKickerでは上位の階層名を省略した?PageNameでも参照できるようになっている。
そのページの ?PathPageName の最後の名前('/'で区切られた各部分のうち一番右側)の名前だけでも参照する事ができる。 例えばこのページは
という形で参照できる。
ただしその名前の(階層化されていない)ページが存在する場合は、そちらへの参照となる。 その場合は明示的に完全な ?PathPageName (あるいは次に示すような不完全な ?PathPageName)で参照する必要がある。
不完全な ?PathPageName を使用する方法
そのページの '/' で区切られた各部分の一部を用いて、参照する事もできる。
WiKicker
|
+- HierarchicalWikiPage
|
+ SampleHierarchicalWikiPage
例えば WiKicker/HierarchicalWikiPage/SampleHierarchicalWikiPage ページは
という形で参照できる。この時参照で指定する?PageNameの一番右側の要素は、参照したい?WikiPageの?PageNameの一番右側の要素と一致してる必要がある(この例で WiKicker/HierarchicalWikiPage としても期待するページを参照できない)。
また先に説明した
- SampleHierarchicalWikiPage (?BasePathPageNameによる指定)
- WiKicker/HierarchicalWikiPage/SampleHierarchicalWikiPage (完全な ?PathPageName による指定)
でも参照する事ができる。
HierarchicalWikiPage の作り方
通常の ?WikiPage と同様に作成できる。作成の際に完全な?PathPageNameを指定する。
中間の階層のページは不要
例えば A/B/C というページを作成する場合に、(ディレクトリやファイルと違って)事前に A や A/B がある必要はない。
?DanglingLink からのページ生成
WiKicker ではページの参照先の決定には、コンテキスト(現在見ているページ)を利用しない。そのため、?DanglingLink からページを生成した場合は、指定した?PageNameの通りの?WikiPageが作られる。
例えば映画のページを編集して、[[新しい映画名]] と書くと ?DanglingLink になる。このリンクを辿ってページを編集し保存すると 映画/新しい映画名 というページではなく、新しい映画名 というページが作成される。
HierarchicalWikiPage としたい場合は、?DanglingLink を作る段階で完全な?PathPageNameを指定する必要がある(改善したいところだが妥当なルールがまだ見つからず)。
他の WikiEngine との比較
関連サイト
Wikiと名前空間
- ASDP:WikiNameAndNameSpace
- WikiLikeDev - 名前空間
- WikiNameで階層をつくることについて
- Wikiと階層構造
- YASWiki UNDER CONSTRUCTION - Wikiと階層構造
関連情報
- ?WikiPage
- WiKicker - Naneyが開発しているPerlで実装されているWikiEngine。Wi...
- PukiWiki/仮想ディレクトリ - / を含むPageNameによるWikiPageの階層
- KoringoWiki - Wikiのネタ
コメント
2002/07/28 16:27 ?Naney: やまだ君は既に気がついているようですが、ページ名に/を含ませるとそれを区切り文字としてパスのように階層化できるようにしました。 しかしこれだと、リンクする際面倒なので full qualified ではない場合は、自動的に検索してリンクするようにしました。 例えば ?WikiPage 映画/洋画/海辺の家 へは 海辺の家だけでリンクになります。洋画/海辺の家 でも OK(suffix がマッチすれば)。
映画
|
+- 洋画
|
+- 海辺の家
2002/07/28 19:31 やまだ: 「自動的に検索してリンクする」ということですがこれはスタティックリンクなの(笑)? つまりページをコミットするとリンクされるの?
2002/07/28 20:49 ?Naney: ダイナミックリンクですよん。 ページを表示する時に名前解決。 ということで上記の例で、'映画/洋画/海辺の家'を指している [[海辺の家]] はもし '海辺の家' という(階層化されていない)ページが新規作成されると、優先してそちらにリンクされる事になります。
2002/07/28 21:05 やまだ: む。それは危険な香りがしますね(笑)。 では質問。 サフィックスがマッチする複数のページが存在する場合、どのページが選ばれるのでしょう? 完全一致が最優先で、それ以外の場合はどうなるのかね? それから、絶対パスは使えないの? たとえば `/映画/洋画/海辺の家' てなかんじ。 それともひとつ、スラッシュをページ名に使いたい場合はどうするの(笑)?
2002/07/28 21:27 ?Naney: 完全一致があれば、ソレ。 完全一致以外で複数マッチした場合は、full qualified name で全て列挙されます。 当然あり得るので対応してあります。
絶対パス形式と相対パス形式は両方考えたのですが、使い分けが今いち見えなくて。 普通の人には、先頭の / はあまり意味ないかなぁと。 キレイなルールを考えて。
スラッシュをページ名に使いたい場合も考えたんですが...とりあえず / があってもページは作れるし、リンクも張れるので問題ないかなと。
// とすればエスケープというのも考えたんですが、将来別の semantics 持たせるかもしれないかなと。
2002/07/28 22:30 やまだ: なるほど! リンク先が二股以上になるのねん。じゃあこれはどうなる? ?てすと うむ。
2002/07/28 22:49 ?Naney: バグってなければ、[[A][B]] (?ExtendedBracketName形式)の機能は健在にしております。二股以上になる場合は B の名前はこの位置しかないかなぁと。
2002/07/28 22:51 やまだ: 現在のダイナミックリンクメカニズムが?ダイナミックスコープなのが気持ち悪いなあ。?クロージャを使えるようにするというのはどうだろう(本気度20%)?
2002/07/28 23:30 ?Naney: ダイナミックリンクのスコープに関しては...。うーん、とりあえず実験的に実装して使いながら様子を見て修正していくって感じかなぁ。使ってみないとわからない点もあるしね。幸いまだページ数も利用者も少ないので途中で変更しても対応できる範囲だし。?クロージャはちょっとマニア向けすぎない? (^^ 実装も面倒です(苦笑)
Sun May 18 16:25 2003 ?桶: [[映画/海辺の家]]のような不完全な記述とかできるのかな。
Sun May 18 17:38 2003 ?Naney: 現在の実装では、真中が省略された参照はサポートしてません(えーと、そういうのを考えていなかっというのが本当のところ)。[[映画/海辺の家]] がリンクになるのは、
- [[映画/海辺の家]]
- [[hoge/映画/海辺の家]]
- [[hoge/hoge/映画/海辺の家]]
というのがある場合だけです。実際のケースで中抜けパターンも検索できた方が便利かな?
Mon May 19 19:51 2003 ?桶: 僕のWikiではパラグラフの移動を考慮しなくてはならないため、冗長性を持たせている部分もあります。 でも、例えばPerl/function/ArrayとRuby/Class/Arrayを比較する時に、 Perl/ArrayやRuby/Arrayと書けた方が嬉しいかなと思います。違いの本質がわかりやすいですし。 (Perlはよく知らないので当てずっぽデス)
極端な話だと、Class/Ruby/Arrayでも良いとか、「青くて丸い車」でも良いとか色々考えられるのですが。 どこかのWikiで / のかわりに「の」を使うのはどうかという意見もありましたね。
Wed May 21 00:01 2003 ?Naney: 途中が抜けていてもマッチするというのは、なかなか便利そう。今度まとまった時間ができたときに実装してみようかと思います。WiKicker では
- 最後のパス要素は一致している事
- 途中抜けても良いが順序は維持している事
あたりを、マッチする条件としようと思います。課題としては組み合わせが増えるのでマッチング処理時間が長くなるのと、複数マッチした時の優先順位。
それから ?DanglingLinkだった場合、そこからページを新規作成すると違う階層(or 階層無し)にページができてしまうという問題もあるんですよね。?DanglingLink から新規作成したページは必要ならあとで適宜 HierarchicalWikiPage に移動するしかないのかもしれません。
桶さんの Class/Ruby/Array というはさすがに、階層という意味とは外れますね。必要ならば、Class&Ruby&Array など別の表記を導入した方がいいと思います。もっともあまり表記を増やすと Wiki としてのよき simple さを失なう恐れもあるし、難しいところ。
Sat May 24 10:17 2003 ?Naney: A/B/C/D というページに、
- A/B/C/D
- B/C/D
- C/D
- D
- A/D (新規)
- B/D (新規)
- A/B/D (新規)
- A/C/D (新規)
- B/D (新規)
でもリンクできるようにしてみました。