[英]Writing DBPedia SPARQL results to RDF file in java
嗨朋友我是语义网上的新朋友,有一些困难。我向DBPedia询问并获得了巴黎的房产/价值对。 我想要做的是将查询结果写入rdf文件。 以下是我的代码:
import java.io.BufferedWriter;
import java.io.FileWriter;
import org.apache.jena.query.ParameterizedSparqlString;
import org.apache.jena.query.QueryExecution;
import org.apache.jena.query.QueryExecutionFactory;
import org.apache.jena.query.ResultSetFactory;
import org.apache.jena.query.ResultSetFormatter;
import org.apache.jena.query.ResultSetRewindable;
public class ParisTest {
public static void main(String[] args) {
ParameterizedSparqlString qs = new ParameterizedSparqlString(""
+ " SElECT ?property ?value where {{ <http://dbpedia.org/resource/Paris> ?property ?value } UNION "
+ " {?property ?value <http://dbpedia.org/resource/Paris>}}");
QueryExecution exec = QueryExecutionFactory.sparqlService("http://dbpedia.org/sparql", qs.asQuery());
ResultSetRewindable result = ResultSetFactory.makeRewindable(exec.execSelect());
try (BufferedWriter bw = new BufferedWriter(new FileWriter("QueryResults.rdf"))) {
while (result.hasNext()) {
System.out.println((result.next().get("property").toString()));
System.out.println((result.next().get("value").toString()));
System.out.println(ResultSetFormatter.asText(result));
bw.write((result.next().get("property").toString()));
bw.write((result.next().get("value").toString()));
}
bw.flush();
bw.close();
} catch (Exception e) {
}
}
}
它在控制台中完美地打印结果,但不会将其写入文件。 我的理解也正确,BufferedWriter和FileWriter会创建.rdf文件吗? 如果可能的话,你能帮我解决这个问题吗?
System.out.println(ResultSetFormatter.asText(result));
吃掉整个ResultSet
这样你的下一行就会抛出异常。 空catch块吞下异常,因此看起来没有写入任何内容。 但是,这不是真正的问题。 你在while循环中多次调用result.next()
。 每次调用next()
它都会前进到下一个结果。 "property"
和"value"
来自不同的结果! 你需要存储QuerySolution
从返回result.next()
在一个变量,就像这样:
while (result.hasNext()) {
QuerySolution qs = result.next();
System.out.println(qs.get("property").toString());
System.out.println(qs.get("value").toString());
bw.write(qs.get("property").toString());
bw.write(qs.get("value").toString());
}
现在,您可以一次一个地迭代ResultSet
并将值写入文件。 请拜托,请做一些异常,即使它只是e.printStackTrace()
。 然后你会知道是否会出现问题,即使没有任何可能出错的方法也会出现问题,因为计算机就像这样偷偷摸摸。
它会更容易:
exec.execConstruct()
时获取Jena模型 model.write(...)
轻松编写您喜欢的RDF语法模型
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.