在jena中我可以编写一个可以运行此查询并打印出结果的程序
select distinct ?class where {?s rdf:type ?class }
如何修改程序以应用此查询并在java数组中返回结果
select distinct ?s ?class where {?s rdf:type ?class }
程序
private void runQuer(String query, Model model) {
//create Buffer
StringBuffer queryStr = new StringBuffer();
// Establish Prefixes
queryStr.append("PREFIX esco" + ": <" + defaultNameSpace + "> ");
queryStr.append("PREFIX rdfs" + ": <" + "http://www.w3.org/2000/01/rdf-schema#" + "> ");
queryStr.append("PREFIX rdf" + ": <" + "http://www.w3.org/1999/02/22-rdf-syntax-ns#" + "> ");
//Now add query
queryStr.append(query);
Query queryExec = QueryFactory.create(queryStr.toString());
QueryExecution qexec = QueryExecutionFactory.create(queryExec, model);
try {
ResultSet response = qexec.execSelect();
while( response.hasNext()){
QuerySolution soln = response.nextSolution();
RDFNode name = soln.get("?class");
if( name != null ){
System.out.println( name.toString() );
}
else
System.out.println("No Friends found!");
}
} finally { qexec.close();}
}
答案 0 :(得分:1)
如果您希望将值作为数组,那么有几种方法可以获得它。
final QuerySolution[] solutionsAsArray;
try(final QueryExecution exec = QueryExecutionFactory.create(query, model)) {
final Iterable<QuerySolution> execAsIterable = exec::execSelect;
solutionsAsArray = StreamSupport
.stream(execAsIterable.spliterator(), false)
.toArray(count -> new QuerySolution[count]);
}
如果可能,您可能希望避免这样的模式。一个好的通用设计会将sparql查询的结果数视为无限流,而不是试图保留所有结果。
请注意,如果您想保留一些java对象而不是QuerySolution
,则可以使用Stream.map
方法在聚合到数组之前转换解决方案。