FirstTestingClass.java
package com.mycompany.sparqlwithjena1;
import org.apache.jena.query.Query;
import org.apache.jena.query.QueryFactory;
import org.apache.jena.query.ResultSet;
import org.apache.jena.query.ResultSetFormatter;
import org.apache.jena.sparql.engine.http.QueryEngineHTTP;
public class FirstTestingClass {
public static void main(String[] args)
{
sparqlQuery();
}
static void sparqlQuery()
{
String url4= "http://dbpedia.org/sparql/";
String queryString =
"PREFIX ol: <http://www.openlinksw.com/schemas/virtrdf#> "+
" SELECT ?person ?x"+
" WHERE { "+
" ?person a ?x . "+
//" FILTER ( regex( str(?person) , 'resource' ,'i') ) ."+
" }";
Query query = QueryFactory.create(queryString);
QueryEngineHTTP qe= new QueryEngineHTTP(url4,queryString);
ResultSet result = qe.execSelect();
ResultSetFormatter.out(result, query);
qe.close();
}
}
这给出了这种输出
| http://www.openlinksw.com/virtrdf-data-formats#default-iid | ol:QuadMapFormat |
| http://www.openlinksw.com/virtrdf-data-formats#default-iid-nullable | ol:QuadMapFormat |
我只粘贴了两个输出元组,输出中有超过100个元组。所以为什么会这样??是因为自动URL解除引用?。
我尝试在librdf.org上查询相同的URL(= url4)。它只提供一个元组作为输出。
我还尝试通过自动转换为N3格式来检查rdf-translator.appspot.com上的三元组形式的URL(= url4)。它还表明给定查询应该只有一个元组。
请帮助我做错的地方? 我是初学者,请解释一下。
答案 0 :(得分:0)
您要求Jena针对http://dbpedia.org/sparql处的端点运行SPARQL查询。您可以在Web浏览器中手动转到该端点并运行相同的查询。在那里运行查询时,您会得到lots of results。你问过其他一些地方,比如
我尝试在librdf.org上查询相同的URL(= url4)。它只提供一个元组 作为输出。
我不确定你究竟是什么意思。你是说你在他们支持的某个端点上运行相同的查询?如果你这样做,当然你会得到不同的结果,因为它是一个不同的终点。
为了进行比较,如果在不同的数据库上运行相同的SQL查询,则可以很好地获得不同的结果,因为这些数据库中的数据不同。或者,如果你问不同的人,“你有多少兄弟姐妹?”你会得到不同的答案,因为不同的人有不同数量的兄弟姐妹。
答案 1 :(得分:0)
您的问题的答案是:
不,Jena不会自动取消引用URI。 请查看您的SPARQL查询。它类似于
SELECT ?s ?o WHERE {
?s a ?o .
}
您为变量提供人类可读的名称并不意味着在处理查询时识别语义。
您要求查询的三元组都是以rdf:type
为谓词的三元组。你展示的三元组是一些Virtuoso内部三元组 - 部署DBpedia的三元组商店。在Jena代码中设置为默认图http://dbpedia.org
时,可能会解决此问题:
qe.addDefaultGraph("http://dbpedia.org");