0

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

  1. 我不确定 Stardog 是否会要求 TBox 也与 ABox 图合并。我认为它确实如此,否则我无法看到 Stardog 将如何对数据进行推理。我没有看到像其他一些三联商店那样单独存储和使用 TBox 的任何选项。我是否需要将 TBox 包含在 Jena 图中,或者有没有办法将 TBox 存储在另一个 Stardog 数据库中,因此在查询 ABoxes 的数据库时也会考虑它?

  2. 我正在考虑将 Jena 图(在 1 到 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);

编辑 2:更正了我的一些代码。

Stardog 文档中的其他信息

4

1 回答 1

1

1) 只要 TBox 在 Stardog 中,您将其存放在哪里都没有关系。默认情况下,Stardog 会在默认图表中查找您的 TBox 并自动提取它。但这可以使用文档中reasoning.schema.graphs所述的配置选项进行配置。一般来说,你可能会发现关于如何在 Stardog 中实现推理的章节很有用。

2)不要一一加载三元组,效率不高。将数据导入 Stardog 的最快方法是在创建数据库时加载;在这种情况下可以使用批量加载程序,以实现最佳写入速度。创建数据库后,您可以使用 SNARL API、CLI 或 Jena API 加载文件,这是将数据导入数据库的下一个最快方法。如果您使用的是 Jena API,则必须BulkUpdateHandler直接使用它们或 load RDF/XML,其阅读器似乎在幕后使用批量更新程序。

编辑:

您的代码不正确。您将服务器绑定在实际的套接字和端口上,然后尝试连接到您未运行的嵌入式服务器。您必须修改您的服务器开始以使用示例中所示的嵌入式服务器,或者修改您的初始化AdminConnectionConfiguration以使用toServer.

此外,与其使用createMemory您可以调用的便捷方法,不如调用AdminConnection#memorywhich 将返回DatabaseBuilderwhocreate方法将文件列表批量加载到新数据库中。

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

于 2014-06-21T13:58:21.760 回答