内容的基本单位
正文
段落(Paragraph) 每个具体的段落,具备唯一的 Identifier (_id) ,一个段落可以被反复编辑。因为段落要表达的意思,是可以通过一个"标题"进行抽象的,段落间如何组织先后顺序,是在"标题"与"段落"的关联关系中进行记录。
paragraph = {_id, text}
例子
[{
"_id": { "$oid": "6454c6b0280ed6fd73c3969d" },
"text": "在本书中,我认为,西方缘何主宰世界的问题实际上是关于社会发展的问题。这里的社会发展是指社会达成目标的能力,即社会通过影响物理、经济、社会、智力等环境以达到相应目标。19~20世纪,西方观察家讲社会发展视为理所当然的好事。他们含蓄或者公开地说,发展就是进步(或者进化,或者历史),而进步——不管是向着上帝、富裕还是人民的天堂——是生活的意义。现在,这些意义似乎不那么显而易见了。很多人感到,社会发展过程中带来的种种弊端,如环境恶化、战争、不平等和幻想破灭,要远比收益多得多。"
},{
"_id": { "$oid": "6454c6e6280ed6fd73c396a0" },
"text": "\"历史:名词,指一种往往虚假的记录,记录的大多是无关紧要的事情。这些事情由统治者和军人引起,这统治者大多是无赖,而军人往往是傻子。\"安布鲁斯·比尔斯(Ambrose Bierce)关于历史的这条风趣的定义,有时你不得不赞同:看起来历史似乎仅仅是一件讨厌的事情接着另一件,是天才和傻子,暴君和浪漫派、诗人和盗贼混杂在一起的一团乱麻,或创造非凡之举,或在堕落边缘挣扎。"
},{
"_id": { "$oid": "6454c716280ed6fd73c396a1" },
"text": "第一种工具是生物学,生物学告诉我们,真实的人类是什么——聪明的猿猴。我们是动物王国的一部分,而动物王国又是从大型人猿到变形虫的更为广袤的生命帝国的一部分,这一明显的事实带来了三个重要结果。第一个结果是,和所有生命形式一样,我们之所以能够生存是因为我们从环境中摄取能量,并且用此能量繁衍生息。第二个结果是,能像所有智慧的动物一样,我们有好奇心。我们总是在修修补补,思索着哪些东西能吃,哪些东西能玩,哪些东西能加以改进。"
},{
"_id": { "$oid": "6454c811280ed6fd73c396ae" },
"text": "这里就需要引入第二种工具——社会学。社会学同时告诉我们,什么导致了社会变化,社会变化又带来了什么,聪明的猿猴围坐在一起修修补补是一回事儿,他们的奇思妙想流行开来改变社会又是另一会事儿。"
},{
"_id": { "$oid": "6455e7fa732b4449dc6f38d4" },
"text": "test"
}]
段落与标题(Outline)
r_outline_paragraph = {_id, paragraph_id, outline_id, next_paragraph_id, prev_paragraph_id}
例子
{
"_id": { "$oid": "645669da732b4449dc6f3a15" },
"paragraph_id": { "$oid": "6454c6b0280ed6fd73c3969d" },
"outline_id": { "$oid": "645602f4732b4449dc6f38e5" },
"next_paragraph_id": { "$oid": "6454c6e6280ed6fd73c396a0" }
}
通过标题查询相关段落
[
{
$match: {
paragraph_id: ObjectId(
"6454c6b0280ed6fd73c3969d"
),
},
},
{
$graphLookup: {
from: "r_outline_paragraph",
startWith: "$paragraph_id",
connectFromField: "next_paragraph_id",
connectToField: "paragraph_id",
as: "rs",
},
},
{
$project: {
rs: 1,
_id: 0,
},
},
{
$unwind: {
path: "$rs",
},
},
{
$replaceRoot: {
newRoot: "$rs",
},
},
{
$lookup: {
from: "paragraph",
localField: "paragraph_id",
foreignField: "_id",
as: "results",
},
},
{
$project: {
paragraph: {
$arrayElemAt: ["$results", 0],
},
next_id: "$next_paragraph_id",
_id: 0,
},
},
{
$replaceRoot:
/**
* replacementDocument: A document or string.
*/
{
newRoot: {
$mergeObjects: ["$paragraph", "$$ROOT"],
},
},
},
{
$project: {
paragraph: 0,
},
},
]
查询结果
[
{
"_id": { "$oid": "6454c6b0280ed6fd73c3969d" },
"text": "在本书中,我认为,西方缘何主宰世界的问题实际上是关于社会发展的问题。这里的社会发展是指社会达成目标的能力,即社会通过影响物理、经济、社会、智力等环境以达到相应目标。19~20世纪,西方观察家讲社会发展视为理所当然的好事。他们含蓄或者公开地说,发展就是进步(或者进化,或者历史),而进步——不管是向着上帝、富裕还是人民的天堂——是生活的意义。现在,这些意义似乎不那么显而易见了。很多人感到,社会发展过程中带来的种种弊端,如环境恶化、战争、不平等和幻想破灭,要远比收益多得多。",
"next_id": { "$oid": "6454c6e6280ed6fd73c396a0" }
},{
"_id": { "$oid": "6454c811280ed6fd73c396ae"},
"text": "这里就需要引入第二种工具——社会学。社会学同时告诉我们,什么导致了社会变化,社会变化又带来了什么,聪明的猿猴围坐在一起修修补补是一回事儿,他们的奇思妙想流行开来改变社会又是另一会事儿。"
},{
"_id": { "$oid": "6454c6e6280ed6fd73c396a0"},
"text": "\"历史:名词,指一种往往虚假的记录,记录的大多是无关紧要的事情。这些事情由统治者和军人引起,这统治者大多是无赖,而军人往往是傻子。\"安布鲁斯·比尔斯(Ambrose Bierce)关于历史的这条风趣的定义,有时你不得不赞同:看起来历史似乎仅仅是一件讨厌的事情接着另一件,是天才和傻子,暴君和浪漫派、诗人和盗贼混杂在一起的一团乱麻,或创造非凡之举,或在堕落边缘挣扎。",
"next_id": { "$oid": "6454c716280ed6fd73c396a1" }
},{
"_id": { "$oid": "6454c6b0280ed6fd73c3969d" },
"text": "在本书中,我认为,西方缘何主宰世界的问题实际上是关于社会发展的问题。这里的社会发展是指社会达成目标的能力,即社会通过影响物理、经济、社会、智力等环境以达到相应目标。19~20世纪,西方观察家讲社会发展视为理所当然的好事。他们含蓄或者公开地说,发展就是进步(或者进化,或者历史),而进步——不管是向着上帝、富裕还是人民的天堂——是生活的意义。现在,这些意义似乎不那么显而易见了。很多人感到,社会发展过程中带来的种种弊端,如环境恶化、战争、不平等和幻想破灭,要远比收益多得多。",
"next_id": { "$oid": "6454c6e6280ed6fd73c396a0" }
}
]
大纲(Outline)
大纲是在书的内部对内容的抽象,可以分多级,数字化的。具体的可以用名称对常用的级别进行命名。
Joint = {_id, Title}
但大纲本身没有分级,而是通过目录进行编排的。
目录(Contents)
- 部 Part (一级)
- 章 Chapter (二级)
- 节 Section(三级)
- 篇 Section/Segment/Fragment (四级)
Contents = {_id, [Outline_id, [Outline_id, ...]]}
图书的内容关联
段落生命周期 Lifecycle of Paragraph
段落和大纲的生命周期,是产生实际的链接所决定的。
当一个段落与大纲产生链接时,段落与大纲之间就产生了"被引用"和"具象化"的实际关系。
段落映射 ParagraphMap = {_id, Outline_id, [LinkedParagraph_id]}
大纲生命周期 Lifecycle of Outline
当一个大纲与图书产生链接时,大纲与图书之间就产生了"被引用"和"具象化"的实际关系。
大纲中的标题(Title)在一本书的命名空间内,都可以重复,其有效性通过有无被引用决定。
在同一个命名空间内,同一个大纲可以被重复引用。
作者 Author = {_id, Name}
出版社 Publisher = {_id, Name}
图书 Book = {_id, ISBN, Title, Subtitle, [Author_id], Publisher_id, Contents_id, ParagraphMap_id}