Skip to content

Commit

Permalink
Merge pull request PKM-er#826 from juestchaos/main
Browse files Browse the repository at this point in the history
更新
  • Loading branch information
juestchaos committed Jul 30, 2024
2 parents 95922cd + 331114d commit 469e1b4
Show file tree
Hide file tree
Showing 7 changed files with 36 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ modified: 20240701205000

Obsidian 是双链笔记应用中的佼佼者,而作为使用 Obsidian 的用户,我们有必要花点时间认真理解其概念、熟练并合理地应用到个人知识体系中。

本文旨在通过作者目前已有的知识来向广大读者分享一下自己对于 Obsidian 中「链接」的理解和使用过程中需要注意的事项。本文有部分内容来自早前写的 [[Obsidian达人成长之路_1-使用终极工具Dataview 释放笔记库的潜力-DQL查询语言]] 文章中关于链接的介绍(修订了部分文字)。
本文旨在通过作者目前已有的知识来向广大读者分享一下自己对于 Obsidian 中「链接」的理解和使用过程中需要注意的事项。本文有部分内容来自早前写的 [[Obsidian达人成长之路-1-使用终极工具Dataview 释放笔记库的潜力-DQL查询语言]] 文章中关于链接的介绍(修订了部分文字)。

除了介绍相关概念和语法外,本文还会介绍相关的插件(如 Dataview 和 Templater)涉及链接的相关操作。

Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
---
uid: 20240508220235
title: Obsidian 达人成长之路_1:使用终极工具 Dataview 释放笔记库的潜力 · DQL 查询语言
title: Obsidian 达人成长之路 1 使用终极工具 Dataview 释放笔记库的潜力 · DQL 查询语言
tags: [Obsidian, Dataview]
description: 使用终极工具 Dataview 释放笔记库的潜力 · DQL 查询语言
author: jenemy
type: other
draft: false
editable: false
modified: 20240508235724
modified: 20240730194155
---

# Obsidian 达人成长之路 1使用终极工具 Dataview 释放笔记库的潜力 · DQL 查询语言
# Obsidian 达人成长之路 1 使用终极工具 Dataview 释放笔记库的潜力 · DQL 查询语言

️DataView 是 Obsidian 社区中的热门插件,它为用户提供了一个强大的实时索引和查询引擎。通过在文档中设置属性(或称为元数据),DataView 能够检索并处理这些数据。借助 DataView,用户可以轻松列出、筛选、排序和分组数据,这与使用数据库查询语言类似。

Expand Down Expand Up @@ -868,7 +868,7 @@ WHERE T.completed AND file = this.file

![](https://cdn.pkmer.cn/images/202405082208253.png!pkmer)

> [!note]
> [!note]
> `FLATTEN` 语句的所有使用都需要结合 `TABLE` 查询类型来输出结果。
现在再来演示另一种使用 `FLATTEN` 的场景,这刚好与 `GROUP BY` 语句结果相反。现在有一个目录 `books` 放置了很多书籍,每一个文档代表一本书,文档中设置 `genres` 属性来作为分类(`Children`, `Romance`, `Magic` 等等),当我们使用 `TABLE genres` 查询时,结果是每个分类占据表格的一行,而默认文档链接会根据分类数量自动合并行,现在想要相同行不合并显示,这时就需要使用 `FLATTEN genres` 来实现。
Expand Down Expand Up @@ -1264,7 +1264,7 @@ WHERE file = this.file
`= none([1, 2, 5, 8], (v) => v > 10)` %% true %%
```

>[!Tips]
>[!Tips]
>在 JavaScript 中 `null`, `""`, `0` 均代表假值,DQL 查询语言中也使用了同样的规则。
最后还剩下 2 个函数来结束本小节,`nonull(array)` 函数用于将一个包含 `null` 值的数组项移除,并返回一个新的数组。`length(object|array)` 函数用于返回数组的长度,对象的属性数量,因为比较简单就不举例说明了。`extract(object, key1, key2, ...)` 函数用于获取对象的多个值,请参考前面章节中的使用示例。
Expand Down Expand Up @@ -1540,8 +1540,7 @@ SORT hash(dateformat(file.ctime, "YYYY-MM-DD"), file.name)

最后,动动你发财的小手,关注,点赞一键三连,你的鼓励是我坚持下去的动力。有任何问题欢迎加作者微信(`jenemy_xl`)沟通交流一起成长。


下一篇 [[Obsidian达人成长之路_2-使用终极工具 Dataview 释放笔记库的潜力 · JavaScript API]] [[Obsidian达人成长之路_3-使用终极工具 Dataview 释放笔记库的潜力 · 案例讲解]]
下一篇 [[Obsidian达人成长之路-2-使用终极工具 Dataview 释放笔记库的潜力 · JavaScript API]] [[Obsidian达人成长之路-3-使用终极工具 Dataview 释放笔记库的潜力-案例讲解]]

## 参考

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ author: jenemy
type: other
draft: false
editable: false
modified: 20240526082930
modified: 20240730194208
---

# Obsidian 达人成长之路 2:使用终极工具 Dataview 释放笔记库的潜力 · JavaScript API

## 前言

上一篇 [[Obsidian达人成长之路_1-使用终极工具Dataview 释放笔记库的潜力-DQL查询语言]] 讲了 Dataview 的基础查询语法。
上一篇 [[Obsidian达人成长之路-1-使用终极工具Dataview 释放笔记库的潜力-DQL查询语言]] 讲了 Dataview 的基础查询语法。

本文为【Obsidian 达人成长之路】系列第 2 篇,主要讲解 Dataview 插件的 JavaScript API 调用方式的详尽用法,努力让每一个读者有所收获并应用到自己的 Obsidian 知识管理库中。

Expand Down Expand Up @@ -106,7 +106,7 @@ Object.keys(dv.current()).forEach(key => {
```
````

> [!Tip]
> [!Tip]
> `dv.current()``dv.page("文档路径")` 的便捷方法。
结果:
Expand Down Expand Up @@ -571,7 +571,7 @@ dv.table(["File", "Author", "Book topics", "Genres", "Progress"], dv.pages('"10

![Pasted image 20240521201219](https://cdn.pkmer.cn/images/202405260809223.png!pkmer)

> [!Warning]
> [!Warning]
> 需要注意的是使用 `where()` 方法查询数据时可能会修改原始数据。
下面以 `filter()` 方法来举例:
Expand Down Expand Up @@ -969,7 +969,7 @@ dv.span(dv.blockLink("2022-02-04", '220763', true, '显示名称'))

![Pasted image 20240524110023](https://cdn.pkmer.cn/images/202405260809230.png!pkmer)

> [!Tip]
> [!Tip]
> 在 obsidian 中我们使用 `[[]]` 来嵌入链接,如果所指向的文件不存在,在鼠标点击链接时会自动创建这个链接文件。如果相要将嵌入的链接的内容显示出来只需要在双括号前加一个感叹号,即 `![[]]`,这就等同于在代码中将 `embed` 设置为 `true`,这个时候 `display` 指定的名称将会失效。
### 日期和时间操作
Expand Down Expand Up @@ -1103,7 +1103,7 @@ dv.table(queryResult.value.headers, queryResult.value.values)

![Pasted image 20240524165035](https://cdn.pkmer.cn/images/202405260809231.png!pkmer)

> [!Tip]
> [!Tip]
>`dv.query()` 方法返回值签名为 `Promise<Result<QueryResult, string>>`,因些我们需要使用 `await dv.query()` 来获取异步值,然后也可以使用 `dv.query().then(v => {//...})` 以 Promise API 方式来处理。
`settings` 可先参数是一个 `QueryApiSettings` 类型,目前只有一个配置属性 `forceId: boolean`,这个值将覆盖 `WITHOUT ID` 的设置。当值为 `true` 时会包含链接或者分组名字段,`false` 则排序。
Expand Down Expand Up @@ -1489,7 +1489,7 @@ Luxon 提供了以下几个操作类:

接下来文章中使用的 `DateTime` 均指代 `dv.luxon.DateTime``Duration` 同样如此。

> [!Note]
> [!Note]
>这部分但介绍的内容有点多,实际在 Dataview 中我们可能并不会涉及到所有这些知识。
### `DateTime` 使用
Expand Down Expand Up @@ -1900,7 +1900,7 @@ console.log(dur.fromISOTime('11:22:33.444').toObject()) // { hours: 11, minutes:
```
````

> [!Note]
> [!Note]
>对于 ISO 格式的持续时间请参考官方网站,这里不作说明。
#### 输出持续时间
Expand Down Expand Up @@ -1948,7 +1948,7 @@ console.log(d.toHuman({ unitDisplay: 'short' })) // 3年、6个月、1周、4天
```
````

> [!Tips]
> [!Tips]
> 关于 `opts` ,可以参考 [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options)
##### `toObject()` 函数
Expand Down Expand Up @@ -1991,7 +1991,7 @@ console.log(dur.fromObject({ hours: 11 }).toISOTime({ format: 'basic' })) // 110
```
````

> [!Tips]
> [!Tips]
>还有 2 个函数 `toJSON()``toString()` 也是输出为 ISO 8601,只不过一个适用于 JSON,一个适用于调式。
除了上述几个函数外,还可以使用 `toMillis()``valueOf()` 来输出持续时间的毫秒表示。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ author: jenemy
type: other
draft: false
editable: false
modified: 20240531180105
modified: 20240730194231
---

# Obsidian 达人成长之路 _3- 使用终极工具 Dataview 释放笔记库的潜力 · 案例讲解

[[Obsidian达人成长之路_1-使用终极工具Dataview 释放笔记库的潜力-DQL查询语言]]
[[Obsidian达人成长之路-1-使用终极工具Dataview 释放笔记库的潜力-DQL查询语言]]

[[Obsidian达人成长之路_2-使用终极工具 Dataview 释放笔记库的潜力 · JavaScript API]]
[[Obsidian达人成长之路-2-使用终极工具 Dataview 释放笔记库的潜力 · JavaScript API]]

继前面两篇文章,本文为 Obsidian 达人成长之路系列第三篇,主要梳理了 Dataview 示例库 **Dataview Example Valut** 中的一些案例,并加上个人的一些理解和分析,以方便读者能够触类旁通,应用到自己的笔记中。

Expand Down Expand Up @@ -69,13 +69,13 @@ JavaScript API 示例:
格式化时间:`$= dv.date('now').toFormat("M'月'dd'号'")` %% 5月15号 %%
````

> [!Tip]
> [!Tip]
> 使用内联 API 查询出来的标签在结果显示上和内联 DQL 的结果略有不同,前者是可交互的结果,后者为纯文本。
> [!Warning]
> [!Warning]
> 在 API 中没有对应的 `truncate()` 函数使用,但是我们可以 `dv.evalute()` 或者 `dv.tryEvaluate()` 函数在 API 中执行 DQL 查询。
> [!Warning]
> [!Warning]
> 在文件名不要包含 `#` 符号,在使用链接时会被错误的识别为标签或者页面标题。
### 在查询结果中显示图片
Expand Down Expand Up @@ -115,7 +115,7 @@ WHERE file = this.file

处理 Obsidian 内部图片链接时,我们利用 `link()` 函数的第二个参数来指定图片的宽度,实际上它是用于指定链接别名的,这里刚好利用其发挥额外作用了。

>[!Tip]
>[!Tip]
>不要像上面示例中那样在 YAML 中放入链接,如果必须放需要加上双引号才能正确读取出来,否则被识别成数组。但是又衍生出另一个问题,文档属性区域会显示一个警告图标,提示:未匹配到类型,建议使用文本。
下面我们来看一下在现实场景中的应用:
Expand Down Expand Up @@ -211,7 +211,7 @@ GROUP BY genres AS 类别

![Pasted image 20240516114930](https://cdn.pkmer.cn/images/202405311801673.png!pkmer)

>[!Tip]
>[!Tip]
>这里需要注意的是 `FLATTEN` 语句很关键,如果不使用将会得到一个错误的结果。原因是在原始数据中每一本书可以对应多个类别,而在按类别查询分组后,结果变成多个类别对应一本书。因此我们需要把每个类别对应上同一本书来修正数据,这样再使用分组时就符合预期了。
下面是一个转换过程示例图解:
Expand Down Expand Up @@ -480,7 +480,7 @@ FLATTEN arr3

![Pasted image 20240517154843](https://cdn.pkmer.cn/images/202405311801695.png!pkmer)

>[!Tip]
>[!Tip]
>还有一种方法来实现多维数组展开,修改上面的示例,连续使用 4 次 `FLATTEN arr3`,得到一个展开的结果。这个结果并不能推断出原始数组是由几维展开的,在显示上也没有出现列表符号,读者可以根据需求灵活选用。
![Pasted image 20240517164859](https://cdn.pkmer.cn/images/202405311801696.png!pkmer)
Expand Down Expand Up @@ -531,7 +531,7 @@ SORT default(((x) => {

在 Obsidian 中日记文件通常以 `xxxx-xx-xx` 的日期格式创建。我们可以通过 DQL 来精确查询完整年/月/日的日记,也可以查询指定年份、月份和具体某天的日记。下面我们以 10 Example Data/daily 中的日记数据 `wake-up` 为例。

>[!Tip]
>[!Tip]
>obsidian 为日记提供了一个专门的属性 `file.day` 来方便我们获取以日期表示的文件名。
#### 日期精确查询
Expand Down Expand Up @@ -587,7 +587,7 @@ WHERE dateformat(file.day, "dd") = "17"

由于在 DQL 查询语言中我们无法将 `wake-up` 的值读取并传入 `date()` 函数,所以只能采取一种不友好的方式来实现:将时间按 `:` 拆分后单独判断。

>[!Tip]
>[!Tip]
>我们无法将内联属性传 `date()` 函数,但是使用 `FLATTEN AS` 声明的日期、`file.day``file.frontmatter.xx` 的日期值还是可以传入正常解析的。
下面是两方式实现示例:
Expand Down Expand Up @@ -1263,7 +1263,7 @@ function getValue(page, key, i) {

上述代码是在 `groupedValues` 的基础上对数据进行了一次重映射,然后使用 `dv.array()` 方法将普通的 JavaScript 数组转换成 `DataArray<T>` 类型,然后使用其 `groupBy()` 方法按 `bought` 字段进行分组,然后使用 `flatMap()` 映射返回 `rows` 的值。

> [Tips]
> [Tips]
> 使用 `groupBy()` 分组后返回一个包含 `key``rows` 的对象,其中 `key` 为分组名称,`rows` 是分组后的数据。
`flatMap()` 方法是一个很重要的函数,关于其用法可自行去脑补,后面处理分组数据部分写出来后,思索着应该还有更简单的实现。与是,作者又双叒叕熬夜想了想,终于以 2 个 `flatMap()` 方法成功破局,一行代码暴击(不追求代码可读性为前提):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ modified: 20240602223704
> 本文详细介绍了Obsidian笔记软件中的Text Expand插件及其相关功能。Text Expand插件扩展了Obsidian的核心Search插件,允许用户通过模板将搜索结果格式化输出到文档中。文章首先概述了Obsidian的Search功能,包括其基本查询方式和查询操作符,然后介绍了Obsidian Query Control插件,它为query查询代码块提供了额外的语法和工具条。接着,文章重点介绍了Text Expand插件的使用和案例分享包括如何利用Eta模板引擎进行数据格式化和逻辑处理,以及如何通过序列模板引擎简化查询结果的输出。

[[mrj-text-expand]]是一个很特别的插件,它和我前面 3 期文章[[Obsidian达人成长之路_1-使用终极工具Dataview 释放笔记库的潜力-DQL查询语言|Dataview达人系列]]中介绍的 Dataview 有着类似的功能:查询,但是却侧重点不一样,两都互不干涉。
[[mrj-text-expand]]是一个很特别的插件,它和我前面 3 期文章[[Obsidian达人成长之路-1-使用终极工具Dataview 释放笔记库的潜力-DQL查询语言|Dataview达人系列]]中介绍的 Dataview 有着类似的功能:查询,但是却侧重点不一样,两都互不干涉。

Dataview 查询的数据除了了任务可以操作外,其余的结果均为只读,并且只有在执行 Dataview 查询时才会得到结果。而 Text Expand 它扩展了官方核心插件 Search 的搜索结果并允许用户使用模板格式化输出到当前页面中作为文档内容的一部分。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,9 @@ Dataview 实例包含了....个实例,又按照应用的查询类型,应用
- [[Dataview实战-如何查询结果的数目]]
- [[Dataview实战-展示笔记总数]]
- [[Obsidian汇总显示笔记内的关键信息]]
- [[Obsidian达人成长之路_1-使用终极工具Dataview 释放笔记库的潜力-DQL查询语言]]
- [[Obsidian达人成长之路_2-使用终极工具 Dataview 释放笔记库的潜力 · JavaScript API]]
- [[Obsidian达人成长之路_3-使用终极工具 Dataview 释放笔记库的潜力 · 案例讲解]]
- [[Obsidian达人成长之路-1-使用终极工具Dataview 释放笔记库的潜力-DQL查询语言]]
- [[Obsidian达人成长之路-2-使用终极工具 Dataview 释放笔记库的潜力 · JavaScript API]]
- [[Obsidian达人成长之路-3-使用终极工具 Dataview 释放笔记库的潜力-案例讲解]]
- [[如何给 DataviewJS 中的 TaskList 的任务列表排序]]
- [[通过Dataviewjs给Obsidian增加筛选框]]
- [[通过Dataviewjs制作一个带数据面板的任务筛选框]]
6 changes: 3 additions & 3 deletions 10-Obsidian/Obsidian社区插件/Dataview/dataview.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,6 @@ Dataview 插件的用途主要有三个方面。

## Dataview 达人之路系列

- [[Obsidian达人成长之路_1-使用终极工具Dataview 释放笔记库的潜力-DQL查询语言]]
- [[Obsidian达人成长之路_2-使用终极工具 Dataview 释放笔记库的潜力 · JavaScript API]]
- [[Obsidian达人成长之路_3-使用终极工具 Dataview 释放笔记库的潜力 · 案例讲解]]
- [[Obsidian达人成长之路-1-使用终极工具Dataview 释放笔记库的潜力-DQL查询语言]]
- [[Obsidian达人成长之路-2-使用终极工具 Dataview 释放笔记库的潜力 · JavaScript API]]
- [[Obsidian达人成长之路-3-使用终极工具 Dataview 释放笔记库的潜力-案例讲解]]

0 comments on commit 469e1b4

Please sign in to comment.