星狗数据加载和耶拿



我使用Stardog来存储来自不同来源的一堆三元组。我使用Jena来收集和合并单个Jena图中的数据。所有这些三元组都是box的一部分。

  1. 我不确定星际狗是否会要求TBox也与ABox图形合并。我认为是这样的,否则我不知道《星际狗》将如何根据数据进行推理。我没有看到任何将TBox分开存储和使用的选项,就像其他一些三重存储一样。我是否需要在Jena图中包含TBox,或者是否有一种方法可以将TBox存储在另一个Stardog数据库中,以便在查询box数据库时也考虑到它?

  2. 我正在考虑将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方法接受一个文件列表以批量加载到新数据库中。

您还应该考虑使用基于磁盘的数据库来存储数百万个三元组。

相关内容

  • 没有找到相关文章

最新更新