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();
}
}
这给出了这种输出
|个人|x|
|http://www.openlinksw.com/virtrdf-data-formats#default-iid|ol:QuadMapFormat|
|http://www.openlinksw.com/virtrdf-data-formats#default-iid可为null |ol:QuadMapFormat|
我只粘贴了两个元组的输出——输出中有100多个元组。那么为什么会发生这种情况呢?。是因为自动取消URL引用吗?。
我尝试在librdf.org上查询相同的URL(=url4(。它只给出一个元组作为输出。
我还尝试通过自动转换为N3形式来检查rdf-translator.appspot.com上的三元组形式的URL(=url4(。它还显示给定查询应该只有一个元组。
请帮帮我哪里做错了?我是初学者,请解释一下。
您要求Jena对位于http://dbpedia.org/sparql.您可以在web浏览器中手动转到该端点并运行相同的查询。当你在那里运行查询时,你会得到很多结果。你问过其他一些地方,比如
我尝试在librdf.org上查询相同的URL(=url4(。它只给出一个元组作为输出。
我不知道你这话到底是什么意思。你的意思是,你在他们支持的某个端点上运行了相同的查询吗?如果你这样做,你当然会得到不同的结果,因为这是一个不同的终点。
相比之下,如果在不同的数据库上运行相同的SQL查询,则很可能会得到不同的结果,因为这些数据库中的数据不同。或者,如果你问不同的人,"你有多少兄弟姐妹?"你会得到不同的答案,因为不同的人有不同数量的兄弟姐妹。
您的问题的答案是:
不,Jena不会自动取消对URI的引用。请查看您的SPARQL查询。它类似于
SELECT ?s ?o WHERE {
?s a ?o .
}
为变量提供可读的名称并不意味着在处理查询时可以识别语义。您在查询中要求的三元组都是以rdf:type
为谓词的三元组。您所展示的三元组是一些Virtuoso内部三元组——部署DBpedia的三元组存储。当您在Jena代码中将http://dbpedia.org
设置为默认图形时,可能会解决此问题:
qe.addDefaultGraph("http://dbpedia.org");