#Obsidian/插件

Metadata Menu 指南

1. 简介

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

Pasted image 20230329185528|300

它有一个专有名词:Front-matter。除此之外 Obsidian 安装了 Dataview 之后还支持另一种格式 fieldName::value。可以添加在 Front-matter 之外的地方。

Metadata Menu 可以很方便的使用 UI 界面管理笔记的元数据,搭配 DataviewJS 可以实现类似 Tana 中 Supertags 的功能,甚至可以复刻出 Notion 中 Database 的效果。

官方文档

一个非常好的入门视频:

Make Tana Supertags 🦸 in Obsidian using the Metadata Menu Plugin - YouTube

2. 简单上手

Metadata Menu 提供一个模板功能,叫做 fileClass。首先创建一个文件夹,用于存放所有的 fileClass:

Pasted image 20230329173912|257

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

Pasted image 20230329174032|625

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

Pasted image 20230329174236|450

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

Pasted image 20230329174313|450

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

Pasted image 20230329174556|725

注意

虽然创建 fileClass 的界面 Aliases 一栏写着「留空以匹配和 fileClass 同名的标签」,但是我还是建议你在里面填写想要匹配的标签名,或者干脆删掉 tagNames 属性。

在空白处右键,添加一个新的 field(属性):

Pasted image 20230329175102|425

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

Pasted image 20230329175240|475

文件中就多了一行:

Pasted image 20230329175320|350

Tip

不过根本不用看懂这些都是什么,如果你想修改这个 field,可以点击 person 旁边的蓝色文件图标,打开 UI 界面。这里有三个标签页:

  • Table View:展示所有用到这个 fileClass 的文件;
  • Fileclass fileds:管理所有 fields;
  • Fileclass settings:设置该 fileClass。

依次类推,多搞几个 field。比如兴趣,支持复选;年龄,0-200 的数字等等:

Pasted image 20230329180907|675

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

Pasted image 20230329181124|525

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

Pasted image 20230329181336|575

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

Pasted image 20230329181647|475

Tip

这只是最简单的用法。实际上很多插件都会在 Metadata 中插入内容(例如 Digital GardenBanners)。利用 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
  • anime
false 99
Horsen Liu somewhere
  • coding
  • obsidian
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>

nowhere

anime

99

somewhere

coding
obsidian

24

2