Sparql Wikidata-resultset.hasNext()返回false,尽管检索到了结果

Sparql Wikidata-resultset.hasNext()返回false,尽管检索到了结果,sparql,jena,semantic-web,wikidata,Sparql,Jena,Semantic Web,Wikidata,正如标题清楚描述的,我们意外地返回了false 这是我基于Jena的SPARQL查询和Java源代码: SELECT ?s ?label WHERE { ?s rdfs:label ?label. FILTER(CONTAINS(LCASE(?label), "university"@en)). } LIMIT 5 Query query = QueryFactory.create(PREFIX + sparqlQuery); QueryExecution queryExecution = Q

正如标题清楚描述的,我们意外地返回了
false

这是我基于Jena的SPARQL查询和Java源代码:

SELECT ?s ?label WHERE { ?s rdfs:label ?label. FILTER(CONTAINS(LCASE(?label), "university"@en)). } LIMIT 5

Query query = QueryFactory.create(PREFIX + sparqlQuery);
QueryExecution queryExecution = QueryExecutionFactory.sparqlService("https://query.wikidata.org/sparql", PREFIX + sparqlQuery);
try {
    ResultSet results = queryExecution.execSelect();
    ResultSetFormatter.out(System.out, results, query);
    while (results.hasNext()) { // returns false
        QuerySolution querySolution = results.next();
        System.out.println(querySolution.getResource("s"));
    }
} catch (Exception ex) {
    System.err.println(ex.getMessage());
} finally {
    queryExecution.close();
}
------------------------------------------------------
| s        | label                                   |
======================================================
| wd:Q1060 | "Technical University of Hamburg"@en    |
| wd:Q1060 | "Technical University of Hamburg"@en-ca |
| wd:Q1060 | "Technical University of Hamburg"@en-gb |
| wd:Q1060 | "Technical University of Hamburg"@nl    |
| wd:Q4027 | "Jean Moulin University Lyon 3"@en      |
------------------------------------------------------
以下是输出:

SELECT ?s ?label WHERE { ?s rdfs:label ?label. FILTER(CONTAINS(LCASE(?label), "university"@en)). } LIMIT 5

Query query = QueryFactory.create(PREFIX + sparqlQuery);
QueryExecution queryExecution = QueryExecutionFactory.sparqlService("https://query.wikidata.org/sparql", PREFIX + sparqlQuery);
try {
    ResultSet results = queryExecution.execSelect();
    ResultSetFormatter.out(System.out, results, query);
    while (results.hasNext()) { // returns false
        QuerySolution querySolution = results.next();
        System.out.println(querySolution.getResource("s"));
    }
} catch (Exception ex) {
    System.err.println(ex.getMessage());
} finally {
    queryExecution.close();
}
------------------------------------------------------
| s        | label                                   |
======================================================
| wd:Q1060 | "Technical University of Hamburg"@en    |
| wd:Q1060 | "Technical University of Hamburg"@en-ca |
| wd:Q1060 | "Technical University of Hamburg"@en-gb |
| wd:Q1060 | "Technical University of Hamburg"@nl    |
| wd:Q4027 | "Jean Moulin University Lyon 3"@en      |
------------------------------------------------------

您只能在
Resultset
上迭代一次,这种情况已经在便利方法
ResultSetFormatter.out(…)

我不知道您是否真的需要处理
ResultSet
两次,但如果是这样,您可以创建一个
resultsetreewindable
,用于重置光标:

Query Query=QueryFactory.create(前缀+sparqlQuery);
QueryExecution QueryExecution=QueryExecutionFactory.sparqlService(“https://query.wikidata.org/sparql,前缀+sparqlQuery);
试一试{
ResultSet rs=queryExecution.execSelect();
ResultStrewindable results=ResultStrefactFactory.copyResults(rs);
ResultSetFormatter.out(System.out、结果、查询);
结果:复位();
while(results.hasNext()){//返回false
QuerySolution QuerySolution=results.next();
System.out.println(querySolution.getResource(“s”);
}
}捕获(例外情况除外){
System.err.println(例如getMessage());
}最后{
queryExecution.close();
}

调用
ResultSetFormatter.out()
方法后,我不知道光标没有重置。