Metadata Menu 指南
1. 简介
Metadata,可以翻译成「元数据」,主要用来描述一个对象的属性信息。在 Markdown 文件中,一般用一对「三连短横线」包裹元数据, 放在文件最开头位置。

它有一个专有名词:Front-matter。除此之外 Obsidian 安装了 Dataview 之后还支持另一种格式 fieldName::value。可以添加在 Front-matter 之外的地方。
Metadata Menu 可以很方便的使用 UI 界面管理笔记的元数据,搭配 DataviewJS 可以实现类似 Tana 中 Supertags 的功能,甚至可以复刻出 Notion 中 Database 的效果。
一个非常好的入门视频:
2. 简单上手
Metadata Menu 提供一个模板功能,叫做 fileClass。首先创建一个文件夹,用于存放所有的 fileClass:

在插件的设置界面设定 fileClass 的路径:

点击编辑界面右上角三个点,打开菜单,创建一个新的 fileClass:

就叫 person 好了。把 fileClass 和标签绑定在一起,方便在文件中添加 fileClass(也可以设置标签别名):

可以看到创建了一个新的文件,并初始化了一些元数据:

虽然创建 fileClass 的界面 Aliases 一栏写着「留空以匹配和 fileClass 同名的标签」,但是我还是建议你在里面填写想要匹配的标签名,或者干脆删掉 tagNames 属性。
在空白处右键,添加一个新的 field(属性):

比如说 address,然后选择一个数据类型。有非常多的种类,比如「接受任何内容」:

文件中就多了一行:

不过根本不用看懂这些都是什么,如果你想修改这个 field,可以点击 person 旁边的蓝色文件图标,打开 UI 界面。这里有三个标签页:
- Table View:展示所有用到这个 fileClass 的文件;
- Fileclass fileds:管理所有 fields;
- Fileclass settings:设置该 fileClass。
依次类推,多搞几个 field。比如兴趣,支持复选;年龄,0-200 的数字等等:

fileClass 设置好了,我们新建一篇笔记叫 Horsen Liu,然后给一个 person 的标签:

如果笔记旁边有一个蓝色的图标,说明 fileClass 已经关联到这篇笔记了。点击这个图标,填写各个 fields:

这个面板是用来选择 fields 添加的位置。如果放在笔记最顶部,会以 Front-matter 格式呈现。如果放在其他位置,则不会。

这只是最简单的用法。实际上很多插件都会在 Metadata 中插入内容(例如 Digital Garden、Banners)。利用 fileClass 可以很方便地对同类笔记的 Metadata 做统一管理,提高笔记管理的效率。
Metadata 中的属性可以被 Dataview 查询,例如:
| File | address | interests | friend | age |
| ------------------------------------------------ | --------- | ----------------------------------------- | ------ | --- |
| 刘霍森 | nowhere | <ul><li>anime</li></ul> | false | 99 |
| Horsen Liu | somewhere | <ul><li>coding</li><li>obsidian</li></ul> | true | 24 |
{ .block-language-dataview}
| File | address | interests | friend | age |
|---|---|---|---|---|
| 刘霍森 | nowhere |
|
false | 99 |
| Horsen Liu | somewhere |
|
true | 24 |
但是这样还不够过瘾,所以 Metadata Menu 提供了丰富的 API 允许和 DataviewJS 结合,实现可编辑的表格:
<div class="metadata-menu-dv-field-container address"><span></span><button style="display: none;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-edit-3"><path d="M12 20h9"></path><path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"></path></svg></button><span class="value-container"><span><p>nowhere</p></span></span><div style="display: none;"><input><button><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-check"><polyline points="20 6 9 17 4 12"></polyline></svg></button><button><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-x"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button></div><div class="spacer-1"></div></div><div class="metadata-menu-dv-field-container interests"><span></span><div class="values-container"><div class="item-container"><button style="display: none;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-x"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button><div class="label">anime</div></div><button style="display: none;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-list-plus"><path d="M11 12H3"></path><path d="M16 6H3"></path><path d="M16 18H3"></path><path d="M18 9v6"></path><path d="M21 12h-6"></path></svg></button><div class="spacer-1" style="display: none;"></div><div class="spacer-2"></div></div></div><div class="metadata-menu-dv-field-container friend"><span></span><input type="checkbox"></div><div class="metadata-menu-dv-field-container age"><span></span><span class="value-container"><span><p>99</p></span></span><button style="display: none;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon left-arrow"><path d="M16.5 3.5L7.5 12.5L16.5 21.5"></path></svg></button><button style="display: none;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-diff"><path d="M12 3v14"></path><path d="M5 10h14"></path><path d="M5 21h14"></path></svg></button><button style="display: none;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon right-arrow"><path d="M7.5 21.5L16.5 12.5L7.5 3.5"></path></svg></button><div class="spacer-3"></div></div><div class="metadata-menu-dv-field-container address"><span></span><button style="display: none;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-edit-3"><path d="M12 20h9"></path><path d="M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z"></path></svg></button><span class="value-container"><span><p>somewhere</p></span></span><div style="display: none;"><input><button><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-check"><polyline points="20 6 9 17 4 12"></polyline></svg></button><button><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-x"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button></div><div class="spacer-1"></div></div><div class="metadata-menu-dv-field-container interests"><span></span><div class="values-container"><div class="item-container"><button style="display: none;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-x"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button><div class="label">coding</div></div><div class="item-container"><button style="display: none;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-x"><line x1="18" y1="6" x2="6" y2="18"></line><line x1="6" y1="6" x2="18" y2="18"></line></svg></button><div class="label">obsidian</div></div><button style="display: none;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-list-plus"><path d="M11 12H3"></path><path d="M16 6H3"></path><path d="M16 18H3"></path><path d="M18 9v6"></path><path d="M21 12h-6"></path></svg></button><div class="spacer-1" style="display: none;"></div><div class="spacer-2"></div></div></div><div class="metadata-menu-dv-field-container friend"><span></span><input type="checkbox"></div><div class="metadata-menu-dv-field-container age"><span></span><span class="value-container"><span><p>24</p></span></span><button style="display: none;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon left-arrow"><path d="M16.5 3.5L7.5 12.5L16.5 21.5"></path></svg></button><button style="display: none;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon lucide-diff"><path d="M12 3v14"></path><path d="M5 10h14"></path><path d="M5 21h14"></path></svg></button><button style="display: none;"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svg-icon right-arrow"><path d="M7.5 21.5L16.5 12.5L7.5 3.5"></path></svg></button><div class="spacer-3"></div></div><div><table class="dataview table-view-table"><thead class="table-view-thead"><tr class="table-view-tr-header"><th class="table-view-th"><span></span><span class="dataview small-text">2</span></th><th class="table-view-th"><span></span></th><th class="table-view-th"><span></span></th><th class="table-view-th"><span></span></th><th class="table-view-th"><span></span></th></tr></thead><tbody class="table-view-tbody"><tr><td><span></span></td><td><span></span></td><td><span></span></td><td><span></span></td><td><span></span></td></tr><tr><td><span></span></td><td><span></span></td><td><span></span></td><td><span></span></td><td><span></span></td></tr></tbody></table></div>
| 2 | ||||
|---|---|---|---|---|