Sparql插件的用法

时间:2014-06-03 08:57:08

标签: java neo4j sparql

我正在测试Neo4J,将其与我公司今年使用的EA平台进行比较。该平台在我们用SPARQL / SPARUL查询的MySQL数据库上进行中继。 除了SPARUL支持(目前不是强制性的)之外,我们的想法是用Neo4J替换这个MySQL数据库并测试它是否有利于直接使用SPARQL查询它或者它是否更好地翻译密码中的SPARQL查询和类似的测试。

由于我在使用Neo4J2的SPARQL插件时出现问题,因此切换回1.9.7。 我已经使用从.nt文件导入的一些数据填充了testdb,但是当我使用我的高级rest客户端进行chrome查询时,我不希望得到结果。像这样的简单查询

{
    "query" : "SELECT ?x ?y WHERE { ?x <http://neo4j.org#RUN_ON> ?y . }"
}

不会返回任何内容。当我通过insert_quad通过SPARQL插件插入数据时,例如使用像

这样的查询
  "s" : "http://neo4j.org#Application_process_1",
  "p" : "http://neo4j.org#RUN_ON",
  "o" : "http://neo4j.org#Database_3",
  "c" : "http://neo4j.org"

反而有效。

我注意到在这种情况下,节点和关系的组成与我通过Java API创建节点时的结构不同(例如,关系有3个属性:cp,c,p我的没有)

我是否必须通过插件在数据库中插入所有数据才能通过SPARQL查询?我可以通过Java API执行此操作,以便我可以在文件上使用解析器并为我读取的每一行创建查询吗? (比如为每种资源插入一些强制属性)。否则,有一种方法可以通过neo4j中的SPARQL插件加载多个数据,而无需全部写入? (类似于文件条目要清楚)

请求帮助。

编辑:我对使用SPARQL效果更好的其他技术不感兴趣。我现在想要的是,如果Neo4j的SPARQL插件允许我以编程方式执行多次插入,或者我强迫使用它将数据插入到我想用插件本身查询的图形中。如果可能的话,重点是使用SPARQL并测试某些复杂查询的性能,并使用关系数据库和仅使用Neo4j的本机API(或Cypher)的解决方案来针对旧解决方案评估各种因素。

1 个答案:

答案 0 :(得分:1)

你确定要这么做吗?虽然NEO4j很不错,但还有很多其他生产质量的SPARQL解决方案。我不能推荐非标准(sparql http协议),非供应商支持的插件作为有效的技术解决方案。

您正在从MySQL解决方案之上的SPARQL中脱颖而出,这在2010年是最先进的,但目前还没有竞争力(或维护)。

我建议你改为Virtuososomething from the OWLIM family。如果您的数据不是很大(几百万三倍),那么来自apache jenaopen rdf sesame的解决方案(这也在sparql插件中使用)可满足您的需求。在我的测试中,缩放明智Systap Bigdata也击败了Neo4j。

我主要列出了基于java的解决方案,因为你可以看到Neo4j也是一个。

换句话说,看看升级到真正的SPARQL解决方案或重写Cypher和Neo4j。

现在回答你的实际问题。当您在加载数据时引入上下文或命名图时,您可能还需要在查询中使用它。

{
    "query" : "SELECT ?x ?y 
               WHERE { GRAPH<http://neo4j.org>{?x <http://neo4j.org#RUN_ON> ?y . }}"
}

然而,对您的客户来说,关键是他们可能正在使用sparql over http来访问您的数据。这正是Neo4j sparql不兼容的地方,即neo4jsparql需要一个json字符串,而sparql http需要一个名为query的uri参数。

我现在认为我更了解你的问题。您直接使用Neo4J api将节点插入到neo4j图中。然后,您尝试使用SPARQL插件查询插入的节点。这不起作用,因为SPARQL插件需要存在某种图形结构。您需要仔细研究SPARQL插件生成的图形并完全重新创建它,或者使用:com.tinkerpop.blueprints.oupls.sail.GraphSail addStatement为您正确地执行此操作。