我正在尝试使用RDF4J查询Factforge Sparql端点,但收到错误。
我在Maven中使用RDF4J V:2.3.2。
我通过以下方式在Java上设置代理设置:
System.setProperty("https.proxyHost", PROXY_HOST);
System.setProperty("https.proxyPort", PROXY_PORT);
System.setProperty("http.proxyHost", PROXY_HOST);
System.setProperty("http.proxyPort", PROXY_PORT);
这是我的代码:
SPARQLRepository repo = new SPARQLRepository("http://factforge.net/sparql");
repo.initialize();
try (RepositoryConnection conn = repo.getConnection()) {
String queryStringA = "SELECT ?s ?p WHERE { ?s ?p ?o } ";
TupleQuery query = conn.prepareTupleQuery(QueryLanguage.SPARQL, queryStringA);
try (TupleQueryResult result = query.evaluate()) {
while (result.hasNext()) { // iterate over the result
BindingSet bindingSet = result.next();
Value valueOfX = bindingSet.getValue("s");
Value valueOfY = bindingSet.getValue("p");
System.out.println(valueOfX);
System.out.println(valueOfY);
}
}
}
我收到以下错误:
线程“主”中的异常org.eclipse.rdf4j.query.QueryEvaluationException:无法获取服务器协议;此服务器上没有这样的资源:http://factforge.net/sparql?query=SELECT+%3Fs+%3Fp+WHERE+%7B+%3Fs+%3Fp+%3Fo+%7D+
我将不胜感激。谢谢。
答案 0 :(得分:2)
您使用了错误的端点URL。根据{{3}},Factforge的SPARQL端点位于sound
。
除此之外,请注意,您正在执行的查询是“给我 ALL 您的三元组”。 Factforge有很多三元组,所以这样做的结果将是巨大的,执行它会消耗Factforge服务器上的大量资源。您的查询可能超时,或者Factforge可能拒绝执行它。
如果您的目的仅仅是测试SPARQL查询是否有效,则最好在其中放置一个{name:sound}
约束之类的东西:
http://factforge.net/repositories/ff-news