Java Stardog数据加载和Jena
我正在使用Stardog来存储一堆来自不同来源的三元组。我使用Jena在一个Jena图中收集和合并数据。所有这些三元组都是ABOX的一部分Java Stardog数据加载和Jena,java,jena,semantic-web,stardog,Java,Jena,Semantic Web,Stardog,我正在使用Stardog来存储一堆来自不同来源的三元组。我使用Jena在一个Jena图中收集和合并数据。所有这些三元组都是ABOX的一部分 我不确定Stardog是否会要求TBox也与ABox图形合并。我想是的,因为否则我看不到Stardog将如何对数据进行推理。我还没有看到像在其他一些三重存储中那样分开存储和使用TBox的任何选项。我是否需要在Jena图中包含TBox,或者是否有办法将TBox存储在另一个Stardog数据库中,以便在查询ABOX数据库时也将其考虑在内 我正在考虑将Jena图(
- 我不喜欢的选项之一是将图形写入文件,然后执行客户端将其加载到Stardog中。如果数据在Jena图中,我更喜欢直接解决方案
- 另一种选择是逐个加载三元组(),我不喜欢这种方法,因为它可能会导致效率低下
Server aServer = Stardog.buildServer()
.bind(new InetSocketAddress("10.0.0.1", 5820))
.start();
AdminConnection aAdminConnection = AdminConnectionConfiguration.toServer("...").credentials("admin", "admin").connect();
if (aAdminConnection.list().contains("test")) {
aAdminConnection.drop("test");
}
Connection aConn = aAdminConnection.memory("test").create(file).connect();
Model aModel = SDJenaFactory.createModel(aConn);
编辑2:更正了我的一些代码
附加信息在1)只要您的TBox在Stardog中,您将其存储在何处并不重要。默认情况下,Stardog将在默认图形中查找TBox并自动提取它。但这可以使用reasoning.schema.graphs
configuration选项进行配置。一般来说,你会发现关于推理如何在Stardog中实现的章节是一本有用的读物
2) 不要一个接一个地加载三元组,这样效率不高。将数据输入Stardog的最快方法是在创建数据库时加载数据;在这种情况下,可以使用批量加载程序,从而实现最佳写入速度。创建数据库后,可以使用SNARL API、CLI或Jena API加载文件,这是将数据导入数据库的第二快方法。如果您使用的是Jena API,则必须直接使用他们的BulkUpdateHandler
,或者加载RDF/XML
,后者的读者似乎在幕后使用bulkUpdater
编辑:
你的代码不正确。您正在将服务器绑定到实际的套接字和端口上,然后尝试连接到未运行的嵌入式服务器。您必须修改服务器开始以使用示例中所示的嵌入式服务器,或者修改AdminConnectionConfiguration
的初始化以使用toServer
指定服务器URL
此外,您可以调用AdminConnection#memory
,而不是使用方便的方法createMemory
,它将返回一个DatabaseBuilder
,其create
方法将文件列表批量加载到新数据库中
你也应该考虑使用一个基于磁盘的数据库来存储数百万个三元组。
(1)看起来不像是在问一个问题。(2a)是,我想,可能是你最快的解决方案。(2b)听起来确实很慢。然而,如果您不想使用文件IO,(2b)可以修改为一次插入一整串三元组,对吗?没有理由要用SPARQL一次更新三倍。实际上,仔细看看你链接的另一个问题,Stardog似乎根本不支持SPARQL更新。该问答展示了一种处理数据的替代方法。(1)我对我的问题进行了编辑,使其更加明确。(2) 我认为相关的问题已经过时了。Stardog 2.0或>确实支持SPARQL更新,但我认为这可能不是进行相当大数据加载的最有效方式,是吗?Stardog支持SPARQL更新,FWIW我认为实际上不再有任何用途jena core
使用了一组似乎没有使用的代码jena arq
公开了用于各种数据加载操作的方法。我认为BulkUpdateHandler不再使用了。对不起,我是个新手,我发现如何与Jena Stardog互动有点困惑。