思源笔记简易指北

002 - 思源笔记的文件格式

思源笔记采用开放明文格式 json 去保存笔记内容,并将后缀名命名为 .sy

这一格式在笔记软件中其实十分常见,笔记软件中,Excalidraw、Tana、Obsidian 的 canvas 都采用这一格式存储内容。json 可以存储更多内容。

为什么采用 json 而非 markdown

在极早期,思源笔记采用自家的 WYSIWYG 编辑器 vditor 作为思源编辑器时,用的是 markdown 格式。

但随着思源笔记的不断迭代,基于开发团队对块特性的愿景、性能等多方面考虑,最终决定转而使用 json 使用并开发了新的 protyle 编辑器。

json 为思源笔记带来了什么?

:sparkles: 文档也是块。

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": "的。"
				}
			]
		}
	]
}