java中的ApacheJena是否自动取消对URL的引用?如果是,那么我能做些什么来限制它



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");

相关内容

最新更新