在Neo4J数据库上使用Jena推理器

7
这是我第一次在这里写东西,但我真正遇到了一个问题:是否可能在已填充数据的No-SQL数据库(如Neo4J)上使用Jena推理器?
我有一个Neo4J的图表表示了一堆三元组,我想在它们上面使用Jena API和Jena推理器。我考虑使用Jena的SDB/TDB组件,但我不知道如何将数据加载到我的模型中,因为SDB组件似乎只能与SQL数据库一起使用,而阅读整个TDB javadoc似乎有点太多。 我需要为TDB模型定义某种配置文件吗?
非常感谢您的帮助。

当你说你有一个表示一堆三元组的图时...我们需要更多关于这意味着什么的细节。如果你可以将数据从Neo4J获取到Jena“模型”中,那么你应该能够对其进行推理。但是neo4j模型和jena模型之间存在很大的差异。你能解释一下如何将neo4j节点和关系转换为RDF三元组吗?那会很有帮助。 - FrobberOfBits
谢谢你的回答,我之前说它们是一堆三元组是不正确的,因为我实际上是先尝试使用简单数据(例如Neo4J提供的电影数据库示例)。然后想尝试通过SPARQL查询插入数据(我使用Rexster来公开Neo4J数据库),将其转换为实际的三元组存储(或者至少我是这么想的)。 当你谈到这两个模型的区别时,你能指出一些东西或更好地解释一下你的意思吗? - Ancelot182
你有没有找到更多关于推理和Neo4j的内容? - Jakub Kotowski
最终,我不得不从我的数据库中提取所有数据并构建一个Jena模型,以便我可以从那里使用推理方法。 - Ancelot182
3个回答

11
你应该看看这个链接,它描述了neo4j和三元组存储之间的连接关系: http://www.neo4j.org/develop/linked_data。或者至少可以了解相关连接。
Neo4j模型与Jena使用的RDF模型非常不同。RDF由三元组组成,即主体、谓语和对象。这是一个由三元组组成的图形的示例,请点击这里查看。请注意使用URI标识资源,并注意节点通常是原子数据值。它们是URI、简单数字、字符串等。
在Neo4j中,节点是“属性容器”。这意味着它们不仅是URI,而且它们实际上是信息束。关系连接节点。因此RDF“谓语”有点像Neo4j关系,但neo4j节点不像RDF资源和文字。
如果您想在neo4j数据库上使用推理器,您的主要任务将是从neo4j中提取数据,并将其格式化为一组RDF三元组。然后,您可以将这些RDF三元组放入Jena 模型中。当您拥有该jena模型时,您可以使用现有的jena API在该模型上使用推理器。

非常感谢您的解释,我将尝试进一步研究通过Neo4J来表示RDF三元组,并查看是否能够找到解决方案。否则,我将尝试手动从Neo4J数据库中提取数据。 - Ancelot182

1

0

我正在创建一个jena API的neo4j实现过程中。为此,我正在子类化ObjectProperty、Individual和OntClass,并实现到neo4j端点的查询。

主要问题是,为了使用Jena的内存推理,必须将整个数据库加载到内存中。目前我的解决方案是使用“推理”服务器来处理这个问题,并将新结果写入主持久层。当然,这只适用于长期推荐系统,而不适用于UI交互。

请在此处查看项目的当前状态:

https://github.com/uzuzjmd/Wissensmodellierung

路径: competence-database\src\main\scala\uzuzjmd\competence\persistence\neo4j
欢迎有兴趣参与这个开源项目的人联系我。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接