我想将 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");
也有说明here
主要优点是您无需担心用 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
}
关于java - 如何在 .nt 文件上保存 sparql 查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6484145/