属性 Properties:结构化元数据

正文回答「笔记里写了什么」,属性回答「这篇笔记是什么」。给笔记加上日期、状态、作者这类结构化字段,你的仓库就从一堆文本进化成了可筛选、可统计的小型数据库。本章讲属性的写法、类型系统和实际用法。

什么是属性,写在哪

属性(Properties)以 YAML 格式写在笔记最顶部的两条三横线之间(俗称 frontmatter):

---
title: Transformer 论文精读
date: 2026-10-01
status: 已读
rating: 4
tags:
  - 论文
  - 深度学习
authors:
  - Ashish Vaswani
link: "[[注意力机制]]"
---

添加属性的几种方式:命令面板运行 Add file property;快捷键 Ctrl+;(macOS 为 Cmd+;);或在文件最开头手动输入 ---。添加后 Live Preview 顶部会出现可视化的属性编辑区,属性名和值都可以点选修改,不必手写 YAML。

三个默认属性要认识:tags(标签)、aliases(别名,永远是列表格式)、cssclasses(给单篇笔记挂 CSS 样式类)。旧的 tag、alias、cssclass 单数写法已废弃,导入旧笔记时注意统一成复数形式。

属性类型系统

每个属性名对应一种类型,类型决定取值方式和检索行为。点击属性名旁的类型图标可修改;同一属性名在全库共用一种类型。

类型 存储示例 典型用途
Text 文本 author: 费曼 单行文字
List 列表 每行一个 - 值 多作者、多标签
Number 数字 rating: 4 评分、数量
Checkbox 复选框 published: true 是/否状态
Date 日期 date: 2026-10-01 完成日、出版日
Date & time 日期时间 time: 2026-10-01T10:30:00 精确到时刻
Tags 标签 tags 属性专用 标签

书写时两个坑要避开:属性值里的双链必须加引号,如 link: "[[注意力机制]]",否则 YAML 会解析失败;数字属性必须是字面量数值,不能写表达式。日期属性还有个彩蛋——启用 Daily notes 核心插件后,日期属性会自动变成可点击的链接,直达当天的日记。

检索属性:让元数据干活

属性真正的威力在检索环节。全局搜索支持专门的属性语法:

[status]                  → 有 status 属性的所有笔记
[status:已读]             → status 值为「已读」的笔记
[status:已读 OR 在读]     → 值为两者之一的笔记
[rating:null]             → status 属性存在但没填值的笔记

属性搜索可以和普通关键词、操作符组合,比如 tag:#论文 [status:在读] 找「在读状态的论文笔记」。在 Bases 数据库视图里,属性更是直接变成表格列和筛选条件——这是下一阶段的内容。

一套实用的属性设计

属性设计的原则是少而准:每加一个字段都要问「我真的会按它筛选吗」。下面是按笔记类型推荐的起步模板:

笔记类型 推荐属性 说明
读书笔记 status rating author date status 管阅读进度,rating 管评价
项目笔记 status deadline project deadline 用日期类型
日记 date mood 通常由模板自动填
论文/文献 authors year tags source authors 用列表
人物 role company 组织联系人

配合模板使用体验最佳——在模板文件里预置好属性骨架,新建笔记时一键填入。一个读书笔记模板的属性部分:

---
tags:
  - 读书
status: 在读
rating:
author:
date: "{{date}}"
---

属性的边界与注意事项

几条来自官方文档的边界说明,帮你避免期望落差:

  • 不支持嵌套属性的可视化编辑,想用嵌套结构请切到 Source mode 直接写 YAML。
  • 不支持批量编辑,大量修改建议借助属性视图(Properties view)重命名,或用脚本、社区插件处理。
  • 属性里不渲染 Markdown,它被刻意设计为「原子化的小信息」,长内容请放正文。
  • 属性在文档中的显示方式可在 设置 → Editor → Properties in document 里改为 Visible(默认)、Hidden 或 Source。
  • 全库属性一览可用核心插件 Properties view(属性视图)查看,右键可重命名属性——重命名会同步更新所有笔记。

新手常见弯路是走两个极端:要么一个属性都不用,仓库回归「一堆文本」;要么一上来设计十几个字段,每天被填表压垮。正确姿势是从两三个字段起步(比如 status 和 date),等某个筛选需求真实出现时再加新字段。属性是给未来的检索行为铺路,不是给当下增加仪式感。

属性视图:全库字段的管理台

当仓库里有几十种属性时,你需要一个总览入口——这就是核心插件 Properties view(属性视图)。它在右侧栏列出全库所有属性名及各自的使用次数,点进去能看到所有包含该属性的笔记;右键属性名可以直接重命名,重命名会同步更新全库所有笔记里的这个字段——批量改名从此不需要脚本。

属性视图还是「字段卫生检查」的利器:翻一遍属性列表,你会立刻发现那些只被两三篇笔记使用的孤儿字段(当初一时兴起建的)、语义重复的字段(date 与 created 并存)、以及拼写不一致的变体(status 与 Status)。每月巡检一次,字段体系就能保持干净。重命名的批量修改虽然官方支持,但涉及大量笔记时建议先在几个文件上验证效果。

属性驱动的高级组合

属性的价值随组合方式指数增长,给三个进阶方向:

组合一:属性 + Bases = 自建应用。 读书库、项目管理、文献库的本质都是「属性字段 + 视图配置」。先设计字段(status、rating、deadline……),再建 Base 视图(看板、表格),你就用纯文本搭出了一个专属的小型应用。字段设计先行,视图是自然结果。

组合二:属性 + Dataview = 自动报表。 「本月新增笔记数」「平均评分」「逾期项目清单」这类统计,本质都是对属性的聚合查询。属性类型定得准(日期就是日期、数字就是数字),查询才不会因类型混乱而漏数据。

组合三:属性 + 模板 = 零成本录入。 结构化最大的敌人是录入麻烦。把预置属性骨架放进模板,配合 Templater 的动态变量自动填日期,录入成本降到「改两个空」。录入越轻松,数据越完整,检索越可靠——这是一个正向循环。

反过来说,属性体系的失败几乎都源于「设计过度」:字段太多、含义模糊、类型混乱。定期用属性视图巡检、按真实筛选需求增删字段,这套系统能陪你走很多年。

从 YAML 角度理解属性

对愿意深入一层(尤其程序员读者)的用户,理解属性的存储本质有额外收益:属性就是笔记头部的一段 YAML 文本,随 .md 文件存储,没有独立数据库。这意味着:批量修改可以用任何文本工具(VS Code 全局替换、sed、Python 脚本);Git 能对属性变更做精确版本跟踪;JSON 写法也被接受(Obsidian 会读取并转为 YAML 保存)。唯一要小心的是 YAML 语法本身——冒号后必须有空格、列表用短横线、特殊字符加引号,这些细节在模板和批量脚本中尤其容易出错,出问题时切到 Source mode 检查原文即可定位。

二十分钟给仓库加上属性系统

照这条路线走,二十分钟后你的仓库就有了第一批结构化字段。第 1-5 分钟:确定首批字段——只选两个:status(取值固定三到四个,如 在读/已读/想读)和 date(日期类型)。把你最常筛选的那类笔记定为试点对象(读书笔记、项目笔记均可)。第 6-12 分钟:给试点类的五到十篇笔记补上这两个属性——快捷键 Ctrl+; 逐篇添加,顺手在 Live Preview 顶部把 status 的类型点成 Text、date 的类型点成 Date。第 13-16 分钟:验证检索——搜索框输入 [status:在读] 看命中是否符合预期;有 Bases 的再建个小表格视图按 date 排序。第 17-20 分钟:固化——把这两个字段写进对应类型的模板(读书模板、项目模板各一份),以后新建笔记自动带字段;最后打开属性视图看一眼 status 的全库分布,确认没有异常值。

二十分钟结束时的成果:一种笔记类型有了结构化字段、一条可用的属性检索、一个自动带字段的模板。这就是属性系统的最小可用形态——接下来只需等待真实的筛选需求出现,比如「想按评分排序」时再加 rating,「想按作者聚合」时再加 author。字段永远跟着需求走,而不是跟着想象力走,这个秩序比任何字段设计技巧都重要。

延伸阅读:属性批量清理时正则是最锋利的工具,正则表达式从入门到精通 值得常备案头;对程序员读者,Claude Code 完全指南 里「结构化数据驱动工作」的思路与属性系统高度共鸣。

本章由 WorkBuddy 原创整理,功能行为依据 Obsidian 官方帮助文档。