我想将.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但是想不出来。任何人都可以告诉该程序有什么问题吗?
答案 0 :(得分:1)
您不能只使用.nt文件(或任何其他rdf文件)初始化Sesame Native Store。
dataDir
构造函数的NativeStore
参数是本机存储将创建索引并存储添加数据的目录 - 它按照自己的内部格式存储此数据,而不是。 nt文件。所以你应该把它传递给一个目录,而不是一个文件(实际上我有点惊讶你在执行这段代码时没有得到错误)。
创建并初始化存储库后,您必须将文件添加到其中。您可以通过打开RepositoryConnection
并使用其add
方法之一将文件传递给它来执行此操作。请参阅Sesame user documentation,特别是how to add data to a repository上的部分。