Logseqのアドバンスド・クエリ
このページは今のところ、「どういう仕組みになってるんだ?」というのを探るための探り探りのページとなっている。2022/6/19
Advanced Queryの練習
code:clj
{:title "クエリの練習"
:query [:find ?t
:where
?b :block/marker ?m
(contains? #{"DONE"} ?m)
?b :block/page ?p
?p :block/journal? false
?p :block/original-name ?t]
:view (fn result [:div
(for title result
[:div :a{:href (str "#/page/" title)} title])])}
これは「完了したタスクを含む日誌以外のページのタイトル」の照会になる
表示例
https://gyazo.com/af3ce3d68ea3f9089f9a7155d0003149
問題点
この方法では日誌ページへのリンクを作ることができなかった。
今回やった方法
[:a{:href (str "#/page/" title)} title]でa要素を作る
たぶんもっと良い方法
(clojure.string/capitalize ...)という関数
この関数については何も分からない(これから調べる)
(なので今回の練習では日誌ページを表示させなくした)
アドバンスド・クエリ
Logseqにおいて「日誌」は特別である
日誌ページはLogseqにおいて独特な機能をもっている
code:clj
{:title "今日のページを取得"
:query [:find (pull ?p *)
:in $ ?today
:where
?p :block/journal-day ?today]
:inputs :today
}
「日誌」は特別な「属性」を持っている
正確には、特別な属性の値がtrueである
日誌というページの特殊な属性は、Logseqのページ(ブロック)の:block/journal?がtrueであることによって表現されている。(?)
Logseqにおける「日誌」は単なる〈ページ名が日付であるページ〉ではない
アドバンスド・クエリの実例
タスクリストとテンプレート以外に書かれている未完了のタスクを照会する
code:clj
#+BEGIN_QUERY
{:title "その他のタスク"
:query [:find (pull ?b *)
:where
?p :block/name ?title
(not= ?title "タスクリスト")
(not= ?title "テンプレート")
?b :block/page ?p
(task ?b #{"LATER" "NOW" "WAITING"})]}
#+END_QUERY
(not= ...)をorとかand的なもので書けないのかな〜……と思っている。2022/6/19
使っている知識
?pという特殊なパターン変数
Logseqのschema.cljsにある属性の情報
:block/nameという属性
:block/pageという属性
(not= ...)というClojureの関数
Clojureにおけるセット(#{...})
Clojureにおけるリスト
Clojureにおけるベクター
Datalogのpullという関数