Skip to content

KnowledgeNet #1

Description

@fushang318

说明

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)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions