Obsidian

Obsidian - Sharpen your thinking是一款很强大的笔记软件。 它的 强大 之一就在于有着丰富的第三方插件系统

本文要介绍的是 Obsidian 的一个重量级插件,名为 Dataview

GitHub - blacksmithgu/obsidian-dataview: A high-performance data index and query language over Markdown files, for https://obsidian.md/.

你可以通过 Obsidian 自带的社区插件市场中安装。

Dataview

消歧义 需要注意的一个是对于前端开发者而言,你可能认为的 Dataview 是 DataView - JavaScript | MDN。这和 Obsidian-dataview 无关,本文为了简洁,下文中所说的 dataview 都是指 obsidian-dataview

Dataview 是一个用来索引和查询你的 vault 中的 md 文件的插件。它提供了两种强大的语法支持,一种称为 DQL (Dataview Query Language),是一种类似与 SQL 的语言。除此之外还支持 JavaScript 语法。

DQL

DQL 四种类型

  • Table
  • List
  • Task
  • Calendar

分别生成不同的片段 一个最简单的DQL应当如下

1
2
3
4
```dataview
[Table/List/Task/Calendar] 
from ["path"/"#tag"]
where [expression]

除此之外还包括 sort 用于排序, group by 用于分组。 例如我要做一张表格,用来筛选我的电影目录中没有看过的电影,按照创建时间升序

我的目录是这样的:

1
2
3
4
movies
	movie1.md
	movie2.md
	...

那么可以这样写

1
2
3
4
5
```dataview
table
from "movies"
where !file.watched
sort file.ctime asc

JS

Dataview 实际上实现了如下的一个 API Overview - Dataview

1
2
```dataviewjs
dv.table([], ...) 

具体的接口函数,可以查询 Codeblock Reference - Dataview 这里列举几个常用的

  • dv.el(element, text) 用来渲染一个标签,例如
    • dv.el("span", "some text")就会被渲染为一个span
    • 还可以使用简洁的方式 dv.span("some text")
  • dv.pages(source)用来引入文件

使用技巧

使用 Dataviewjs 进行网络请求

dataviewjs 是可以进行异步 IO 和网络请求的。

1
2
3
4
5
6
```dataviewjs
fetch("example.com").then(
	(data) => {
		dv.span(data.text)
	}
)

调用 Obsidian API 和其他插件

Dataviewjs 环境中可以调用其他其他插件,实现其他功能。 参考 HTML elements - Developer Documentation 调用 API 例如渲染一个progress:

1
2
3
4
5
6
7
8
9
```dataviewjs
this.container.createEl(
	'progress', {
		attr: {
			max: 100,
			value: 10
		}
	}
)

this.container获取到的是当前这个代码块的对象,类型是一个 HTMLDOM 对它可以进行 Obsidian 的 API createEl createEl 需要注意的是第二个参数接受一个对象, 这个对象有三个属性: