WizNote 为知笔记 macOS 本地文件夹分析

文章目录

本文分析为知笔记 WizNote for Mac 2.8.7(2020.8.20 10:28) 本地文件夹结构以及数据库结构。

WizNote for Mac 2.8.7(2020.8.20 10:28)

分析这些信息,目的是为了从为知笔记转向其他的笔记系统。我写了一个 WizNote 向 Joplin 转换的工具,详见: WizNote to Joplin

文件夹结构

~/.wiznote/

我使用的Wiznote 版本不是在 AppStore 下载的,因此软件文件夹位于 ~/.wiznote/

WizNote 下载版在 macOS 上的文件夹

~/.wiznote/wiznote.ini

为知笔记的配置文件,其中包含用户 GID 等信息。

~/.wiznote/cache/

  • avatar/ 不重要,略过
  • editor/ 不重要,略过
  • plugins/ 包含 markdown 插件。大量为知笔记的插件在 macOS 下无法使用。这里我只看到了 markdown 一个插件。应该是官方提供。

~/.wiznote/log/

为知笔记本地日志,以及同步日志。

~/.wiznote/templates/

为知笔记的模版,虽然我从来不用。

其中的 .wiz 文件是一个 zip 压缩包,解压后可以得到 index.htmlindex_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.htmlindex_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 文章的 GUID
  • ABSTRACT_TYPE 数据库中的固定值为 PAD,不知道是否有其他值
  • ABSTRACT_TEXT 文章的摘要内容,最长 3000 字节
全文完