众所周知,Neo4j
本身是不支持导入 RDF
文件的。但我们可以借助 neosemantics
来进行导入。
neosemantics
简称 n10s
,4.0之前的把呢不能叫 semantics
。
现在官网也无法访问 4.0 之前版本的相关文档了。推荐大家使用4.0以上的。
neosemantics
,我下载的是 neosemantics-4.1.0.1.jar
neosemantics-4.1.0.1.jar
到 neo4j
的安装目录下的 plugins
文件夹中(注意:如果你想要支持 JSON-LD
序列化的 RDF
,则需要安装 APOC
插件)
在 neo4j/neo4j.conf
文件中添加以下内容:
dbms.unmanaged_extension_classes=n10s.endpoint=/rdf
dbms.unmanaged_extension_classes=semantics.extension=/rdf
neo4j
./bin/neo4j restart
neo4j
,并登录,查看现在是否支持导入 RDF
call dbms.procedures()
返回如下信息:
或者:
:GET http://IP地址:7474/rdf/ping
返回信息如下:
CALL n10s.graphconfig.init();
CALL semantics.graphconfig.init();
返回信息如下:
将数据持久化到Neo4j中的所有方法都有一个模式级的先决条件:这是在带有标签资源的节点的属性URI上存在唯一性约束。
如果约束还没有出现,需要在neo4j上运行
CREATE CONSTRAINT n10s_unique_uri ON (r:Resource) ASSERT r.uri IS UNIQUE;
否则rdf导入会报错。这个约束的目的是通过URI保证资源的唯一性,并通过将资源添加到索引来加速获取过程。
此时大功已经告成了。我们可以导入 RDF
文件了。
支持导入的数据:Turtle、N-Triples、JSON-LD、TriG、RDF/XML
call n10s.rdf.import.fetch("/NLP/KG/Wikidata/Onto/ontology-1.0.owl", "RDF/XML");
call n10s.rdf.import.fetch("/NLP/KG/Wikidata/other/nsmntx.ttl", "Turtle");
CALL n10s.rdf.import.fetch('/NLP/KG/Wikidata/other/test.nt', 'N-Triples')
4.0版本之前使用下面的命令:
CALL semantics.importRDF(x, x, x)
注意:如果是在 Windows
上部署 Neo4j
,需要在路径前面加上file://
CALL n10s.rdf.import.fetch('file:///C:/NLP/KG/Wikidata/other/test.nt', 'N-Triples')
MATCH (resource:Resource) DETACH DELETE resource;
bug
详见使用过程中遇到的bug,详见汇总:bug汇总地址