FrontPage | changes | index | create | search | preferences

HierarchicalWikiPage

Last-Modified: Mon Jun 12 11:18 2006; Revision: 1.149
edit | copy | diff | history | raw
  1. HierarchicalWikiPage とは?
  2. HierarchicalWikiPage の参照のし方
    1. 完全な PathPageName を使用する方法
    2. BasePathPageName を使用する方法
    3. 不完全な PathPageName を使用する方法
    4. 複数の参照先がある場合
  3. HierarchicalWikiPage の作り方
    1. 中間の階層のページは不要
    2. DanglingLink からのページ生成
  4. 子ページの一覧の生成
  5. 他の WikiEngine との比較
  6. 関連サイト
    1. Wikiと名前空間
  7. 関連情報
  8. コメント

階層化された ?WikiName を持つ ?WikiPage

HierarchicalWikiPage とは?

WiKicker において ?PathPageName を持つ ?WikiPage の事。 例えば、このページは

 WiKicker
  |
  +- HierarchicalWikiPage

という「WiKicker」という階層の下に階層化されたページである。 ページを階層化する事で、

  • ページを分類/グループ化する
  • ページ間の関係性を明確にする

事ができる。

HierarchicalWikiPage の参照のし方

完全な ?PathPageName を使用する方法

そのページの完全な ?PathPageName を使用する事で参照(リンク)する事ができる。 例えばこのページは

という形で参照できる。

?BasePathPageName を使用する方法

HierarchicalWikiPageはページを整理するのに便利だが、ページ名が長くなるので参照(リンク)するのが不便になる。 またリンクしたいページの階層を探すのも面倒。

WiKickerでは上位の階層名を省略した?PageNameでも参照できるようになっている。

そのページの ?PathPageName の最後の名前('/'で区切られた各部分のうち一番右側)の名前だけでも参照する事ができる。 例えばこのページは

という形で参照できる。

ただしその名前の(階層化されていない)ページが存在する場合は、そちらへの参照となる。 その場合は明示的に完全な ?PathPageName (あるいは次に示すような不完全な ?PathPageName)で参照する必要がある。

不完全な ?PathPageName を使用する方法

そのページの '/' で区切られた各部分の一部を用いて、参照する事もできる。

 WiKicker
  |
  +- HierarchicalWikiPage
      |
      + SampleHierarchicalWikiPage

例えば WiKicker/HierarchicalWikiPage/SampleHierarchicalWikiPage ページは

という形で参照できる。この時参照で指定する?PageNameの一番右側の要素は、参照したい?WikiPage?PageNameの一番右側の要素と一致してる必要がある(この例で WiKicker/HierarchicalWikiPage としても期待するページを参照できない)。

また先に説明した

でも参照する事ができる。 

複数の参照先がある場合

指定した?PageName (?PathPageName)で参照できるページが複数ある場合はその両方がリンクになる。例えば

 WiKicker
  |
  +- HierarchicalWikiPage
      |
      +- SamplePath1
      |   |
      |   +- SampleHwPage
      |
      +- SamplePath2
          |
          +- SampleHwPage

という構成の時に、SampleHwPage を参照すると

  • SampleHwPage[1][2]

のようになる。

どちらかを明示的に指定したい場合は、より明示的な名前で参照する必要がある。

HierarchicalWikiPage の作り方

通常の ?WikiPage と同様に作成できる。作成の際に完全な?PathPageNameを指定する。

中間の階層のページは不要

例えば A/B/C というページを作成する場合に、(ディレクトリやファイルと違って)事前に A や A/B がある必要はない。

?DanglingLink からのページ生成

WiKicker ではページの参照先の決定には、コンテキスト(現在見ているページ)を利用しない。そのため、?DanglingLink からページを生成した場合は、指定した?PageNameの通りの?WikiPageが作られる。

例えば映画のページを編集して、[[新しい映画名]] と書くと ?DanglingLink になる。このリンクを辿ってページを編集し保存すると 映画/新しい映画 というページではなく、新しい映画 というページが作成される。

HierarchicalWikiPage としたい場合は、?DanglingLink を作る段階で完全な?PathPageNameを指定する必要がある(改善したいところだが妥当なルールがまだ見つからず)。

子ページの一覧の生成

?WikiPage の中に [[index:child]] と記述すると、そのページの直下の階層のページの一覧をリスト形式で表示させる事ができる。

例: → WiKicker ページで使用している (ソース)

他の WikiEngine との比較

WikiEngine区切参照
WiKicker/?PageNameが完全一致すれば、そのページへの参照。そうでなければ、最下層の要素が一致し、残りの部分が部分一致するページへの参照。
Tiki/[[./PageName]]による子階層指定、[[../PageName]]による兄弟指定が可能 → Tiki:WikiNameの名前空間
?AsWiki/(Tikiと同じ)
PukiWiki/1.3より、./PageName, ../PageName 形式の指定が可能に→ PukiWiki/仮想ディレクトリ
SuikaWiki//
WiLiKi:なし
?Hikiなしなし
?YukiWikiなしなし

関連サイト

関連情報

コメント

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 (新規)

でもリンクできるようにしてみました。