属性系统
概述
Obsidian 属性(Properties)是添加到笔记顶部的结构化元数据,用于:
- 分类组织:为笔记添加标签、类型等
- 数据管理:记录日期、状态、作者等信息
- 查询筛选:结合 Dataview 进行高级查询
- 模板自动化:配合 Templater 自动填充
YAML Frontmatter
基本语法
YAML Frontmatter 放在笔记最开头,用 --- 包围:
yaml
---
title: 笔记标题
date: 2024-01-15
tags: [项目, 重要]
status: 进行中
---
# 正文内容
这里是笔记的正文...数据类型
| 类型 | 语法示例 | 说明 |
|---|---|---|
| 文本 | title: 我的笔记 | 纯文本字符串 |
| 数字 | priority: 5 | 整数或小数 |
| 布尔 | published: true | true/false |
| 日期 | date: 2024-01-15 | YYYY-MM-DD 格式 |
| 日期时间 | created: 2024-01-15T10:30:00 | ISO 8601 格式 |
| 列表 | tags: [工作, 重要] | 数组 |
| 别名列表 | aliases: [别名1, 别名2] | 特殊的别名属性 |
| 链接 | project: "[[项目A]]" | 内部链接 |
属性界面
Obsidian 提供可视化的属性编辑界面:
- 点击笔记顶部的属性区域
- 或使用命令面板搜索「添加属性」
- 在弹出的界面中编辑
内置属性
常用内置属性
| 属性 | 说明 | 示例 |
|---|---|---|
title | 笔记标题 | title: 我的笔记 |
aliases | 别名(用于搜索和链接) | aliases: [别名1, 别名2] |
tags | 标签 | tags: [工作, 重要] |
cssclass | 自定义 CSS 类 | cssclass: wide-page |
publish | 发布控制 | publish: false |
permalink | 永久链接 | permalink: notes/my-note |
标签属性
yaml
# 单个标签
tags: 工作
# 多个标签(行内)
tags: [工作, 重要, 项目]
# 多个标签(多行)
tags:
- 工作
- 重要
- 项目
# 嵌套标签
tags:
- 项目/进行中
- 类型/笔记别名属性
yaml
aliases:
- 简称
- 英文名
- 缩写别名用于:
- 搜索时匹配
- 链接时自动补全
- 重定向链接
自定义属性
笔记元数据
yaml
---
title: 产品需求文档
created: 2024-01-15
modified: 2024-01-20
author: 张三
version: 1.2
---项目管理
yaml
---
project: "[[新产品开发]]"
status: 进行中
priority: 高
start_date: 2024-01-01
end_date: 2024-03-31
progress: 60%
assigned_to:
- "[[张三]]"
- "[[李四]]"
---阅读笔记
yaml
---
type: 阅读笔记
book: 《深度工作》
author: Cal Newport
rating: 5
read_date: 2024-01-15
status: 已读
tags: [生产力, 方法论]
---会议记录
yaml
---
type: 会议记录
date: 2024-01-15
time: 14:00
duration: 60
location: 会议室A
attendees:
- 张三
- 李四
- 王五
agenda:
- 项目进度汇报
- 下阶段计划
follow_up: true
---属性与 Dataview
查询属性
使用 Dataview 查询笔记属性:
dataview
TABLE
title as "标题",
status as "状态",
priority as "优先级"
FROM "projects"
WHERE status = "进行中"
SORT priority DESC按属性筛选
dataview
LIST
FROM ""
WHERE type = "阅读笔记" AND rating >= 4
SORT read_date DESC聚合统计
dataview
TABLE
length(rows) as "数量"
FROM ""
GROUP BY status属性计算
dataview
TABLE
end_date - start_date as "项目周期"
FROM "projects"
WHERE start_date AND end_date属性与模板
Templater 示例
markdown
---
title: <% tp.file.title %>
created: <% tp.date.now("YYYY-MM-DD") %>
modified: <% tp.date.now("YYYY-MM-DD") %>
tags: []
type:
status:
---
<% tp.file.cursor() %>自动填充属性
javascript
<%*
// 自动生成 ID
tR += `id: ${tp.date.now("YYYYMMDDHHmmss")}\n`;
// 从文件名提取信息
const fileName = tp.file.title;
const parts = fileName.split(" - ");
if (parts.length > 1) {
tR += `project: ${parts[0]}\n`;
tR += `task: ${parts[1]}\n`;
}
%>属性最佳实践
命名规范
yaml
推荐做法:
使用小写: status, not Status
使用下划线: start_date, not start-date
保持简洁: type, not document_type
语义明确: created_at, not date属性类型选择
| 场景 | 推荐类型 | 示例 |
|---|---|---|
| 分类 | 文本/列表 | type: meeting |
| 状态 | 文本 | status: 进行中 |
| 优先级 | 数字/文本 | priority: 5 |
| 关联 | 链接 | project: "[[项目A]]" |
| 日期 | 日期 | created: 2024-01-15 |
| 开关 | 布尔 | published: false |
属性复用
为保持一致性,建议创建属性模板:
yaml
# 所有笔记共有
title:
created:
modified:
tags: []
# 项目笔记
project:
status:
priority:
due_date:
# 阅读笔记
type: reading
book:
author:
rating:属性管理
查看所有属性
- 打开命令面板
- 搜索「显示所有属性」
- 查看仓库中使用的所有属性
属性面板
在侧边栏显示当前笔记的属性:
- 打开命令面板
- 搜索「显示属性面板」
批量编辑
使用 Dataview 查询后批量修改:
dataview
TABLE status, priority
FROM "projects"
WHERE status = "进行中"然后使用「批量编辑」插件修改。
高级用法
条件渲染
使用 CSS 类控制内容显示:
yaml
---
cssclass: hide-completed
---css
/* 隐藏已完成任务 */
.hide-completed .task-list-item.is-checked {
display: none;
}发布控制
使用 publish 属性控制 Obsidian Publish:
yaml
---
publish: false
---或指定发布内容:
yaml
---
publish: true
publishDate: 2024-01-15
---链接属性
属性值可以是链接:
yaml
---
related_to:
- "[[项目A]]"
- "[[会议记录]]"
parent: "[[父级笔记]]"
---计算属性
结合 Dataview Inline 查询:
markdown
---
project_start: 2024-01-01
project_end: 2024-03-31
---
项目周期: `= this.project_end - this.project_start` 天属性插件
推荐插件
| 插件名称 | 功能描述 |
|---|---|
| Dataview | 属性查询和展示 |
| Templater | 自动填充属性 |
| Properties | 增强属性编辑 |
| Metadata Menu | 高级元数据管理 |
| Supercharged Links | 根据属性样式化链接 |
Metadata Menu
提供高级属性管理:
- 属性自动补全
- 属性验证
- 下拉选项
- 文件夹默认属性
常见问题
属性不显示?
- 确保 YAML 格式正确
- 检查缩进是否一致(使用空格)
- 确保使用
---分隔
属性值包含特殊字符?
使用引号包围:
yaml
title: "标题: 包含冒号"
description: '包含 "引号" 的描述'如何修改属性显示顺序?
在属性界面中拖拽调整顺序,或直接编辑 YAML。
属性太多怎么管理?
- 使用属性分组
- 创建不同类型的模板
- 使用文件夹默认属性
下一步
- 标签系统 - 标签的高级用法
- 模板系统 - 自动化属性填充
- Dataview 实战 - 属性查询进阶