• skill_tree_neo4j

  • 目录结构说明

  • 知识节点 子树信息结构

  • 知识节点 的导出习题编辑

  • 知识节点 的导出习题选项配置编辑

README.md

skill_tree_neo4j

本项目是 CSDN 技能森林 的 Neo4j 专项开放编辑仓库。

本仓库面向学习者,以树状结构管理 Neo4j 技能的知识点。

为了操作方便,在仓库中有一组微型的 Python 工具脚本,用于加工和维护技能树,一般情况下不用关注。对于项目贡献者, 主要维护的是技能树的目录结构和相关习题

目录结构说明

data目录下包含 难度节点/章节点/知识节点 3级目录结构,超过3级以上的信息直接在3级目录下的 config.json 里通过children 字段配置

  • 技能树骨架文件
    • 位置:data/tree.json
    • 说明:该文件是执行 python main.py 生成的,请勿人工编辑
  • 技能树根节点配置文件:
    • 位置:data/config.json
    • 说明:可编辑配置关键词等字段,其中 node_id 字段是生成的,请勿编辑
  • 技能树难度节点
    • 位置:data/xxx,例如: data/1.Neo4J初阶
    • 说明:
      • 每个技能树有 3 个等级,目录前的序号是必要的,用来保持文件夹目录的顺序
      • 每个目录下有一个 config.json 可配置关键词信息,其中 node_id 字段是生成的,请勿编辑
  • 技能树章节点
    • 位置:data/xxx/xxx,例如:data/1.Neo4J初阶/1.预备知识
    • 说明:
      • 每个技能树的每个难度等级有 n 个章节,目录前的序号是必要的,用来保持文件夹目录的顺序
      • 每个目录下有一个 config.json 可配置关键词信息,其中 node_id 字段是生成的,请勿编辑
  • 技能树知识节点
    • 位置:data/xxx/xxx/xxx,例如:data/1.Neo4J初阶/1.预备知识/1.Neo4J简介
    • 说明:
      • 每个技能树的每章有 n 个知识节点,目录前的序号是必要的,用来保持文件夹目录的顺序
      • 每个目录下有一个 config.json
        • 其中 node_id 字段是生成的,请勿编辑
        • 其中 keywords 可配置关键字字段
        • 其中 children 可配置该知识节点下的子树结构信息,参考后面描述
        • 其中 export 可配置该知识节点下的导出习题信息,参考后面描述

知识节点 子树信息结构

举例,如果在 data/1.Neo4J初阶/1.预备知识/1.Neo4J简介/config.json 里配置对该知识节点子树信息结构:

{
    "children": [
        {
            "什么是图数据库": {
                "keywords": [
                    "图数据库"
                ],
                "children": [
                    {
                        "图论": {
                            "keywords": [
                                "节点",
                                "边",
                                "关系"
                            ],
                            "children": []
                        }
                    },
                    {
                        "RDF": {
                            "keywords": [],
                            "children": []
                        }
                    },
                    {
                        "属性图": {
                            "keywords": [],
                            "children": []
                        }
                    },
                    {
                        "原生图": {
                            "keywords": [
                            ],
                            "children": []
                        }
                    }
                ]
            },
            "什么时候需要图数据库": {
                "keywords": [
                    "图数据库"
                ],
                "children": []
            },
            "Neo4J图数据库概览": {
                "keywords": [
                    "图数据库"
                ],
                "children": []
            }
        }
    ],
}

在后续的信息加工过程中,这些内容就会关联到相关的节点。

通常情况下,我们只需要维护固定深度的目录结构,大部分知识点不涉及 children 的维护。

知识节点 的导出习题编辑

例如 data/1.Neo4J初阶/1.预备知识/1.Neo4J简介/config.json 里配置对该知识节点导出的习题

{
    "export": [
        "helloworld.json"
    ]
}

每个文件名,指向对应的习题定义 json 。

知识节点 的导出习题选项配置编辑

首先,我们添加前文中 export 指定的习题配置,例如在 data/1.Neo4J初阶/1.预备知识/1.Neo4J简介/ 下增加一个helloworld.json代码:

{
    "type": "code_options",
    "author": "幻灰龙",
    "source": "helloworld.md",
    "notebook_enable": false
}

其中

  • type 字段目前都固定是 code_options
  • notebook_enable 对于 Neo4J 技能树总是false。
  • source 字段代表习题编辑的 markdwon 文件。

现在我们新建一个 helloworld.md 并编辑为:

```
# Hello World


Neo4J可以通过shell直接写查询语句,也可以在Java、Python等语言中创建连接查询,以下哪个查询不是图数据库Neo4J的查询?

## 答案

```sql
SELECT name FROM Person
LEFT JOIN Person_Department
  ON Person.Id = Person_Department.PersonId
LEFT JOIN Department
  ON Department.Id = Person_Department.DepartmentId
WHERE Department.name = "IT Department"
```

## 选项

### MySQL查询

```sql
MATCH (p:Person)-[:WORKS_AT]->(d:Dept)
WHERE d.name = "IT Department"
RETURN p.name
```

### 使用JDBC查询Neo4J

```java
Connection con = DriverManager.getConnection("jdbc:neo4j://localhost:7474/");

String query =
    "MATCH (:Person {name:{1}})-[:EMPLOYEE]-(d:Department) RETURN d.name as dept";
try (PreparedStatement stmt = con.prepareStatement(QUERY)) {
    stmt.setString(1,"John");
    ResultSet rs = stmt.executeQuery();
    while(rs.next()) {
        String department = rs.getString("dept");
        ....
    }
}
```

### 在Python中查询

```python
from neo4j import GraphDatabase

class HelloWorldExample:

    def __init__(self, uri, user, password):
        self.driver = GraphDatabase.driver(uri, auth=(user, password))

    def close(self):
        self.driver.close()

    def print_greeting(self, message):
        with self.driver.session() as session:
            greeting = session.write_transaction(self._create_and_return_greeting, message)
            print(greeting)

    @staticmethod
    def _create_and_return_greeting(tx, message):
        result = tx.run("CREATE (a:Greeting) "
                        "SET a.message = $message "
                        "RETURN a.message + ', from node ' + id(a)", message=message)
        return result.single()[0]


if __name__ == "__main__":
    greeter = HelloWorldExample("bolt://localhost:7687", "neo4j", "password")
    greeter.print_greeting("hello, world")
    greeter.close()
```

```

这是一个最基本的习题结构,它包含标题、答案、选项,注意这几个一级和二级标题必须填写正确,解释器会读取这几个标题。而选项的标题会被直接忽略掉,在最终生成的习题中不包含选项的三级标题,所以这个标题可以用来标注一些编辑信息,例如“此选项没有关闭文件连接”,“类型错误”等等。


## 技能树合成

`src`目录下执行 `python main.py` 会合成技能树文件,合成的技能树文件: `data/tree.json`
* 合成过程中,会自动检查每个目录下
  * 是否有 `config.json`, 没有的话会新建一个 
  * `config.json` 里的 `node_id` 是否存在,不存在则生成
  * 目录序号是否连续,如果不连续会重排
* 合成过程中,会自动检查每个知识点目录下 `config.json` 里的 `export` 里导出的习题配置,检查是否存在`exercise_id` 字段,如果不存在则生成

项目简介

Neo4J 图数据库技能树

技能树skill_tree

发行版本

当前项目没有发行版本

贡献者 7

开发语言

  • Python 100.0 %
反馈
建议
客服 返回
顶部