首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何同时加载和查询RDF?

如何同时加载和查询RDF?
EN

Stack Overflow用户
提问于 2015-12-09 14:58:38
回答 1查看 227关注 0票数 1

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

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

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

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

代码语言:javascript
复制
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作为参数可以解决这个问题吗?(存储库的初始化不会等待加载文件,在加载完成之前可以进行查询)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-09 18:10:04

使用FileInputStream而不是File不会改变芝麻处理文件的方式:在完全添加数据之前,add方法仍然不会返回。

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

像这样的东西(从我的头顶,如此未经测试):

代码语言:javascript
复制
   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();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34181974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档