• 追加された行はこの色です。
  • 削除された行はこの色です。
RIGHT:&tag(プロトタイピング,更新中);

プロトタイピング03のメモ。

#contents

**now [#d11972d7]
X03.PageElements.Notations.Find
%%X03.PageElements.Notations.Table%%
…で検索結果を表形式で表示。

|~Rank|~Pagename|~Query1|~Query2|~Total score|
|~1|Target1|0.35pts.|0.25pts.|0.60pts.|
|~2|Target2|0.42pts.|0.10pts.|0.52pts.|

*** [#r6834e3a]
ElementはWikiTextを出力しないことにするのでTable不要。
(組み込み済みのWikiNotationなら使用可能。でも不自由なので意味薄)
検索記法でhtml出力。同時にTableと同等の表形式データも出力。
→ならTableを使ったほうがいい?
**作るモノと実装方法 [#h44b203b]
-フレームワークとページ
ASP.NETを使うならフレームワーク/Webアプリケーションは不要。

その他、[[ウィキエンジンX/ウォークスルー]]にあるものを。

-Notationからプラグイン呼び出し・HTML化する仕組み
つまりNotationが機能するように。
--リンク
リンク先と関連名を受ける。
--ページ埋め込み
--外部サイトの画像埋め込み(imgタグ化)
-プラグインの仕組み
Plugin/Usecase、Plugin/Notation
差し替え可能Usecaseと、NotationとそのプラグインAPI。
…をプラグインではなく組み込み済みクラスとして実装。呼び出しはリフレクションでプラグイン用呼び出し。プラグインの配置が違うだけ。
--%%WikiNotation (Notation)%%
%%プラグイン呼び出しの代替。%%
-検索
実体はNotationから呼ばれるプラグインだけどここではコントローラーとして。
Notation同士の比較でスコア算出。Notation別評価。
--検索/サブセットWiki
Wiki内に存在するページの集まり。
検索結果ページ内のプラグインに与えるページセットを変える。
-ページ Page、PageFactory
DB
**実装 [#j722bd6b]
[[http://x.pmint.name/>http://x.pmint.name/]]

WikiText→HTML変換まで。

WikiNotationはプラグイン定義のもの。正規表現で定義。

**WikiText→中間表現→Element [#b486234f]
 中間表現
 <j722bd6b>

Elementに変換後、正規表現の邪魔にならないように
ElementのインスタンスIDを置いておく。Elementコンストラクターには中間表現が渡る。

変換前にWikiText内の < > は置き換え。
+文字列置換 WikiText→中間表現
Notation定義ごとに置き換え。Notationの数だけ置き換え処理。
+WikiTextがすべて< >表現に置き換わる
+文字列置換 中間表現→Element
外側から。中間表現1つごとにElement生成。
内側にある中間表現はElementに渡す。それをどうするかはElementによる。→NoWiki記法ではそれ以上深い処理をしなくていい。

最後にPlainText変換。< >以外をオブジェクト化。< >が区切りになる。
**チェックリスト [#k642720b]
-同じNotationを含むネスト
 {{ ... {{{ ... {{ ... }} ... }}} ... }}
…を正しく処理できるか。3つのElementが生成されるか。
-交差
 {{ ... {{{ ... }} ... }}}
…を正しく処理できるか。優先順位(設定による)の高いほうだけが生成される。生成されるElementは1つ。
-NoWikiを正しく処理できるか。NoWikiの中で変換は行なわれていいがWikiTextに戻せるか。
-連結できるか。
-同じNotationのネスト
 {{ ... {{ ... }} ... }}
…を正しく処理できるか。2つのElementが生成されるか。
**スコアはNotationごと [#vb2ccccf]
Notationが科目、Notation集約であるページが学生。
科目ごとにスコア算出、検索クエリーによってどの科目を重視するか決まるので、それでページの順位を決められる。

スコアは100%〜0%、マイナス値は(特に決められないので)下限なし。

これでプラグイン側でのスコアの重みを自由にできる。
他のプラグインと重みを揃えなくていい。

----------

ページ順位の中では偏差値を使ってページをクラス分け。順位1つ違いでも差があるところは分かるように。→というのをあとで。 [[:t/あとで]]


**クエリー文字列では後方参照 [#p4369810]
クエリー文字列→ページ。ここでは後方参照のようなものでNotationパラメーターを指定。そうしないとフォームから入力できない。
クライアント側でフォームからの入力の前後にNotationを付加してサーバーに送るようにするなら話は別。


**Elemはクエリーから自分の欲しいデータを入手 [#ze7f388a]
Elementはクエリーから自分の解釈できる部分を読む。
クエリーは全てのElementから参照可能。内容は不変。→引数にする意味無し。グローバルオブジェクト。


**Element内部でWikiTextを使うことは可能 [#h3d57d0c]
管理者定義のテンプレート(WikiText)+プラグインの出力などで。
ただし、HTML変換してから出力。
→Elementからの出力にWikiTextは無い。


**1つのElementで1つの<form> [#t6503588]
form記法で複数の入力欄記法をくくっても入力しにくい。
意味ある単位でデータ入力・送信するものなので、1つのElementが1つのformを担当。