-
Notifications
You must be signed in to change notification settings - Fork 0
需求规格说明报告
词条是该软件中管理知识的基本单位,相当于百度百科中的词条概念。一个词条主要由富文本组成,包括带样式的文本、图片等。为了降低用户的理解难度,将对软件中支持的文本样式做出限制,如行间距、段间距等比较次要的样式将不能被用户修改,而加粗、斜体等关键样式将可以修改。用户可以新建、编辑、删除词条。
每个词条必须有一个纯文本标题作为其唯一标识符,还可以有若干个标签用来对词条做分类。标题和标签的具体设置取决于用户。
该软件的特色是,众多的词条并非是通过树状的目录来管理的,而是通过知识图谱来管理的,具体地:
- 词条之中可以插入指向其他词条的超链接,阅读时点击超链接即可跳转到指向的词条。
- 用户可以设置一些常用或关键的词条为“锚点”,用户可以通过锚点窗口跳转到锚点词条,无论用户现在打开了什么词条。
- 除此之外,用户还可以通过按标题搜索,按标签搜索,访问的历史记录来找到词条。
一个标签有一个字符串和一个颜色作为其属性,该字符串是标签的唯一标识符。
用户可以新建、删除标签(会使得所有词条上的该标签都被删除),在词条上加入或者删除标签,还可以修改一个标签对应的颜色和文本(会使得所有词条上的该标签都被修改)。
在我们的设计中,词条是由“块”组成的,是块的序列。一个块对应着词条中的一个自然段或者其他多媒体块。软件支持的块类型至少包括文本块、标题块(不同于词条的标题)、代码块、公式块,并可以在软件形成雏形之后继续开发其他的块。
这样的设计的好处有:
- 用户在编辑一个块时,其余的块渲染出来的内容不会改变,可以提高程序速度。
- 通过块机制,可以根据需要在编辑器中插入不同类型的控件。如果不使用块机制而直接使用单个的富文本编辑器(如QTextEdit)则会导致一些需要逻辑的词条成分(如代码块)难以实现。
在打开一个词条时,软件将会显示其大纲,实际上是词条中所有标题块组成的序列。点击大纲的项即可跳转到对应的标题。
为了方便用户的编辑和阅读,我们允许用户同时打开多个词条,这些不同的将以标签页的形式显示,类似于浏览器。在用户点击超链接跳转时,会新建一个标签页来显示目的位置的词条,原来的标签页仍然保留。
库是词条的集合,可以表示一门学科、一个方向上的知识库,保存着若干个词条和若干个标签。在保存为文件时,是以库为单位来保存的,词条没有独立的文件,一个库对应着一个文件。库的位置是由用户管理的,但是软件仍然会试图记住以前打开过的库的路径,以便用户取用。一旦用户移动了库,导致软件在对应位置找不到该库文件,软件就会忘记该库的路径。
用户可以选择若干个库,然后将其合并。对应的标签、词条、锚点都将取并集。
为了不至于导致混乱,用户将有机会选择合并策略:
- 不同库的同名标签:
- 合并为一个标签
- 自动重命名,如来自A库的B标签将被重命名为“A-B”。后续用户可以对这些标签重新重命名
- 不同库的同名词条
- 自动重命名
- 是否标记来自不同的库
- 对于每个库:为所有来自该库的词条加上一个新的标签
- 不区分来自哪个库,所有词条混合存放
用户也可以选择把一个库中的部分词条导出为另一个库。
- 新的标签集为每个选择的词条集用到的标签集的并集
- 新的锚点集为选择的词条集和原锚点集的交集
- 如果出现了被选择的词条通过超链接指向了未被选择的词条,则应该将该超链接转化为一般文本
用户可以在多个库中进行搜索,搜索结果是各个库的搜索结果的并集。在选择这多个库时,用户首先在软件能记住路径的库中勾选,然后可以导入软件未能记住其路径的库。
如果其他内容都能按时完成,可以考虑加入一些高级功能,比如
- 将所有符合(按标签查找表达式)的词条都加上一个标签
- 合并两个标签为一个新的标签,所有原先有这两个标签中至少一个的词条将失去这两个标签,同时加上一个新的标签
等等
具体的方法可能是控制台或者在工具栏加入一个新的GUI按钮