java - Sparql 插件使用

标签 java neo4j sparql

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

由于我在使用 Neo4J2 的 SPARQL 插件时遇到一些问题,所以我切换回了 1.9.7。 我已经用从 .nt 文件导入的一些数据填充了 testdb,但是当我使用 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 的 native API(或 Cypher)的解决方案针对旧解决方案评估各种因素。

最佳答案

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

您正在从 MySQL 解决方案之上的 SPARQL 之一迁移,该解决方案在 2010 年是最先进的,但如今没有竞争力(或维护)。

我建议你看看Virtuososomething from the OWLIM family反而。如果您的数据不是很大(几百万个三倍),那么 apache jena 中的解决方案或open 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 . }}"
}

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

我现在想我更好地理解你的问题了。您直接使用 Neo4J api 将节点插入 Neo4j 图中。然后,您尝试使用 SPARQL 插件来查询您插入的那些节点。这不起作用,因为 SPARQL 插件期望存在某种图结构。您要么需要仔细研究 SPARQL 插件生成的图表并准确地重新创建它,要么使用:com.tinkerpop.blueprints.oupls.sail.GraphSail addStatement 为您正确执行此操作。

关于java - Sparql 插件使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24010978/

相关文章:

java - 如何使用 SAX 初始化 JAXB

Neo4j Cypher 查询 RETURN 不同的节点集

database - Neo4j输出格式

java - owlapi HERMIT 和 SPARQL

sparql - 我如何提取维基数据描述?

java - Spring:数组属性的默认值

java - 使用DOM将一个xml文档复制到另一个

java - jpa,尝试从实体创建表,找不到类 ExpressionVisitor

neo4j - 在 Neo4J Cypher 查询中,属性值只能是原始类型或其数组

sparql - 如何更改 DBpedia SPARQL 查询的执行时间上限? (Virtuoso 42000 错误)