- Obsidian插件Dataview —— 安装与设置(一)
- Obsidian插件Dataview —— YAML简介(二)
- Obsidian插件Dataview —— 认识属性(三)
- Obsidian插件Dataview —— 数据查询(四)
- Obsidian插件Dataview —— DQL查询语言详解(五)
- Obsidian插件DataviewJS —— TypeScript速成(六)
- Obsidian插件Dataview —— 深入理解DataviewJS(七)
- Obsidian插件Dataview —— JavaScript API 快速入门(八)
- Obsidian插件Dataview —— DataArray接口介绍(九)
- Obsidian插件Dataview —— Dataviewjs JavaScript API 进阶用法(十)
- Obsidian插件Dataview —— Luxon库介绍(十一)
- Obsidian插件Dataview —— 实用案例讲解(初级篇)(十二)
- Obsidian插件Dataview —— 实用案例讲解(中级篇)(十三)
- Obsidian插件Dataview —— 实用案例讲解(高级篇)(十四)
- Obsidian插件Dataview —— 函数合集(十五)
目录
继上篇 YAML 简介后[[Obsidian插件Dataview —— YAML简介(二)]],本章介绍 Dataview 的数据查询方式
一、DQL 查询语言
Dataview 插件为 Obsidian 提供了强大的数据查询和可视化功能。通过使用 Dataview 查询语言(DQL),用户可以创建复杂的查询来检索、处理和展示 Obsidian 笔记库中的信息。DQL 支持四种主要的查询类型:TABLE
、LIST
、TASK
和 CALENDAR
,每种类型都有其特定的用途和语法。
1. TABLE 类型
TABLE
查询类型用于生成表格形式的输出。你可以指定要显示的列和它们的排序方式。
TABLE WITHOUT ID file.name AS 文件名, file.cday AS 创建时期
WHERE file = this.file
结果:
2. LIST 类型
LIST
查询类型用于生成列表形式的输出。你可以指定要显示的字段和它们的排序方式。
LIST WITHOUT ID file.name
WHERE file = this.file
结果:
3. TASK 类型
TASK
查询类型专门用于检索和展示任务。你可以根据任务的完成状态、截止日期等属性进行筛选和排序。
TASK
FROM "10 Example Data/dailys"
WHERE "#journal" AND completed
LIMIT 5
结果:
4. CALENDAR 类型
CALENDAR
查询类型用于生成日历视图,展示具有日期属性(如截止日期或开始日期)的任务或事件。
CALENDAR file.day
FROM "10 Example Data/dailys"
结查:
二、内联 DQL 查询
这种方式使用内联块格式(而不是代码块)和可配置的前缀来将内联代码块标记为 DQL 块,语法如下:
`= <变量名>`
注意:这里的 = 是可以在 DataView 选项中指定为其它符号的,例如:dv: 或者 ~,但通常我们保持默认。
我们可以在文档中任意位置插入内联 DQL:
今天是:`= date(today)` 我还有 < `= [[打造极致体验笔记:Obsidian Meta Bind 插件使用]].file.name` > 计划要去写!
结果:
今天是:2024-04-26 我还有 <打造极致体验笔记:Obsidian Meta Bind 插件使用> 计划要去写!
注意:DataView 提供的各种函数我们同样也可以在内联 DQL 中使用,后续会介绍各种函数的使用。
三、使用 DataviewJS 查询
使用 DataView 提供的 JavaScript API 可以实现复杂的功能,结合 DataView 和 Obsidian API,你可以实现一些有趣且复杂的功能。
在使用时只需要将代码块的类型设置为 dataviewjs 即可:
let currentFilename = dv.current().file.name
dv.list([currentFilename])
上面的示例直接将当前文档的文件名作为列表查询结果显示。
四、使用内联 DataviewJS 查询
内联 JavaScript 的写法如下,同样也可以通过选项来更改语法前缀为 dvjs:
或 $~
。
`$= dv.current().file.name`
下面是一个显示当前任务进度的进度条代码:
[任务完成度:: `$= const value = Math.round(((dv.page("Obsidian 达人成长之路 #1:使用终极工具 Dataview 释放笔记库的潜力 · DQL查询语言").file.tasks.where(t => t.completed).length) / (dv.page("Obsidian 达人成长之路 #1:使用终极工具 Dataview 释放笔记库的潜力 · DQL查询语言").file.tasks).length || 0) * 100); "<progress value='" + value + "' max='100'></progress>" + " " + value + "%"`]
结果:
⚠️upload failed, check dev console