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 图数据库技能树

    发行版本

    当前项目没有发行版本

    贡献者 7

    开发语言

    • Python 100.0 %