Java Stardog数据加载和Jena

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在一个Jena图中收集和合并数据。所有这些三元组都是ABOX的一部分

  • 我不确定Stardog是否会要求TBox也与ABox图形合并。我想是的,因为否则我看不到Stardog将如何对数据进行推理。我还没有看到像在其他一些三重存储中那样分开存储和使用TBox的任何选项。我是否需要在Jena图中包含TBox,或者是否有办法将TBox存储在另一个Stardog数据库中,以便在查询ABOX数据库时也将其考虑在内

  • 我正在考虑将Jena图(从100万到700万个三元组不等)加载到Stardog的选项:

    • 我不喜欢的选项之一是将图形写入文件,然后执行客户端将其加载到Stardog中。如果数据在Jena图中,我更喜欢直接解决方案
    • 另一种选择是逐个加载三元组(),我不喜欢这种方法,因为它可能会导致效率低下
  • 有没有优雅的方式从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互动有点困惑。