mindpin / knowledge-space-net-lib

知识空间网络的原型工程。同时包含一些规范文档。
5 stars 2 forks source link

KnowledgeSapceNet #2

Open fushang318 opened 11 years ago

fushang318 commented 11 years ago

KnowledgeSapceNet 表示一个很多 KnowledgeSapceNode 节点组成的网状结构

其中每个 KnowledgeSapceNode 节点,包含多个 KnowledgeNode 节点 一个 KnowledgeNode 可以被多个 KnowledgeSapceNode 分别包含

包括两个模型

KnowledgeSapceNet
表示一个网状结构
KnowledgeSapceNode
表示一个节点
KnowledgeSapceNode 有三个属性
  knowledge_nodes: 当前节点包含的KnowledgeNode对象数组 # KnowledgeNode 由 issue1 实现
  parents: 所有前置 KnowledgeSapceNode对象数组
  children: 所有后续 KnowledgeSapceNode对象数组

一个 KnowledgeSapceNet 被持久化为一个 xml 文件

xml 文件结构如下


<KnowledgeSapceNet>
  <nodes>
    <node id="ks1">
      <knowledge_node_ids>
        <id>k1</id>
      </knowledge_node_ids>
    </node>
    <node id="ks2">
      <knowledge_node_ids>
        <id>k1</id>
        <id>k2</id>
      </knowledge_node_ids>
    </node>
  </nodes>

  <relations>
    <relation>
      <parent node_id="ks1"/>
      <child node_id="ks2"/>
    </relation>
  </relations>
</KnowledgeSapceNet>

xml 说明 knowledge_node_ids 表示 一个KnowledgeSapceNode 包含的 KnowledgeNode id 数组

需要做的事情

1 实现 KnowledgeSapceNet KnowledgeSapceNode KnowledgeSpaceParser 三个类的逻辑 具体API如下

  # 这个是获取 knowledge_net,由 issue1 实现了
  knowledge_net = KnowledgeNet.load_xml_file('knowledge_net.xml')

  # 解析 xml 为 KnowledgeSapceNet 实例
  #1.xml 文件的位置是 rails_root/config/knowledge_sapce_nets/1.xml
  # knowledge_net 对象中包含 KnowledgeNode 信息
  sapce_net = KnowledgeSpaceParser.load(knowledge_net, "1.xml")

  # 返回 parents 是空数组的 KnowledgeSapceNet 实例
  sapce_nodes = sapce_net.root_nodes

  sapce_nodes.each do |sapce_node|
    sapce_node.knowledge_nodes
    sapce_node.parents
    sapce_node.children
  end
ben7th commented 11 years ago

KnowledgeNet 和 KonwledgeSpaceNet 大概使用方法:

# 首先,已经存在手动整理的 knowledge_net.xml
# 以下是根据这个xml整理出持久化的知识空间数据的

# 第一步,使用 KnowledgeNet 类来装入这个xml
knowledge_net = KnowledgeNet.load_xml_file('knowledge_net.xml')

# 第二步,使用KnowledgeSpaceParser(由宋亮编写),根据 knowledge_net 对象获得 KnowledgeSpaceNet 对象

knowledge_space_net = KnowledgeSpaceParser.parse(knowledge_net)

# 第三步,将 knowledge_space_net 对象进行持久化存储,形成一个xml文件
knowledge_space_net.save_to('knowledge_space_net_1.xml')

# 第四步,将来需要再次使用 knowledge_space_net 对象时,直接以下面的方式读入
knowledge_net = KnowledgeNet.load_xml_file('knowledge_net.xml')
knowledge_space_net = KnowledgeSpaceParser.load(knowledge_net, 'knowledge_space_net_1.xml')
``
ben7th commented 11 years ago

最后会封装一个rake任务,包括这个使用方法里面的1,2,3步

类似:

rake parse_knowledge_space knowledge_net.xml knowledge_space_net_1.xml

这样来根据知识结构来生成知识空间

每次手动维护了知识结构后都运行这个rake任务更新知识空间

推荐,能力检测等工具里用到知识空间时,就按照第四步的做法从持久化将其读入内存