查询芝麻存储库时,变量中没有值?

时间:2014-01-04 08:14:34

标签: java sesame

我想将.nt文件用作SESAME存储库并对其进行查询(也称为本地联合模式)。编写的程序如下。

import java.io.File;
import java.util.List;
import org.openrdf.OpenRDFException;
import org.openrdf.repository.RepositoryConnection;
import org.openrdf.model.Value;
import org.openrdf.query.TupleQuery;
import org.openrdf.query.TupleQueryResult;
import org.openrdf.query.BindingSet;
import org.openrdf.query.QueryLanguage;
import org.openrdf.repository.Repository;
import org.openrdf.repository.sail.SailRepository;
import org.openrdf.sail.nativerdf.NativeStore;

public class QuerySesameLocal {

public static void main(String[] args) {

    try
    {

        File dataDir = new File("/home/aidb/out0.nt");
        Repository repo = new SailRepository(new NativeStore(dataDir));
        repo.initialize();

               RepositoryConnection con = repo.getConnection();
               try {
                  String queryString = "SELECT ?x ?y WHERE { ?x ?p ?y } ";
                  TupleQuery tupleQuery = con.prepareTupleQuery(QueryLanguage.SPARQL, queryString);

                  TupleQueryResult result = tupleQuery.evaluate();
                  try {

                      if(result.hasNext())
                      {
                          System.out.println("result present");
                      }

                      System.out.println("checkpoint 1");
                        BindingSet bindingSet = result.next();
                        Value valueOfX = bindingSet.getValue("x");
                        Value valueOfY = bindingSet.getValue("y");

                        System.out.println(valueOfX.toString());
                          System.out.println("checkpoint 2");

                        // do something interesting with the values here...
                  }
                  finally {
                      result.close();
                  }
               }
               finally {
                  con.close();
               }
            }
            catch (OpenRDFException e) {
               // handle exception
            }


}

}

此程序根本不会返回任何结果。我试着弄清楚这个bug但是想不出来。任何人都可以告诉该程序有什么问题吗?

1 个答案:

答案 0 :(得分:1)

您不能只使用.nt文件(或任何其他rdf文件)初始化Sesame Native Store。

dataDir构造函数的NativeStore参数是本机存储将创建索引并存储添加数据的目录 - 它按照自己的内部格式存储此数据,而不是。 nt文件。所以你应该把它传递给一个目录,而不是一个文件(实际上我有点惊讶你在执行这段代码时没有得到错误)。

创建并初始化存储库后,您必须将文件添加到其中。您可以通过打开RepositoryConnection并使用其add方法之一将文件传递给它来执行此操作。请参阅Sesame user documentation,特别是how to add data to a repository上的部分。