应用带有两个变量的 sparql 和 return java 变量中的结果
apply sparql with two variable and return the results in java variable
在耶拿我可以写一个程序可以运行这个查询并打印出结果
select distinct ?class where {?s rdf:type ?class }
如何修改程序以应用此查询和 return 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();}
}
如果您特别希望将值作为数组,则可以通过多种方式获取它。
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
方法在聚合之前将您的解决方案转换为数组。
在耶拿我可以写一个程序可以运行这个查询并打印出结果
select distinct ?class where {?s rdf:type ?class }
如何修改程序以应用此查询和 return 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();}
}
如果您特别希望将值作为数组,则可以通过多种方式获取它。
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
方法在聚合之前将您的解决方案转换为数组。