Java中的Apache Jena是否自动解除引用URL?如果是,那么我可以做些什么来限制它

时间:2016-08-09 13:17:14

标签: java sparql jena apache-jena

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-nullable | ol:QuadMapFormat |

我只粘贴了两个输出元组,输出中有超过100个元组。所以为什么会这样??是因为自动URL解除引用?。

我尝试在librdf.org上查询相同的URL(= url4)。它只提供一个元组作为输出。

我还尝试通过自动转换为N3格式来检查rdf-translator.appspot.com上的三元组形式的URL(= url4)。它还表明给定查询应该只有一个元组。

请帮助我做错的地方? 我是初学者,请解释一下。

2 个答案:

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