Dataview 示例展示检索文章结构

Dataview 示例展示检索文章结构

讲讲为什么需要有这么一篇辅助文章。Dataview 示例展示中的所有文章均基于 Github 上的这个项目:dataview example vault,这个英文示例库是一个完整的 obsidian 的 vault(不想直接去 Github 下载原库也可以在 这里 查看,缺点就是所有的 dataview 查询都只能看到代码没法看到真正的查询结果),原库中包含了四个部分

Dataview 示例展示检索文章结构--

  • 00 Meta 中有所有库中用到的所有元数据;
  • 10 Example Data 就是检索的目标,所有待检索的文章都在这里边;
  • 20 Dataview Queries 就是 dataview 查询的示例,作者按照类别分成了不同的文章;
  • 30 Dataview Resources 可以理解为 20 Dataview Queries 的一个目录;

一、查询的示例库的结构

本文主要就是讲下 10 Example Data 中的结构,并且为了方便阅读,我把所有文件的英文和属性的名字替换为了语义通顺的相同意思的中文。

Dataview 示例展示检索文章结构--一、查询的示例库的结构

举个例子,在我们的示例文件中,如果要查询所有日记内的内容,会写成下面的这种形式

```dataview
TABLE ...
FROM "示例库/日记"
...
```

二、示例库中的文件分别放了什么

我会按照以下的结构依次介绍一下每个文件的内容和包含的元数据

  • 示例库
    • 任务
    • 书籍
    • 日记
    • 文件夹和具有元数据的文件
    • 食物
    • 游戏
    • 具有前缀和后缀名的文件
    • 项目
    • 每周代办

(1) 任务

这个文件夹中一共有 12 个任务文件,存放了一些特定的任务。文件有三个元数据:class、received 和 due,分别代表这个任务的类别,开始日期和截止日期。另外,这个任务的子任务还有一个 completion 的元数据代表子任务的完成日期。

Dataview 示例展示检索文章结构--(1) 任务

(2) 书籍

这个文件夹里边提供了七本书,不过原示例库的书都是 books_1 这种形式的代称,我按照同样的格式写了一篇中文的供读者参考。文中共有六个元数据:作者 author, 主题 booktopics, 类型 genres, 总页数 totalPages, 封面图片 cover-img 和一个行内字段已读页数 pagesRead。原并没有内容简介和原文摘录,下图中的是我自己加的。另外,每一篇记录书籍阅读记录的文件都被打上了 #type/books 的标签。

英文名中文名数据类型解释
author作者文字这本书的作者
booktopics书的主题列表这本书的主题,比如孤独、拼搏、反抗等
genres书的类型列表这本书属于什么类型的书,例如是现代主义小说,中篇小说
totalPages书的总页数数字整本书有多少页
cover-img书的封面链接网上找到书的封面的图片
pagesRead已读页数数字我已经看了多少页

Dataview 示例展示检索文章结构--(2) 书籍

(3) 日记

日记文件夹里面自然就是一大堆日记了,日记文件名格式全部为 “yyyy-MM-dd”,这些日记文件中包含了很多元数据。

在文件的 Properties 区域,有一个固定的 wellbeing 属性,这是一个数据类型为对象的属性。但是由于 1.4 更新后的 Properties 区域并没有提供对象这种数据类型,因此在文件中这个属性的渲染会有问题,不过这并不影响 dataview 的检索。

Dataview 示例展示检索文章结构--(3) 日记

给他换成中文则分别对应:wellbeing 幸福指数,mood 情绪指数,mood-notes 情绪描述(euphoric 是愉悦,还有 relaxed 等),health 健康指数,health-notes 身体状态,pain 疼痛指数,pain-type 疼痛部位。最后两个应该和 health 相关,有的日记文件并没有填写 pain-type 且 pain 指数为 0 或 1。

从上图中也可以看到,几乎所有的日记文件都具有这两个标签 #daily#journal。日记文件的正文一般会有一个一级标题 Daily Note yyyy-MM-dd (例如 Daily Note 2022-02-01)。还会有一些任务,一些和别人的预约之类 (Appointments)。

Dataview 示例展示检索文章结构--(3) 日记

翻译一下就是

Dataview 示例展示检索文章结构--(3) 日记

注意

  • 这些任务并不是简单的任务,带状态的意思是他们完成时的语法有的为 - [o],有的又是 - [x]。这些都可以被 dataview 检索区分出来;
  • 预约里面通常会有两个行内字段 person 和 appointment,分别代表人和时间;

日记末尾会有一块区域用于记账 Money spent 和一块区域专门放各种各样的元数据 Meatadata。

英文名中文名数据类型解释
bought购买的产品文字买了什么,比如说 shoes 代表拿去买鞋了
paid花费文字花了多少钱
wake-up起床时间日期起床时间,不需要填日期,填小时和分钟即可
lunch午餐时间日期吃午饭的时间,不需要填日期,填小时和分钟即可
dinner晚餐时间日期吃晚饭的时间,不需要填日期,填小时和分钟即可
go-to-sleep睡觉睡觉日期睡觉的时间,不需要填日期,填小时和分钟即可
training坐着的时间定长时间今天坐了多久
praying是否祷告布尔类型今天是否祷告
breathing是否呼吸布尔类型今天呼吸了没
beingthankful是否保持感激布尔类型今天是否怀揣感恩之心
slowdown是否懈怠布尔类型今天有没有放松

Dataview 示例展示检索文章结构--(3) 日记

当然也有一些与众不同的日记文件,作者选择以图片作为行内字段 picoftheday(picture of the day) 的值,例如

Dataview 示例展示检索文章结构--(3) 日记

有时候整篇日记文件只有一些任务或者一些摘录

Dataview 示例展示检索文章结构--(3) 日记

Dataview 示例展示检索文章结构--(3) 日记

(4) 文件夹和具有元数据的文件

这个目录之下只有非常非常多相互嵌套的文件夹,打开到最深层都只有一个 meta 文件夹,在 meta 文件夹的 Properties 中都只有 id 和 lang 两个属性,id 一般与他所处的文件夹的名字有关,很多都是文件夹开头首字母的缩写加上数字,lang 是 language 的缩写。

Dataview 示例展示检索文章结构--(4) 文件夹和具有元数据的文件

可以看到第一层文件夹是按照语言分的,有 English, French 和 German,对应了每一个 meta 文件夹中的 lang 属性。在 Harry Potter and the Philosopher’s Stone(哈利波特与魔法石) 文件夹下的 meta 文件中的内容如图,HP01 应该是 Harry Potter 的首字母,01 应该是指第一个,不难想象 Harry Potter and the Prisoner of Azkaban(哈利·波特与阿兹卡班的囚徒) 的 meta 文件夹中的 id 应该是 HP02。这个文件夹中的所有文件只有一篇讲解检索文件夹的时候会用到。

Dataview 示例展示检索文章结构--(4) 文件夹和具有元数据的文件

(5) 食物

这个文件夹只有五个文件,其中四个是菜谱,一个有食材存储相关的信息。

Dataview 示例展示检索文章结构--(5) 食物

四个食谱分别是

英文名中文名
Bacon Pasta with tomato pasta sauce培根意面配番茄意面酱
Mushroom Pasta蘑菇意大利面
Oven Baked Chicken and Rice烤鸡和米饭
Pesto Pasta青酱意面

这些食谱的文件包含的属性还是比较多的,有 recipe-type 食谱类型,source 食谱来源,time 烹饪时长,ingredients 成分。

Dataview 示例展示检索文章结构--(5) 食物

正文有两个部分:Ingredients 配料表,以及 Instructions 烹饪步骤,这些都是可以被 dataview 检索到的;

Dataview 示例展示检索文章结构--(5) 食物

(6) 游戏

游戏文件夹中提供了 9 个游戏文件用于检索

Dataview 示例展示检索文章结构--(6) 游戏

每一个游戏文件中包含了六个属性:name 游戏名,publisher 出版商,developer 开发人员,price 价格,genre 游戏类型,languages 支持语言。所有游戏都包含 #game 标签,有的游戏还加上了更精确的标签例如 #game/action 来代表动作游戏。

英文名中文名数据类型解释
name游戏名文字游戏名
publisher出版商文字游戏出版商的名字
developer开发人员文字游戏开发者的名字
price价格数字游戏的价格
genre游戏类型列表游戏的类型,例如动作游戏 Action 等
languages支持语言列表游戏支持的语言

Dataview 示例展示检索文章结构--(6) 游戏

(7) 人

人物文件夹中看起来像是一堆随意起的名字,文中也只在 Properties 中提供了三个属性:birthday 生日,relationship 我和他的关系,contacts 联系方式。

Dataview 示例展示检索文章结构--(7) 人

英文名中文名数据类型解释
birthday生日日期他的生日
relationship关系文字我和他的关系,例如 friend 朋友
contacts联系方式对象contacts 对象包含了 phone, mail 两个字段,即手机号码和邮箱

(8) 具有前缀和后缀名的文件

我们经常会给一类文件其一定的前缀或者后缀,这里作者提供了三个具有一定前缀和后缀的文件用于辅助检索。(文中无任何额外的和有用的内容)

Dataview 示例展示检索文章结构--(8) 具有前缀和后缀名的文件

(9) 项目

项目文件夹中有两种文件,一个是 project_n 文件,n 指代 1~10(共 10 个 project 文件),另一个是 Goal n 文件,里面放的是所有 project_n 文件的汇总,以及一个 #goal 标签。

项目文件 project_n 中就是放了很多很多的任务以及六个行内字段,有 status 状态,started 开始日期,finished 完成日期,Project ID,tags 项目标签,working hours 工作时长(是列表)

Dataview 示例展示检索文章结构--(9) 项目

英文名中文名数据类型解释
status项目状态文字项目的状态,例如 waiting 是还没开始
started开始时间日期项目的开始时间
finished完成时间日期项目的完成时间,没完成不填
Project ID项目 ID数字项目的 ID
tags项目标签标签用来标识项目的标签
working hours工作时长列表记录做项目花了多少时间

(10) 剧

英文示例库给了好多好多的剧的数据,包含了电视剧和动漫。

Dataview 示例展示检索文章结构--(10) 剧

拿这个七龙珠 (Dragon Ball) 的文件举例(其余文件的属性一致),剧文件的属性包括

英文名中文名数据类型解释
Title剧名文字剧名
Genre类型数组剧的类别,例如动作片 Action,冒险片 Adventure
Network网络文字播出的电视台
Seasons数字剧一共拍了多少季,第一季第二季之类;
Episodes数字剧拍了多少集
Runtime时长数字剧的时长
Show_status剧状态文字正在拍还是已经拍完了 (Ended)
Rating评分数字给这部剧打个分
Would rewatch还会再看吗布尔还会再看吗

至于正文中的那些 Season 1 ~ Season 5 是七龙珠第一季到第五季的每一集组成的一大堆任务,每看完一集就点一个完成。每一条任务末尾都有一个 Release Date 的行内字段,代表这一集发行的日期,下面是七龙珠第一季的部分截图。

Dataview 示例展示检索文章结构--(10) 剧

(11) 每周代办

这个文件夹只有一个文件 2022-W39,文章内容如图

Dataview 示例展示检索文章结构--(11) 每周代办

是的,就是一个每周代办,只有一个标题 Weekly To Dos 和三个任务。

讨论

若阁下有独到的见解或新颖的想法,诚邀您在文章下方留言,与大家共同探讨。



反馈交流

其他渠道

版权声明