
org.aksw.jena_sparql_api.utils.ResultSetUtils Maven / Gradle / Ivy
package org.aksw.jena_sparql_api.utils;
import java.io.Closeable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.google.common.collect.Iterators;
import com.google.common.collect.LinkedListMultimap;
import com.google.common.collect.Multimap;
import org.apache.jena.graph.Node;
import org.apache.jena.graph.Triple;
import org.apache.jena.query.QueryExecution;
import org.apache.jena.query.ResultSet;
import org.apache.jena.query.ResultSetFactory;
import org.apache.jena.sparql.core.Var;
import org.apache.jena.sparql.engine.QueryIterator;
import org.apache.jena.sparql.engine.binding.Binding;
import org.apache.jena.sparql.engine.binding.BindingHashMap;
import org.apache.jena.sparql.engine.iterator.QueryIter;
import org.apache.jena.sparql.engine.iterator.QueryIterPlainWrapper;
import org.apache.jena.sparql.expr.NodeValue;
import org.apache.jena.util.iterator.ExtendedIterator;
import org.apache.jena.util.iterator.WrappedIterator;
public class ResultSetUtils {
public static Integer resultSetToInt(ResultSet rs, Var v) {
Integer result = null;
if (rs.hasNext()) {
Binding binding = rs.nextBinding();
Node node = binding.get(v);
NodeValue nv = NodeValue.makeNode(node);
result = nv.getInteger().intValue();
// TODO Validate that the result actually is int.
//result = node.getLiteral().
}
return result;
}
// public static Long resultSetToInt(ResultSet rs, Var v) {
// Integer result = null;
//
// if (rs.hasNext()) {
// Binding binding = rs.nextBinding();
//
// Node node = binding.get(v);
// NodeValue nv = NodeValue.makeNode(node);
// result = nv.getInteger().longValue();
//
// // TODO Validate that the result actually is int.
// //result = node.getLiteral().
// }
//
// return result;
// }
public static List resultSetToList(ResultSet rs, Var v) {
List result = new ArrayList();
while (rs.hasNext()) {
Binding binding = rs.nextBinding();
Node node = binding.get(v);
result.add(node);
}
return result;
}
public static Map partition(ResultSet rs, Var var) {
List varNames = rs.getResultVars();
Map result = new LinkedHashMap();
while(rs.hasNext()) {
Binding binding = rs.nextBinding();
Node node = binding.get(var);
ResultSetPart rsp = result.get(node);
if(rsp == null) {
rsp = new ResultSetPart(varNames);
result.put(node, rsp);
}
rsp.getBindings().add(binding);
}
return result;
}
public static ExtendedIterator toIteratorBinding(QueryExecution qe) {
ResultSet rs = qe.execSelect();
ExtendedIterator result = toIteratorBinding(rs, qe);
return result;
}
/**
* This version returns an iterator capable of closing the corresponding query execution
*
* @param rs
* @param qe
* @return
*/
public static ExtendedIterator toIteratorBinding(ResultSet rs, QueryExecution qe) {
Iterator it = new IteratorResultSetBinding(rs);
Closeable closeable = new CloseableQueryExecution(qe);
Iterator tmp = new IteratorClosable(it, closeable);
ExtendedIterator result = WrappedIterator.create(tmp);
return result;
}
public static Iterator toIteratorBinding(ResultSet rs) {
Iterator result = new IteratorResultSetBinding(rs);
return result;
}
public static Multimap, Binding> index(ResultSet rs, List vars) {
Multimap, Binding> result = LinkedListMultimap.create();
while(rs.hasNext()) {
Binding binding = rs.nextBinding();
List key = new ArrayList(vars.size());
for(Var var : vars) {
Node node = binding.get(var);
key.add(node);
}
result.put(key, binding);
}
return result;
}
public static ResultSet join(ResultSet a, ResultSet b) {
//Set aVarNames = new HashSet(a.getResultVars());
List aVarNames = a.getResultVars();
Set joinVarNames = new HashSet(aVarNames);
joinVarNames.retainAll(b.getResultVars());
List bVarsOnly = new ArrayList(b.getResultVars());
bVarsOnly.removeAll(joinVarNames);
List allVars = new ArrayList(aVarNames);
allVars.addAll(bVarsOnly);
List joinVars = VarUtils.toList(joinVarNames);
Multimap, Binding> ma = index(a, joinVars);
Multimap, Binding> mb = index(b, joinVars);
Set> keys = new HashSet>(ma.keySet());
keys.retainAll(mb.keySet());
// Clean up unused keys
ma.keySet().retainAll(keys);
mb.keySet().retainAll(keys);
Iterator joinIterator = new IteratorJoin>(keys.iterator(), ma, mb);
QueryIterator queryIter = new QueryIterPlainWrapper(joinIterator);
ResultSet result = ResultSetFactory.create(queryIter, allVars);
return result;
}
public static ResultSet project(ResultSet rs, Iterable vars, boolean uniq) {
Collection newBindings = uniq
? new HashSet()
: new ArrayList()
;
while(rs.hasNext()) {
Binding o = rs.nextBinding();
BindingHashMap n = new BindingHashMap();
for(Var var : vars) {
Node node = o.get(var);
n.add(var, node);;
}
newBindings.add(n);
}
QueryIterator queryIter = new QueryIterPlainWrapper(newBindings.iterator());
List varNames = org.aksw.jena_sparql_api.utils.VarUtils.getVarNames(vars);
ResultSet result = ResultSetFactory.create(queryIter, varNames);
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy