【问题标题】:How can I load and query RDF at the same time如何同时加载和查询 RDF
【发布时间】:2015-12-09 14:58:38
【问题描述】:

你能想出同时加载和查询 RDF 三元组的任何方法吗?

我只知道在 Sesame 中你必须先初始化一个存储库(比如加载 rdf 文件),然后你才能通过 SPARQL 进行查询。

假设我们初始化一个 RDF 存储库(输入一个文件)并且不希望加载完成,但在加载 RDF 数据的同时,希望通过 SPARQL 查询数据以进行验证。

对于下面的初始化,应该等到存储库中的RDF文件加载完成(我的假设),然后您可以查询存储库中的RDF数据:

File rdfFile; // parameter, RDF file.
repo = new SailRepository(new MemoryStore());
repo.initialize();

        try {
            RepositoryConnection con = repo.getConnection();
            try {
                con.add(rdfFile, null, rdfFormat);
            } finally {
                con.close();
            }
        }

在上面的代码中,RepositoryConnection.add 得到一个File 作为参数。将FileInputStream 作为参数可以解决问题吗? (存储库的初始化不等待加载文件,加载完成前可以查询)。

【问题讨论】:

  • 寻求工具推荐是关于 SO 的话题。尝试描述问题(示例代码)以及迄今为止您尝试解决的问题。
  • 另外:“同时加载和查询”到底是什么意思?我很确定,如果你愿意,你可以设置一个芝麻存储库,将数据加载到其中,然后用大约 3-6 行代码查询它——如果你想以某种方式简化它,你可以很容易地编写一个自己的快速实用方法。所以也不是很清楚你在找什么。
  • 您好,我编辑了帖子。
  • 我会把文字写清楚,对不起。问题是不要等待在存储库中加载 RDF 并且能够在 RDF 文件完全加载之前进行查询。
  • 您可以使用多线程同时执行任务。 IMO - 我看不到对您的问题有用的用例。

标签: java rdf sparql semantic-web sesame


【解决方案1】:

使用 FileInputStream 代替 File 不会对 Sesame 处理文件的方式产生影响:add 方法在完全添加数据之前仍不会返回。

但是,您可以通过在与文件加载不同的线程中执行查询,然后使用隔离级别为READ_UNCOMMITTED 的事务来实现您想要的。当然,在这种情况下,查询结果的完整性或一致性几乎不能保证,但在技术上是可行的。

类似这样的东西(从我的头顶,未经测试):

   File rdfFile; // parameter, RDF file.
   repo = new SailRepository(new MemoryStore());
   repo.initialize();

   Thead loader = new Thread() {
      public void run() {
       try (RepositoryConnection con = repo.getConnection()) {
            con.add(rdfFile, null, rdfFormat);
       }
      }
   };
   Thead query = new Thread() {
      public void run() {
       try (RepositoryConnection con = repo.getConnection()) {
        conn.begin(IsolationLevels.READ_UNCOMMITTED);
        String query = "SELECT * WHERE ... "; 
        try(TupleQueryResult result = conn.prepareTupleQuery(query).evaluate()) {
           while (result.hasNext()) {
                ...
           }
        }
        conn.commit();
      }
   };
   loader.start(); 
   query.start();

【讨论】:

  • 非常感谢。 add 方法的参数呢?使用 FileInputStream 代替 File 有什么区别吗?
  • @javadeveloper 没什么区别。我已经更新了答案来解释这一点。
  • 是的,当然,请给我一点时间。谢谢;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多