[英]How to save result of a sparql query on a .nt file
我想将dbpedia
电影的所有三元组电影保存在N-Triple文件(.nt文件)中,我使用Java应用程序在dbpedia端点上进行查询,并将结果保存在文件中,但是我无法读取此文件并进行查询从中! 你帮我吗?
//我保存结果的代码在这里
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查询。 看看吧,它是专门为此目的而设计的。 使用耶拿(Jena),只需执行以下操作:
Model results = qexec.execConstruct();
results.write(out, "TURTLE");
这里也有解释
主要优点是您不必担心用Turtle或任何其他格式编写三元组,Jena会为您完成。
您的CONSTRUCT查询可能最终看起来像:
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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.