Dataview可以很方便的透過Obsidian的Metadata來蒐集筆記資訊,雖然Dataview的查詢語法不複雜,但輸出格式固定,需要較不同的輸出樣式時就必須透過稍複雜的Dataviewjs,以JavaScript來撰寫。Query All The Things (以下簡稱qatt) 外掛則嘗試填平簡單語法+自訂輸出格式之間的差距。
Qatt以類SQL語法當做查詢語言,以Handlebars當做輸出模板引擎,要活用Qatt就必須學習它的SQL語法與Handlebars模板語言。
1. 撰寫第一個qatt程式碼區塊
和Dataview一樣,qatt也是透過程式碼區塊來動態執行的,程式碼區塊的語言指定為==qatt==,以YAML語法提供query與template兩個欄位:
query: |
SELECT TOP 5 *, moment(stat->ctime)->format("YYYY-MM-DD") ctime
FROM obsidian_markdown_notes
WHERE 'obsidian' in tags
ORDER BY stat->ctime DESC
template: |
{{#each result}}
- {{ctime}} [[{{path}}\|{{basename}}]]
{{/each}}
執行結果:
- YAML語法裡的
|
指定關鍵欄位的內容是區塊 - 區塊內不要用 4 個空白開頭,以免被渲染成區塊
1.1. query重點
- select ... from ... order by ... 是標準的SQL語法
- obsidian_markdown_files 是Obsidian系統裡的所有筆記檔案
- SQL標準的 . 在Qatt裡要改用 ->
1.2. template重點
- 查詢後的結果用
{{#each result}}
到{{/each}}
裡的樣式輸出 - 輸出欄位用兩個大括號夾住,如:
{{basename}}
1.3. Another sample
query: |
SELECT TOP 10
basename, path, moment(stat->mtime).format() as LastModified
from obsidian_markdown_notes
where moment(stat->mtime)->isAfter(moment().startOf('month'))
template: |
| Name | Path | Last Modified |
| --- | --- | ---|
{{#each result}}
| {{basename}} | {{path}} | {{LastModified}} |
{{/each}}
2. 資料表
- 完整資料表:Data Tables | Obsidian - Query All The Things
- 範例:obsidian_markdown_notes,obsidian_markdown_files,dataview_pages,dataview_tasks,...
3. HTML輸出範例
3.1. 資料表:dataview_pages
postRenderFormat: html
query: |
SELECT top 5 tags, file->name name, file->path path, file->link->path link, created
FROM dataview_pages
WHERE 'obsidian' in tags and file->path not like '%template%'
ORDER BY file->ctime DESC
template: |
<table>
<tr><th>建檔日期</th><th>檔名</th><th>標籤</th></tr>
{{#each result}}
<tr><td>{{created}}</td><td> <a href="{{link}}" target="_blank" class="internal-link" >{{name}}</a> </td><td> {{tags}} </td></tr>
{{/each}}
</table>
3.2. 資料表: obsidian_markdown_notes
query: |
SELECT top 5 REPLACE(CAST(tags as varchar),',', ' ') tags, basename,
makeMarkdownLink(basename, path) AS mdLink,
REPLACE(path, ' ', '%20') path,
moment(stat->ctime).format("YYYY-MM-DD hh:mm") created
FROM obsidian_markdown_notes
WHERE 'obsidian' in tags and path not like '%template%'
ORDER BY stat->ctime DESC
template: |
| Created on | File name | Tags |
|--|--|--|
{{#each result}}
|{{created}}| [{{basename}}]({{path}}) | {{tags}}|
{{/each}}
[!WARNING]+ 注意!
資料表obsidian_markdown_notes與dataview_pages裡欄位不同,小心使用
4. 相關鏈接
- GitHub: sytone/obsidian-queryallthethings: Query all your data stored in Obsidian, this plugin allows SQL based queries against the data collections available in Obsidian and Dataview. Output can then be rendered by Handlebars
- 官方說明文件: Query All The Things | Obsidian - Query All The Things
- SQL引擎 GitHub: Home · AlaSQL/alasql Wiki
- 輸出模板Hndlebars說明: Introduction | Handlebars
5. 教學影片
##
您可能也會有興趣的類似文章
- Obs134|用Dataviewjs製作簡單的建檔統計圖-使用Charts外掛 (0則留言, 2023/08/13)
- Obs131|Obsidian使用Dataviewjs動態查詢的嘗試 (0則留言, 2023/05/27)
- Obsidian 1.0新手教學—打造個人知識管理利器,專屬的第二大腦 (2022年) (4則留言, 2022/10/22)
- Obs130|用Dataviewjs將Dataview表格產生成Markdown格式,並複製到剪貼簿的技巧 (2則留言, 2023/05/20)
- [Obs#12] Obsidian v0.8.4~v0.8.9的新增功能 (0則留言, 2020/09/06)
- [Obs#35] Buttons外掛開啟筆記自動化操作契機 (0則留言, 2021/04/23)
- [Obs#56] 快速新增靈感/閃念筆記(Fleeting Note)的3種方法 (0則留言, 2021/10/10)
- Obs126|Obsidian 2023/04 7個新外掛介紹與評析 (0則留言, 2023/04/29)
- [Obs#57] YAML區tags標籤自動補全的3種方法 (2則留言, 2021/10/23)
- [Obs#71] 新手適用的多功能模板外掛:From Template (0則留言, 2022/02/19)
- Obs124|跳,跳,跳乎伊勇!Obsidian用書籤和標籤快速在檔案間跳轉 (1則留言, 2023/04/23)
- [Obs#107] Obsidian全方位搜尋:OmniSearch外掛 (0則留言, 2022/11/20)
- [Obs#88] 綜合練習:快速設定的6種方法─使用8個Obsidian外掛 (0則留言, 2022/05/21)
- [Obs#26] Dataview外掛: 製作索引筆記利器;動態查詢筆記資料 (6則留言, 2021/02/19)
- [Obs#51] QuickAdd全攻略(2):腳本撰寫與巨集使用要點 (0則留言, 2021/09/18)