WizNote 为知笔记 macOS 本地文件夹分析
文章目录
本文分析为知笔记 WizNote for Mac 2.8.7(2020.8.20 10:28) 本地文件夹结构以及数据库结构。
分析这些信息,目的是为了从为知笔记转向其他的笔记系统。我写了一个 WizNote 向 Joplin 转换的工具,详见: WizNote to Joplin 。
文件夹结构
~/.wiznote/
我使用的Wiznote 版本不是在 AppStore 下载的,因此软件文件夹位于 ~/.wiznote/
。
~/.wiznote/wiznote.ini
为知笔记的配置文件,其中包含用户 GID 等信息。
~/.wiznote/cache/
- avatar/ 不重要,略过
- editor/ 不重要,略过
- plugins/ 包含 markdown 插件。大量为知笔记的插件在 macOS 下无法使用。这里我只看到了 markdown 一个插件。应该是官方提供。
~/.wiznote/log/
为知笔记本地日志,以及同步日志。
~/.wiznote/templates/
为知笔记的模版,虽然我从来不用。
其中的 .wiz
文件是一个 zip 压缩包,解压后可以得到 index.html
和 index_files/
文件夹,其中包含模版使用的图像文件等。
~/.wiznote/登录邮箱文件夹/
这个文件夹中是特定用户的数据。包括对应用户的所有本地文章等等。这是最重要的数据。例如我的为知账户文件夹大小为 815.2MB
。
以下所有文件或文件夹均以 ~/wiznote/登录邮箱文件夹/
为父文件夹。
wiznote.ini
这个配置文件就比上级文件夹下的同名文件内容要复杂多了。
[FolderPosition]
存储的是所有目录的排序。键名是目录的名称。碰到中文就用 URL 转义了。[TreeState]
存储的是目录树状态。奇怪的是,这里没有像上面一样使用目录名称做键名,而是改用了 GID。true
代表有子目录,false
代表没有子目录。SelectedItemID
代表当前选择的目录是哪个。每次选择目录后,这个 ini 文件会被更新。- 另外两个不重要的配置
[Theme]
和[MarkdownTemplate]
就不强行解释了。
analyzer.ini/analyzerEx.ini
应该不重要,不强行解释。
data/
最重要的文件夹。 所有本地内容均在此。
data/attachmets/
文档附件。文件名为 {GUID}原始文件名.原始扩展名
,中文也未做转义。
data/index.db
主数据库,SQLite 格式。
data/wizthumb.db
文章的摘要数据库,SQLite格式,或许用于搜索?
data/notes/
所有文章压缩包。每个文件名为 {GUID}
,没有扩展名。解压后包含 index.html
和 index_files/
文件夹,文件夹中包含所有文档使用的图片文件。
group/
团队笔记。其中的文件夹为用户的 GUID,每个用户的子文件夹结构与 data/
文件夹相同。
数据库结构
index.db
WIZ_DELETED_GUID
无内容,不解释。
1CREATE TABLE WIZ_DELETED_GUID
2(
3 DELETED_GUID char(36) not null,
4 GUID_TYPE int not null,
5 DT_DELETED char(19),
6 primary key (DELETED_GUID)
7)
WIZ_DOCUMENT
最重要的表。
1CREATE TABLE WIZ_DOCUMENT
2(
3 # 文档的 GUID
4 DOCUMENT_GUID char(36) not null,
5 # 文档标题
6 DOCUMENT_TITLE varchar(768) not null,
7 # 文档位于为知目录树中的路径
8 DOCUMENT_LOCATION varchar(768),
9 # 文档的标题文件名,ziw 格式,标题中的空格被替换成 _,估计这个字段没有使用了,因为 notes 文件夹中的文件名均为 GUID。也有可能这个字段是在 Windows 中使用的。
10 DOCUMENT_NAME varchar(300),
11 # 大部分没有值,有些值为 GUID,不明其意
12 DOCUMENT_SEO varchar(300),
13 # 如果是采集的文章,那么就包含采集的 URL,否则为 NULL
14 DOCUMENT_URL varchar(2048),
15 # 大部分文章为 NULL,可能是采集时的作者标题
16 DOCUMENT_AUTHOR varchar(150),
17 # 大部分文章为 NULL
18 DOCUMENT_KEYWORDS varchar(300),
19 # 部分文章为 document,猜测与内链有关。包含内链或者被内链的文章为 document,直接采集的文章为 webclip/webnote ,编辑过的文章的 document。
20 DOCUMENT_TYPE varchar(20),
21 # 值为用户邮箱
22 DOCUMENT_OWNER varchar(150),
23 # att/html 或者扩展名格式,例如 .xls/.doc/.jpg/.html
24 DOCUMENT_FILE_TYPE varchar(20),
25 STYLE_GUID char(38),
26 DT_CREATED char(19),
27 DT_MODIFIED char(19),
28 DT_ACCESSED char(19),
29 DOCUMENT_ICON_INDEX int,
30 DOCUMENT_SYNC int,
31 DOCUMENT_PROTECT int,
32 DOCUMENT_READ_COUNT int,
33 # 附件数量,默认为 0
34 DOCUMENT_ATTACHEMENT_COUNT int,
35 DOCUMENT_INDEXED int,
36 DT_INFO_MODIFIED char(19),
37 DOCUMENT_INFO_MD5 char(32),
38 DT_DATA_MODIFIED char(19),
39 DOCUMENT_DATA_MD5 char(32),
40 DT_PARAM_MODIFIED char(19),
41 DOCUMENT_PARAM_MD5 char(32),
42 WIZ_VERSION int64,
43 # 下面两个 CHANGED 是同时改变的
44 INFO_CHANGED int default 1,
45 DATA_CHANGED int default 1,
46 primary key (DOCUMENT_GUID)
47)
WIZ_DOCUMENT_ATTACHMENT
附件表。
1CREATE TABLE WIZ_DOCUMENT_ATTACHMENT
2(
3 # 附件的 GUID
4 ATTACHMENT_GUID char(36) not null,
5 # 附件所属文档的 GUID
6 DOCUMENT_GUID varchar(36) not null,
7 # 附件加入时的文件名和扩展名
8 ATTACHMENT_NAME varchar(768) not null,
9 # 若不为 NULL,则为附件在硬盘上的完整路径(加入时)
10 ATTACHMENT_URL varchar(2048),
11 ATTACHMENT_DESCRIPTION varchar(600),
12 DT_INFO_MODIFIED char(19),
13 ATTACHMENT_INFO_MD5 char(32),
14 DT_DATA_MODIFIED char(19),
15 ATTACHMENT_DATA_MD5 char(32),
16 WIZ_VERSION int64,
17 primary key (ATTACHMENT_GUID)
18)
WIZ_TAG
所有 TAG 的定义,不需要解释。
1CREATE TABLE WIZ_TAG
2(
3 TAG_GUID char(36) not null,
4 TAG_GROUP_GUID char(36),
5 TAG_NAME varchar(150),
6 TAG_DESCRIPTION varchar(600),
7 DT_MODIFIED char(19),
8 WIZ_VERSION int64,
9 TAG_POS int64,
10 primary key (TAG_GUID)
11)
WIZ_DOCUMENT_TAG
TAG 与文档的对应关系表。不需要解释。
1CREATE TABLE WIZ_DOCUMENT_TAG
2(
3 DOCUMENT_GUID char(36) not null,
4 TAG_GUID char(36) not null,
5 primary key (DOCUMENT_GUID, TAG_GUID)
6)
WIZ_META
部分配置文件,不需要解释。
1CREATE TABLE WIZ_META
2(
3 META_NAME varchar(50),
4 META_KEY varchar(50),
5 META_VALUE varchar(3000),
6 DT_MODIFIED char(19),
7 primary key (META_NAME, META_KEY)
8)
WIZ_OBJECT_EX
所有的对象的 GUID 表。其中 OBJECT_TYPE 值为 document/attachment
,应该是方便寻找所有对象的 GUID。
1CREATE TABLE WIZ_OBJECT_EX
2(
3 OBJECT_GUID char(36) not null,
4 OBJECT_TYPE char(20) not null,
5 OBJECT_RESERVED1 int,
6 OBJECT_RESERVED2 int,
7 OBJECT_RESERVED3 int,
8 OBJECT_RESERVED4 int,
9 OBJECT_RESERVED5 varchar(200),
10 OBJECT_RESERVED6 varchar(500),
11 OBJECT_RESERVED7 varchar(1000),
12 OBJECT_RESERVED8 varchar(5000),
13
14 primary key (OBJECT_GUID, OBJECT_TYPE)
15)
wizthumb.db
仅包含一个表。
WIZ_ABSTRACT
ABSTRACT_GUID
文章的 GUIDABSTRACT_TYPE
数据库中的固定值为 PAD,不知道是否有其他值ABSTRACT_TEXT
文章的摘要内容,最长 3000 字节
- 文章ID:2746
- 原文作者:zrong
- 原文链接:https://blog.zengrong.net/post/analysis-of-wiznote/
- 版权声明:本作品采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可,非商业转载请注明出处(原文作者,原文链接),商业转载请联系作者获得授权。