说明
KnowledgeNet 表示一个很多知识节点组成的网状结构
我们抽取了两个模型
1 KnowledgeNet
一个KnowledgeNet实例就表示一个知识网
2 KnowledgeNode
一个知识网中有很多知识节点,一个KnowledgeNode实例表示 一个知识节点
每个KnowledgeNode都有多个前置知识节点(如果要学C知识节点,必须先学会A,B这两个知识节点,我们就把A,B叫做C的前置知识节点)
反之
每个KnowledgeNode都有多个后续知识节点(如果要学E,F知识节点,必须先学会D知识节点,我们就把E,F叫做D的后续知识节点)
KnowledgeNode 有五个属性
id: 全局唯一
name: 知识节点名称
desc: 知识节点描述
parents: 所有前置知识节点数组(在掌握这个知识节点之前,需要先掌握的直接关联的知识节点)
children: 所有后续知识节点数组(在掌握这个知识节点之后,可以进一步掌握的直接关联的知识节点)
每个 KnowledgeNet 会用一个 xml 文件来持久化
xml 结构如下
<KnowledgeNet>
<nodes>
<node id="k1">
<name>xxx<name>
<desc>xxx</desc>
</node>
<node id="k2">
<name>xxx<name>
<desc>xxx</desc>
</node>
<node id="k3">
<name>xxx<name>
<desc>xxx</desc>
</node>
</nodes>
<relations>
<relation>
<parent node_id="k1"/>
<child node_id="k2"/>
</relation>
<relation>
<parent node_id="k1"/>
<child node_id="k3"/>
</relation>
</relations>
</KnowledgeNet>
xml 结构说明
每个 node 表示一个知识节点
每个 relation 表示两个知识节点的前置后续关系
需要做的事情
1 实现 KnowledgeNet KnowledgeNode 两个类的逻辑
具体API如下
# 解析 xml 为 KnowledgeNet 实例
#1.xml 的位置文件位置是 rails_root/config/knowledge_nets/1.xml
knowledge_net = KnowledgeNet.load_xml_file("1.xml")
# 返回没有 parents(前置知识节点) 的KnowledgeNode 实例
knowledge_nodes = knowledge_net.root_nodes
knowledge_nodes.each do |node|
node.id
node.name
node.desc
node.parents
node.children
end
# 根据 node_id 直接找到 KnowledgeNode 实例
knowledge_node = knowledge_net.find_node_by_id(node_id)
说明
KnowledgeNet 表示一个很多知识节点组成的网状结构
我们抽取了两个模型
1 KnowledgeNet
一个KnowledgeNet实例就表示一个知识网
2 KnowledgeNode
一个知识网中有很多知识节点,一个KnowledgeNode实例表示 一个知识节点
每个KnowledgeNode都有多个前置知识节点(如果要学C知识节点,必须先学会A,B这两个知识节点,我们就把A,B叫做C的前置知识节点)
反之
每个KnowledgeNode都有多个后续知识节点(如果要学E,F知识节点,必须先学会D知识节点,我们就把E,F叫做D的后续知识节点)
KnowledgeNode 有五个属性
id: 全局唯一
name: 知识节点名称
desc: 知识节点描述
parents: 所有前置知识节点数组(在掌握这个知识节点之前,需要先掌握的直接关联的知识节点)
children: 所有后续知识节点数组(在掌握这个知识节点之后,可以进一步掌握的直接关联的知识节点)
每个 KnowledgeNet 会用一个 xml 文件来持久化
xml 结构如下
xml 结构说明
每个 node 表示一个知识节点
每个 relation 表示两个知识节点的前置后续关系
需要做的事情
1 实现 KnowledgeNet KnowledgeNode 两个类的逻辑
具体API如下