RIGHT:[[:t/データアクセス]] [[:t/活用法]]

データアクセスに一手間加えてデータを分かりやすく加工したい。

→ クライアント側でやること。Xがやるのはデータの提供のみ。加工や集計は、いらない。
APIがあればGoogleスプレッドシートや自作プラグインなどで集計できるので、それでいい。

----

#contents



**集計 [#c33f04c0]

データアクセスに集計を加えるには。



***データアクセスの一例 [#k315ac12]
+ ページセットを作る。
++ 「全ページ」から検索などで集合を縮小。
+ ページセット内のページ1つずつにセレクターを適用。要素セットが得られる。
+ 得られた多数の要素を要素自身の評価で同一視、集計、ソート。
++ 要素が行なうのはハッシュコード生成。その処理にパラメーターを与えて、同一ハッシュコードになる場合を増やしたり減らしたりできる。どんなパラメーターかは要素次第なので要素の具体的なクラスに依存することになる。
++ 得られたハッシュコードを使って集計。
++ ソートは要素が持つ評価関数で順序付け。
++ 型が揃っていないときはどうなるか？
+++ ソートできない。
+++ ハッシュコードに渡すパラメーターを型別にしなければならない。
+ セレクターを使った後にデータコンテキストの処理。
***例えば、日付の集計をするには [#s5acedd2]
APIを呼ぶプログラムコードが必要。検索機能やAPIなどで検索して、ページID（版ID）やページ名を得ておく。APIでデータアクセス。各ページの日付要素（日付記法を元にしたページ要素）を得て、コードでソートやグループ化する。
APIでページ要素を扱えればいい。集計まではサポートしない。

%%以下のような使い方はできない。%%
+ %%各ページに日付を書いておく。日付をページ作成時のテンプレートに入れておくなどして。%%
+ %%気になることを検索してページセットを作る。%%
+ %%得られたページそれぞれにセレクターを適用。日付の集合を得る。%%
+ %%日付で（それが書かれている）ページを分類。分類の粗さを1日／1ヵ月ごとにしたり、しきい値を複数設定して不規則な（任意の）期間ごとにまとめたり。%%
++ %%要素（日付要素）からページを得るには？%%
%%ページ→要素セットのときに要素→ページセットも作っておかないといけない。%%
%%ページ←→要素のマッピングはセレクター側でやるべき？%%
++ %%日付からハッシュコード取得。それをキーにしてDictionary作り。値側にはページ（かページのID）。%%
+ %%分類別に含まれるページ数を数えて、（日付の示す）期間×ページ数の一覧表やグラフを作る。%%
+ %%気になることが月別にどれだけあったかが分かる。%%
***例えば、検索結果の1日前を調べるには [#o66b0f26]
データアクセスで[[:t/1日前]]も実現したい。
例えば食事記録。体調が良くなった／悪くなったことを示すキーワードを検索してページセットを得る → セレクターで関連名に「1日前」を持つ''リンク''を抽出 → リンク先のページIDを得る（これを実現するには？） → ページIDからページを取得（この実現方法は？） → 得られたページにセレクターを適用して食品リストを抽出 → 1つのキーを持つDictionaryに集計 → Dictionaryをレンダリングできる要素に与える → 一覧表やグラフになる。

セレクターで年内の週数を示す要素（「第32週」など）を使って…体重が増えたことを示すキーワードを検索。得られたページセット内のページにセレクターを適用。得られた週数要素から得たハッシュコードをキーにして集計。集計結果のキー1つごと（分類1つごと）に対応する週数のセットを得て、それが書かれているページセットを得る。セレクターを使ってページセット内のページごとに含まれる食品リストを得る。ページセットごとに（ページごとではないのをどう実現するか？）、''リスト項目を''集計（同じ項目があればカウント+1）。できあがった週数ごと（ページセットごと）の集計結果をレンダリング可能な要素に与える。一覧表やグラフになる。

「第(\d+)週」はWiki上で定義できる要素。「タグ」と称して良い。
→ [[タグ]]



***例えば、「検索結果に含まれるページ」が持つタグを集計 [#ba53dfe6]
+ 検索してページセットを縮小
+ 各ページにセレクターを適用。タグ要素が得られる。
+ タグをそのまま集計。まとめる範囲指定などはしないで。
+ Dictionary/Listを扱える要素に与えるとレンダリングされる。
セレクターを省けばページの全情報が一覧化。どうなるかはレンダリング担当要素による。

***一般化すると… [#h745bd79]
+ Wiki内の全ページというページセットがある。
+ 検索などでページセットを縮小できる。
+ ページセット内の各ページにセレクターを適用して、要素を得る。1ページ→多数の要素。
+ 要素をハッシュコードで分類・集計。ハッシュコードの生成規則には注文を付けることができる。（コードで。つまりプラグイン内のプログラムに記述）
+ 集計結果を特定の要素に与えてレンダリング。利用者のための形式にする。
レンダリング要素のほうが呼び出し順は先。ここでデータコンテキスト型の指定があるので、以降の要素はその型に応えなければならない。

集計処理がプラグイン依存で専用のコードを必要とする。Wiki上では指示できない。でもプラグインを選ぶことはできるので、それでいい。[[:i/集計をする要素]]が必要？ページセット+集計要素+レンダリング要素？

-------------------------------------------------

フレームワークの拡張が不要なら、あとで。
