我使用Stardog来存储来自不同来源的一堆三元组。我使用Jena来收集和合并单个Jena图中的数据。所有这些三元组都是box的一部分。
-
我不确定星际狗是否会要求TBox也与ABox图形合并。我认为是这样的,否则我不知道《星际狗》将如何根据数据进行推理。我没有看到任何将TBox分开存储和使用的选项,就像其他一些三重存储一样。我是否需要在Jena图中包含TBox,或者是否有一种方法可以将TBox存储在另一个Stardog数据库中,以便在查询box数据库时也考虑到它?
-
我正在考虑将Jena图(在100万到700万三元组之间变化)加载到Stardog:
- 我不太喜欢的一个选项是将图形写入文件并执行客户端将其加载到Stardog中。如果数据是在耶拿图中,我更喜欢直接解决方案。 另一种选择是一个接一个地加载三元组(例如java中的stardog sparql插入查询),我不喜欢这种方法,因为它可能效率低下。
是否有任何优雅的方式从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);
EDIT 2:更正了我的一些代码。
Stardog文档中的附加信息
1)只要是在《Stardog》中,你将TBox存储在哪里并不重要。默认情况下,Stardog将在默认图形中查找TBox并自动提取它。但是可以使用文档中提到的reasoning.schema.graphs
配置选项进行配置。一般来说,你可能会发现关于《星际狗》中推理是如何实现的那一章很有用。
2)不要一个一个地加载三元组,这样效率不高。将数据放入《Stardog》的最快方法是在数据库创建时加载它;在这种情况下,可以使用批量加载程序来实现最佳的写速度。创建数据库之后,可以使用SNARL API、CLI或Jena API来加载文件,这是将数据放入数据库的第二快方法。如果你正在使用Jena API,你必须直接使用他们的BulkUpdateHandler
,或者加载RDF/XML
,其阅读器似乎在幕后使用批量更新程序。
你的代码不正确。你将服务器绑定到一个实际的插座上端口,然后尝试连接到未运行的嵌入式服务器。您必须修改您的服务器启动以使用示例中所示的嵌入式服务器,或者修改您的AdminConnectionConfiguration
初始化以使用toServer
指定服务器URL。
此外,你可以调用AdminConnection#memory
,而不是使用方便的createMemory
方法,这将返回一个DatabaseBuilder
,其create
方法接受一个文件列表以批量加载到新数据库中。
您还应该考虑使用基于磁盘的数据库来存储数百万个三元组。