如何在.nt文件上保存sparql查询的结果
问题描述:
我想将dbpedia
影片的所有三部分保存在N-Triple文件(.nt文件)上,我使用java应用程序对dbpedia端点执行查询并保存在一个文件上的结果,但我无法读取此文件并从中获取查询!你能帮助我吗?如何在.nt文件上保存sparql查询的结果
//我对结果保存代码是在这里
try{
FileWriter fostream = new FileWriter("C:\\Documents and Settings\\me\\Desktop\\DataSets\\dbpediafilmdataset.nt");
BufferedWriter out = new BufferedWriter(fostream);
String service ="http://dbpedia.org/sparql";
String query =
"SELECT ?s ?p ?o " +
"WHERE {" +
" ?s <http://dbpedia.org/property/wordnet_type> <http://www.w3.org/2006/03/wn/wn20/instances/synset-movie-noun-1> ; ?p ?o "+
" } ";
QueryExecution qexecctest = QueryExecutionFactory.sparqlService(service, query);
try {
ResultSet responseetest = qexecctest.execSelect();
while(responseetest.hasNext()){
QuerySolution solnntest = responseetest.nextSolution();
RDFNode p = solnntest.get("?p");
RDFNode o = solnntest.get("?o");
RDFNode s = solnntest.get("?s");
String object="";
String triple="";
if (o.isLiteral()==true)
{
object="\"" + o.toString() + "\"";
}
else
object="<" + o.toString() + ">";
triple="<" + s + ">"+" " + "<" + p + ">" + " " + object + " " + "." ;
out.write(triple);
out.newLine();
}
} finally {
qexecctest.close();
out.close();}
}catch (Exception e){
System.err.println("Error: " + e.getMessage());}
当我想读的结果文件,并从它采取查询,它提供了一些错误,如这些:
com.hp.hpl.jena.rdf.model.impl.IStream.readChar(NTripleReader.java:485)
com.hp.hpl.jena.rdf.model.impl.NTripleReader.unwrappedReadRDF(NTripleReader.java:140)
com.hp.hpl.jena.rdf.model.impl.NTripleReader.readRDF(NTripleReader.java:120)
com.hp.hpl.jena.rdf.model.impl.NTripleReader.read(NTripleReader.java:84)
com.hp.hpl.jena.rdf.model.impl.NTripleReader.read(NTripleReader.java:72)
com.hp.hpl.jena.rdf.model.impl.ModelCom.read(ModelCom.java:226)
com.hp.hpl.jena.util.FileManager.readModelWorker(FileManager.java:395)
com.hp.hpl.jena.util.FileManager.readModel(FileManager.java:335)
com.hp.hpl.jena.util.FileManager.readModel(FileManager.java:319)
....
答
它最好用CONSTRUCT查询来做到这一点。看看它,它是专门为此设计的。随着耶拿只是这样做:
Model results = qexec.execConstruct();
results.write(out, "TURTLE");
它也解释here
的主要优点是,你不需要担心写入龟或任何其他形式的三元组,耶拿将这样做为你。
您构造查询最终可能会看起来像:
CONSTRUCT { ?s ?p ?o }
WHERE {
?s <http://dbpedia.org/property/wordnet_type>
<http://www.w3.org/2006/03/wn/wn20/instances/synset-movie-noun-1> ;
?p ?o
}
你确定这是你所有的代码?代码看起来不像是你做了任何可能导致错误跟踪的事情,所以还有其他代码被省略了吗?错误跟踪似乎是指读取文件时出现问题,但是您的代码关心的是写入文件,这对我来说似乎很奇怪 – RobV
同样,虽然您关闭了“BufferedWriter”,但您还没有关闭“FileStream”,所以我确保这也被关闭,看看是否有任何区别 – RobV
不,这不是我所有的代码,它是它的一部分!当我想从我的输出文件(在这里它的名字是dbpediafilmdataset)查询时,这些错误是相关的! 有什么办法可以在rdf文件中保存sparql查询吗? – Sareh