美文网首页
neo4j——导入owl或rdf文件

neo4j——导入owl或rdf文件

作者: 林几许 | 来源:发表于2023-07-18 14:13 被阅读0次

    一:如果是owl文件,需要先转换成rdf文件(df2rdf)

    • 安装rdf2rdf包,文件已上传文件管理器: https://zcity.mgi-tech.com/fb/files/tool/java/
    • 下载完成后,把这个插件和你的owl文件放在同一个文件夹下(只是为了方便不写绝对路径而已),执行如下命令:(假设我需要转换的是wj.owl文件,下载的插件为rdf2rdf-1.0.2-2.3.1.jar),终端在该文件目录下打开。该jar包需要在java在1.8环境下执行
    java -jar rdf2rdf-1.0.2-2.3.1.jar wj.owl wj.rdf
    

    这样你就能得到一个rdf文件

    二:导入rdf文件,需要给neo4j安装一个组件neosemantics

    # 高版本使用上面这句配置(4.0版本之后)
    dbms.unmanaged_extension_classes=n10s.endpoint=/rdf
    # 低版本使用上面这句配置(4.0版本之前)
    dbms.unmanaged_extension_classes=semantics.extension=/rdf
    
    • 配置完后保存退出并重启neo4j,并在neo4j浏览器中输入命令查看是否成功
    call dbms.procedures()
    
    • 出现以下内容便是成功了


      image.png

    三:导入RDF文件

    • 图初始化,这一步必须有,没有就导不进去
    call n10s.graphconfig.init();
    
    • 这一步可能也要,如果报错了的话也不用担心直接执行下一步,避免重复加入
    CREATE CONSTRAINT n10s_unique_uri ON (r:Resource) ASSERT r.uri IS UNIQUE;
    
    • 导入数据
    call n10s.rdf.import.fetch( "file:////home/neo4j-chs-community-4.4.18-unix/wj.rdf", "RDF/XML"); 
    
    • 导入成功,neo4j会出现数据。但是数据标签,节点,关系会默认添加ns0__,owl_,rdf_等前缀,可以处理一下

    四:处理数据前缀

    1.uri显示前有地址,可我们只想要名称

    MATCH (n)
    SET n.uri = REPLACE(n.uri, 'http://purl.obolibrary.org/obo/go#', '')
    RETURN n
    
    • 关系前缀ns__,owl__,语句替换出现问题,用python进行处理
    from py2neo import Graph
    
    # 连接到数据库(改成自己的ip和账号密码)
    graph = Graph("neo4j://0.0.0.0:7687", auth=("neo4j", "xxx"))
    
    # 查询所有关系类型
    relationship_types_query = "CALL db.relationshipTypes() YIELD relationshipType RETURN relationshipType"
    relationship_types = graph.run(relationship_types_query).to_data_frame()
    
    # 遍历所有关系类型,去掉 'ns0' 前缀并更新关系名称
    for index, row in relationship_types.iterrows():
        old_type = row['relationshipType']
        if old_type.startswith("ns0__"):
            new_type = old_type[len("ns0__"):].replace("“","").replace("”","")
            update_query = f"""
            MATCH (a)-[r:{old_type}]->(b)
            CREATE (a)-[r_new:{new_type}]->(b)
            SET r_new = r
            WITH r
            DELETE r
            """
            graph.run(update_query)
    
    • 属性前缀处理
    from py2neo import Graph
    
    # 连接到数据库(改成自己的ip和账号密码)
    graph = Graph("neo4j://000.0.0.0:7687", auth=("neo4j", "xxx"))
    
    # 创建 NodeMatcher 实例
    matcher = NodeMatcher(graph)
    nodes = matcher.match()
    
    # 遍历属性查找符合条件的并修改
    for node in nodes:
        for key in list(node.keys()):
            if key.startswith('ns0__'):
                new_key = key[len("ns0__"):]
                node[new_key] = node[key]
                del node[key]
        graph.push(node)
    
    • 标签前缀处理
    from py2neo import Graph
    
    # 连接到数据库(改成自己的ip和账号密码)
    graph = Graph("neo4j://000.0.0.0:7687", auth=("neo4j", "xxxx"))
    
    # 查询所有节点及其标签
    query = "MATCH (n) RETURN n"
    result = graph.run(query)
    
    # 遍历所有节点
    for record in result:
        node = record["n"]
        labels = node.labels
    
        # 删除所有标签中的ns0__字符
        for label in labels:
            if "ns0__" in label:
                print(label)
                new_label=label.replace("ns0__", "")
                node.add_label(new_label)
                node.remove_label(label)
        graph.push(node)
    

    相关文章

      网友评论

          本文标题:neo4j——导入owl或rdf文件

          本文链接:https://www.haomeiwen.com/subject/igmnudtx.html