惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
罗磊的独立博客
宝玉的分享
宝玉的分享
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
V2EX
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
博客园_首页
量子位
月光博客
月光博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
爱范儿
爱范儿
S
SegmentFault 最新的问题
雷峰网
雷峰网
小众软件
小众软件
博客园 - 聂微东
美团技术团队
Apple Machine Learning Research
Apple Machine Learning Research
WordPress大学
WordPress大学
Jina AI
Jina AI
Hugging Face - Blog
Hugging Face - Blog

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
如何使用 Obsidian 搭建一套简单灵活的金字塔结构知识库 - 少...
2024-01-16 · via 少数派

引言

Obsidian 是一款受到全球用户热爱的强大知识管理工具。它的功能强大而灵活,但就像所有功能丰富的工具一样,Obsidian 也有它的挑战,很多用户在海量插件和复杂的系统设置中迷失了方向,知识库越做越复杂,将越来越多的精力花费在整理而非是考上。

这篇博客的目的就是向大家介绍如何用 Obsidian 搭建一个既简单又灵活的金字塔式知识库。这样的结构不仅能保持知识库的整齐有序,还能灵活地进行扩展和调整。

点击链接可以直接查看示例知识库。

知识库搭建原则

简单性

知识库是为了减轻记忆负担,帮助人们更好的思考。要做到这一点,最重要的原则就是保持简单。过分复杂的设置和分类会增加学习成本,而且可能导致日后的使用效率低下。我们的目标是尽可能减少插件的使用,专注于内容的创作和整理,而不是不断学习和调整工具的使用方法。

同时在也要避免繁琐的重复操作,以节省时间和精力。

灵活性

灵活性是另一个关键原则。知识库的内容和需求随时间而变化,所以构建一个易于调整和扩展的知识库非常重要。我们需要的是一个能够随着新信息的加入而自然演化的系统,而不是一成不变的框架。灵活性确保了知识库能够适应不同用户的需求,以及不断变化的信息结构。

结构化

“结构是记忆的支架。” 我们需要建立一套清晰、有序的信息存储和检索系统,来帮助我们快速找到所需信息,并且保持知识库的整体连贯性和一致性。大量的实践和经验表明,纵向的金字塔结构是最有效的结构之一。

搭建步骤

设置 Obsidian

在 Obsidian 中,我们的目标是用尽可能少的工具实现高效的知识管理。为此,我们主要依赖两个功能:Property 和 Dataview 插件。这两个功能能帮助我们创建清晰的结构,同时保持系统的简单性。

  1. Property:这个功能允许我们在笔记中设置属性和 metadata。
  2. Dataview 插件:Dataview 插件是 Obsidian 中的一个强大工具,它允许我们基于笔记的属性进行高级查询和视图生成。需要在设置中勾选 dataview 插件的 Enable JavaScript Queries.

笔记格式和模板

  • 在 Properties 中使用“parent”属性:为笔记设置一个或多个父笔记。这不需要非常精确,但可以帮助我们理解笔记之间的关系。Parent 类型需要设置为 list,并且使用“[[”来输入笔记标题,输入完成后按下回车。
  • 使用 Dataview 查询子笔记:我们可以利用 Dataview 插件来查询和展示一个笔记的所有子笔记。
  • 在必要时使用 Dataview 生成完整子笔记目录:对于较高层次的目录,如项目或领域,我们可以使用 Dataview 生成其下所有子笔记的目录,以便形成整体印象,并快速访问和浏览。

Dataview 代码

使用如下代码块在页面中查询子页面,并显示为列表

```dataview
LIST
WHERE
    contains(file.frontmatter.parent, "[[" + this.file.name + "]]")
    ```

使用如下代码块在页面中查询所有子页面和子页面的子页面,并以层级的方式显示为表格。需要在设置中勾选 dataview 插件的 Enable JavaScript Queries.

```dataviewjs
function findChildren(pageFile, maxDepth = 99, depth = 0, parentChildren = null) {
    let allChildren = [];
    if (depth >= maxDepth){
        return allChildren;
    }
    let pageName = pageFile.file.name;
    let children = dv.pages()
        .where(p => p.file.frontmatter.parent && p.file.frontmatter.parent.includes("[[" + pageName + "]]"))
        .map(p => ({ page: p, depth: depth }));

    if (parentChildren != null) {
        parentChildren[parentChildren.length - 1].isLastChild = children.length === 0;
    }

    children.forEach((child, index) => {
        child.isLastChild = index === children.length - 1; // Mark if it's the last child
        allChildren.push(child);
        allChildren = allChildren.concat(findChildren(child.page, maxDepth, depth + 1, children));
    });

    return allChildren;
}

function displayHierarchy(children, showDepth = 99) {
    let rows = [];
    children.forEach(child => {
        let prefix = "";
        if (child.depth == 0){
            prefix = "### ";
        }
        else if (child.depth == 1){
            if (child.isLastChild){
                prefix = "└── ";
            }
            else{
                prefix = "├── ";
            }
        }
        else{
            if (child.isLastChild){
                prefix = "" + "│  ".repeat((child.depth - 1) * 1) + "└── ";
            }
            else{
                prefix = "" + "│  ".repeat((child.depth - 1) * 1) + "├── ";
            }
        }

        let linkPath = child.page.file.path;
        let fileLink = dv.fileLink(linkPath, false, "Link")
        let suffix = child.isLastChild ? " (Final Page)" : "";
        if (child.depth <= showDepth){
            rows.push([prefix + child.page.file.name, fileLink]);
        }
    });
    return rows;
}

let currentPageName = dv.current();
let childPages = findChildren(currentPageName);
dv.table(["Child Pages", "Link"], displayHierarchy(childPages));
```

PS:可以调整上述代码中的 findChildren 的参数 maxDepth,以仅显示一定层级的页面。比如讲 maxDepth 设置为 2,则只显示 2 层子页面。

示例

我的工作流

新建页面与设置父页面

在 Obsidian 中新建页面时,我们可以为其指定一个或多个父页面。这个过程不需要过分精确,主要目的是标记这个新页面在知识库中的大致位置。例如,如果你正在写一篇关于某个特定项目的笔记,你可以将这个项目的主页面设为父页面。这种灵活性允许用户在初步构建知识库时快速行动,随后再根据需要进行细致的整理。

如果是待处理的页面,将父页面设置为 inbox 或者 todo。

整理父页面

当某个父页面下子页面较多且明显不属于同一层级后,再进行分组和整理。

比如 PKM 下有如下子页面,比较凌乱。

通过将类似的概念分到一类,并为分类新建页面以及调整层级,得到如下整理后的目录。

示例知识库

这是一个简单的示例,顶层页面是目录页,其下包括 Database、Areas 和 Projects。

优点

全局视野

这种结构允许用户在文件头部直观地看到其上级和下级页面,并且可以查看树状的子页面结构,从而更容易形成对整体内容的印象

在传统的 MOC(Map of Content)页面维护方式中,用户需要依赖外链和回链来识别上下级关系,但这种方法往往混杂着其他横向的链接,使得全局视野变得模糊,难以捕捉知识库的整体结构。

灵活

当用户想更改笔记层级时,只需要打开指定笔记,调整 parent 属性即可。

简单

不需要使用文件夹和标签。可以秉承极简的原则,不使用这些功能;或者留作它用。

结语

这篇博客简单探讨了如何使用 Obsidian 来打造一个既简单又有效的金字塔式知识库,希望这些内容能够对大家有所启发,提供一些实用的思路。

读者朋友们可以根据自己的实际需求,灵活调整和优化知识库的结构。每个人对于知识管理的需求各不相同,Obsidian 强大而灵活的功能,正好能够满足这些多样化的需求。通过本文,如果能给大家带来一些新的思考,或者对于如何更好地利用 Obsidian 有所帮助,那就再好不过了。