002 - 思源笔记的文件格式
思源笔记采用开放明文格式 json
去保存笔记内容,并将后缀名命名为 .sy
。
这一格式在笔记软件中其实十分常见,笔记软件中,Excalidraw、Tana、Obsidian 的 canvas 都采用这一格式存储内容。json 可以存储更多内容。
为什么采用 json
而非 markdown
?
在极早期,思源笔记采用自家的 WYSIWYG
编辑器 vditor
作为思源编辑器时,用的是 markdown
格式。
但随着思源笔记的不断迭代,基于开发团队对块特性的愿景、性能等多方面考虑,最终决定转而使用 json
使用并开发了新的 protyle
编辑器。
json 为思源笔记带来了什么?
文档也是块。
json
使得思源的块在使用上更加灵活方便,带有额外的语义、数据
思源的任意块都与文档一样,带有内置、数据库、自定义三种属性,同时拥有唯一 ID、创建时间、更新时间。换个容易理解的说法,对 obsidian 用户而言,思源笔记的每一个块都带有一个 yaml
属性,而对 notion 用户来说,思源不止支持将一篇文档添加到数据库中,还能支持将文档中的单个块添加到不同的数据库中。
具体案例
%% 文档名:未命名 %%
## markdown格式是怎样的
这是一段文字,我们看看`markdown`是==怎样存储==的。
{
"ID": "20241002165245-c2iljn4",
"Spec": "1",
"Type": "NodeDocument",
"Properties": {
"id": "20241002165245-c2iljn4",
"title": "未命名",
"type": "doc",
"updated": "20241002165328"
},
"Children": [
{
"ID": "20241002165245-8c2bpe1",
"Type": "NodeHeading",
"HeadingLevel": 2,
"Properties": {
"id": "20241002165245-8c2bpe1",
"updated": "20241002165328"
},
"Children": [
{
"Type": "NodeText",
"Data": "Json格式是怎样的"
}
]
},
{
"ID": "20241002165301-xutvdkg",
"Type": "NodeParagraph",
"Properties": {
"id": "20241002165301-xutvdkg",
"updated": "20241002165328"
},
"Children": [
{
"Type": "NodeText",
"Data": "这是一段文字,我们看看"
},
{
"Type": "NodeTextMark",
"TextMarkType": "code",
"TextMarkTextContent": "json"
},
{
"Type": "NodeText",
"Data": "是"
},
{
"Type": "NodeTextMark",
"TextMarkType": "mark",
"TextMarkTextContent": "怎样存储"
},
{
"Type": "NodeText",
"Data": "的。"
}
]
}
]
}