本文主要讨论,neo4j导入 rdf/xml文件 和 rdf文件 的区别
注:1. owl文件用的是protege导出的
2.参考某乎::如何将owl/RDF文件导入neo4j
3.本文主要对比两种导入方式的不同之处
一.前言
Protégé软件是斯坦福大学医学院生物信息研究中心基于Java语言开发的本体编辑和知识获取软件,或者说是本体开发工具
Neo4j是一个高性能的图形数据库,也可以被看作是一个高性能的图引擎
protege里的本体也能以图的形式表现,希望将protege的本体在neo4j里展示
二. protege导出owl文件
参考的某乎相关教程,neo4j的导入命令中的owl文件格式为 ‘RDF/XML’,此处姑且直接导出该类型文件(其他类型文件未测试)
——————⭐⭐⭐⭐⭐——————
踏踏的creature.owl文件:
(如果需要,可以直接用我这个~
链接:https://pan.baidu.com/s/1XkG3GE4RwoMCWwo8qy1u1w
提取码:mgb2)
——————⭐⭐⭐⭐⭐——————
三. neo4j导入owl文件
3.1 下载相关jar包,用于neo4j使用owl文件
1.下载扩展neosemantics jar包,将jar复制到neo4j/plugins目录下
注:neosemantics jar包必须与Neo4J版本相匹配!
github链接-选择版本
2.修改配置文件:
在neo4j/neo4j.conf文件中添加以下内容:
dbms.unmanaged_extension_classes=semantics.extension=/rdf
3.重新启动 neo4j
4.访问web端neo4j并登录,查看列表中是否包含可扩展的rdf、owl
在查询语句输入栏输入语句:call dbms.procedures()
(下图仅供参考—踏踏也不确定哪个是最主要的,反正塔塔 stop后start,就出来了一堆semantics开头的东东。。。)
3.2 两种导入方法对比
3.2.1 方法一:直接导入owl文件(不可取!)
(此owl文件是protege导出的RDF/XML格式的owl文件)
①导入:neo4j输入命令:
CALL semantics.liteOntoImport('file:///C:/Users/user/Desktop/creature.owl', 'RDF/XML')
(中文的owl本体文件也可以哦~)
结果:只成功加载了19个元素
②查询所有节点:
match(n) return n
(双击可查看折叠的关系链~)
由图可知,直接导入protege的RDF/XML格式的文件不可取—>无实例
3.2.1 方法二:将owl文件通过jar包转换成rdf文件,再导入
①转换:
1>owl文件还是上述creature.owl文件(protege导出的)
2>jar包:rdf2rdf-1.0.1-2.3.1.jar下载
3>将jar包与owl文件放在同一目录下
4> 进入owl文件所在目录,进入cmd,输入并执行命令:
java -jar rdf2rdf-1.0.1-2.3.1.jar creature.owl creature.turtle
②导入neo4j:
(此处,踏踏先将neo4j stop了,把自己的第二个图数据库(E:\neo4j-community-3.5.26\data\databases 下可以自己添加图数据库哦,具体请百度 )删了,重新启动的neo4j)
在neo4j里先输入:
CREATE INDEX ON:Resource(uri)
再输入:
CALL semantics.importRDF('file:///C:/Users/user/Desktop/creature.turtle', 'RDF/XML',{})
导入成功:
③neo4j中具体内容:
查询所有节点:
match(n) return n
由图可知,导入结果依然不理想,虽然能将实例导入,但是原owl文件的实例与所属类的关系不存在了,实例的属性信息不存在,会多出几个不被需要的节点
3.3 对比小结
综上,还是第二种方法更可靠一些,但也并不完美,还需人工操作neo4j以达到预期图库
掌握了规律会使工作更流畅哦~
如有更好更完美的导入方式,欢迎评论哦~ 踏踏不胜感激~
四. 本次使用的cypher语句(菜鸟使用neo4j)
①清空所有数据
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r
②查询整个图形数据库
match(n) return n
③导入owl文件
方法一:
CALL semantics.liteOntoImport('file:///C:/Users/user/Desktop/creature.owl', 'RDF/XML')
方法二:
CREATE INDEX ON:Resource(uri)
CALL semantics.importRDF('file:///C:/Users/user/Desktop/creature.turtle', 'RDF/XML',{})