这篇文章是 Obsidian Dataview 系列 系列 15 篇文章中的第 2 篇

在 Obsidian 中,YAML 是一种用于配置文件和元数据的标记语言。YAML 语法简洁明了,易于阅读和编写,使得在 Obsidian 中描述属性变得更为便捷。
在 Obsidian 中,YAML 通常用于为笔记添加元数据,如标题、标签、别名等。这些元数据可以帮助你更好地组织和管理笔记。具体来说,YAML 在 Obsidian 中的使用方式如下:
在笔记的开头使用三个短横线(—)来定义一个 YAML 区域,也称之为 Front Matter。在这个区域内,你可以使用 YAML 语法为笔记添加各种元数据,例如,使用 tags 来添加标签,使用 aliases 来设置别名,使用 cssclasses 来设置文档样式等。

---
title: Obsidian 达人成长之路 #1:使用终极工具 Dataview 释放笔记库的潜力 · DQL查询语言
date: 2024-05-08
tags: ['Blog', 'Obsidian', 'Dataview']
alias: 别名
---

主体内容

一、基本语法

在 YAML 语言中变量名是区分大小写的,因此 one 与 One 是不同的实体。
使用 # 来表示注释。
使用缩进来表示层级关系,并且只能使用空格来缩进,同一层级在空格数量上需要保持一致。
一个文件中是可以包含多个 --- 区域的。

# 这是注释
one:
    two: 2
    three:
      four: 4
      five: 5

// JSON
{
    "one": {
        "two": 2,
        "three": {
            "four": 4,
            "five": 5
        }
    }
}

二、数据结构与类型

YAML 支持数字、布尔、字符串、数组和对象这几种常见类型,以及空值和时间缀。

1. 字符串

字符串一般不需要用引号(不区分单/双引号,但必须成对)包裹,但是如果字符串中包含转义字符(以反斜杠 \ 开头,如换行:\n)就必须引号包裹。
字符串分为单行和多行文本,在多行文本中还可能包含空白行(是否保留?),因此会有不同的语法扶持。

strings:
    - Hello Dataview
    - 'Hello Dataview with single quotes'
    - "Hello Dataview with double quotes"
    - "Include Unicode. \u263A"
    - "Include Hex code. \r\n"
    - 'Nested "quotes"'

// JSON:
{
    "strings": [
        "Hello Dataview",
        "Hello Dataview with single quotes",
        "Hello Dataview with double quotes",
        "Include Unicode. ☺",
        "Include Hex code. \r\n",
        "Nested \"quotes\""
    ]
}

使用 | 来保留数据的换行,每行的缩进和行尾空白都会被去掉,而额外的缩进会被保留。

lines: |
    line 1
    line 2

    line 3
        line 4
    line 5
    line 6

// JSON:
{
    "lines": "line 1\nline 2\n\nline 3\n    line 4\nline 5\nline 6\n"
}

使用 > 来表示折叠换行,只有空白行才识别为换行。

lines: >
    line 1
    line 2

    line 3
        line 4
    line 5
    line 6

// JSON:
{
    "lines": "line 1 line 2\nline 3\n    line 4\nline 5 line 6\n"
}

2. 布尔值

在 YAML 中我们统一使用 true 和 false 表示真值与假值,此外 True / TRUE 同样可以表示真值,同理还有 False / FALSE 表示假值。

boolean:
    - true
    - true
    - TRUE
    - false
    - False
    - FALSE

// JSON:
{
    "boolean": [
        true,
        true,
        true,
        false,
        false,
        false
    ]
}

[!warning] 注意在 Obsidian 属性面板中输入布尔值时需要将【属性类型】设置为【复选框】。

3. 数字

数字分为整数、浮点数,表示方法有科学表示法,进制表示法(二进制、八进制、十进制和十六进制)。

Integers: [ 0, 0o7, 0x3A, -19 ]
Floats: [0., -0.0, .5, +12e03, -2E+05]

// JSON:
{
    "Integers": [
        0,
        7,
        58,
        -19
    ],
    "Floats": [
        0,
        0,
        0.5,
        12000,
        -200000
    ]
}

[!warning] 注意在 Obsidian 属性面板中输入数字时需要将【属性类型】设置为【数字】。

4. 空值

nullNull 和 ~ 以及不指定值默认都为空。

nulls:
    - null
    - Null
    -
    - ~
// JSON:
{
    "nulls": [
        null,
        null,
        null,
        null
    ]
}

5. 时间缀

YAML 支持 ISO 8601 格式的时间数据。但是在 Obsidian 中使用时只支持部分格式,建议使用 xxxx-xx-xx xx:xx:xx 这种格式来输入日期和时间,或者在属性面板中将【属性类型】设置为【日期】或【日期 & 时间】然后在日期或时间选择器中选择想要的值。

date1: 2024-04-20T11:32:00.000-04:00
date2: 2017-04-20
date3: 2017-W17-7
date4: 11:32:00.000-04:00

[!tip] 在 Obsidian 的【选项】中的【编辑器】将【文档属性】显示方式切换为【源码】模式就可以显示属性的 YAML 源码。

6. 数组

YAML 中数组有 2 种语法格式,一种是区块格式(即:- 属性值),另一种是内联格式([属性值])。多维数组则通过缩进来表示层级关系。

Inline arrays: ["a", "b", 1, 2]
Block arrays:
    - a
    - b
    - 1
    - 2
Multiple arrays:
    -
        - a
        - b
    -
        - c
        - d

// JSON:
{
    "Inline arrays": [
        "a",
        "b",
        1,
        2
    ],
    "Block arrays": [
        "a",
        "b",
        1,
        2
    ],
    "Multiple arrays": [
        [
            "a",
            "b"
        ],
        [
            "c",
            "d"
        ]
    ]
}

7. 对象

对象是以键值对(key: value)的形式来表示数据。

key: value
key: { key1: value1, key2: value2 }
key:
  key2: value2
  key3: value3

// JSON:
{
    "key": "value",
    "key2": {
        "key1": "value1",
        "key2": "value2"
    },
    "key3": {
        "key2": "value2",
        "key3": "value3"
    }
}
系列目录<< Obsidian插件Dataview —— 安装与设置(一)Obsidian插件Dataview —— 认识属性(三) >>