private void populateBindingSets( List<QueryBindingSet> results, Var predVar, Var objVar, Collection<Statement> stmts) { if (predVar == null || objVar == null || stmts == null || stmts.size() == 0) return; List<QueryBindingSet> copyOf = new ArrayList<QueryBindingSet>(results); int i = copyOf.size(); int j = 0; for (Iterator<Statement> iter = stmts.iterator(); iter.hasNext(); ) { Statement st = iter.next(); int k = 0; for (QueryBindingSet result : results) { if (!result.hasBinding(predVar.getName()) || k >= i) { String name = predVar.getName(); org.openrdf.model.Value val = st.getPredicate(); addBinding(result, name, val); } if (!result.hasBinding(objVar.getName()) || k >= i) addBinding(result, objVar.getName(), st.getObject()); k++; } i = copyOf.size() + j * copyOf.size(); j++; if (iter.hasNext()) { // copy results for (QueryBindingSet copy : copyOf) { results.add(new QueryBindingSet(copy)); } } } }
@Override protected BindingSet getNextElement() throws QueryEvaluationException { if (hashTable == null) { setupHashTable(); } while (currentScanElem == null) { if (scanList.size() > 0) { currentScanElem = scanList.remove(0); } else { if (restIter.hasNext()) { currentScanElem = restIter.next(); } else { // no more elements available return null; } } if (currentScanElem instanceof EmptyBindingSet) { // the empty bindingset should be merged with all bindingset in // the hash table hashTableValues = new ArrayList<BindingSet>(); for (BindingSet key : hashTable.keySet()) { hashTableValues.addAll(hashTable.get(key)); } } else { BindingSet key = calcKey(currentScanElem, joinAttributes); if (hashTable.containsKey(key)) { hashTableValues = new ArrayList<BindingSet>(hashTable.get(key)); } else { currentScanElem = null; hashTableValues = null; } } } BindingSet nextHashTableValue = hashTableValues.remove(0); QueryBindingSet result = new QueryBindingSet(currentScanElem); for (String name : nextHashTableValue.getBindingNames()) { Binding b = nextHashTableValue.getBinding(name); if (!result.hasBinding(name)) { result.addBinding(b); } } if (hashTableValues.size() == 0) { // we've exhausted the current scanlist entry currentScanElem = null; hashTableValues = null; } return result; }
private BindingSet calcKey(BindingSet bindings, Set<String> commonVars) { QueryBindingSet q = new QueryBindingSet(); for (String varName : commonVars) { Binding b = bindings.getBinding(varName); if (b != null) { q.addBinding(b); } } return q; }
protected BindingSet populateBindingSet(Statement st, List<Map.Entry<Var, Var>> predObjVar) { QueryBindingSet result = new QueryBindingSet(bindings); for (Map.Entry<Var, Var> entry : predObjVar) { Var predVar = entry.getKey(); Var objVar = entry.getValue(); if (predVar != null && !result.hasBinding(predVar.getName())) result.addBinding(predVar.getName(), st.getPredicate()); if (objVar != null && !result.hasBinding(objVar.getName())) result.addBinding(objVar.getName(), st.getObject()); } return result; }
@Override protected BindingSet convert(BindingSet bIn) throws QueryEvaluationException { QueryBindingSet res = new QueryBindingSet(); int bIndex = -1; Iterator<Binding> bIter = bIn.iterator(); while (bIter.hasNext()) { Binding b = bIter.next(); String name = b.getName(); bIndex = Integer.parseInt(name.substring(name.lastIndexOf("_") + 1)); res.addBinding(name.substring(0, name.lastIndexOf("_")), b.getValue()); } if (bIndex > -1) res.addAll(bindings.get(bIndex)); return res; }
public static BindingSet project( ProjectionElemList projElemList, BindingSet sourceBindings, BindingSet parentBindings) { QueryBindingSet resultBindings = new QueryBindingSet(parentBindings); for (ProjectionElem pe : projElemList.getElements()) { Value targetValue = sourceBindings.getValue(pe.getSourceName()); if (targetValue != null) { // Potentially overwrites bindings from super resultBindings.setBinding(pe.getTargetName(), targetValue); } } return resultBindings; }
protected List<QueryBindingSet> populateBindingSet( List<Statement> document, Var subjVar, List<Map.Entry<Var, Var>> predObjVar) { // convert document to a multimap Multimap<URI, Statement> docMap = ArrayListMultimap.create(); for (Statement st : document) { docMap.put(st.getPredicate(), st); } List<QueryBindingSet> results = new ArrayList<QueryBindingSet>(); QueryBindingSet bs0 = new QueryBindingSet(bindings); // QueryBindingSet result = new QueryBindingSet(bindings); if (document.size() > 0) { Statement stmt = document.get(0); if (subjVar != null && !bs0.hasBinding(subjVar.getName())) { bs0.addBinding(subjVar.getName(), stmt.getSubject()); } } results.add(bs0); // for (Statement st : document) { for (Map.Entry<Var, Var> entry : predObjVar) { Var predVar = entry.getKey(); Var objVar = entry.getValue(); // if (predVar.hasValue() && !st.getPredicate().equals(predVar.getValue())) // continue; if (predVar == null || !predVar.hasValue()) continue; Collection<Statement> predSts = docMap.get((URI) predVar.getValue()); // if (predVar != null && !result.hasBinding(predVar.getName())) // result.addBinding(predVar.getName(), st.getPredicate()); // if (objVar != null && !result.hasBinding(objVar.getName())) // result.addBinding(objVar.getName(), st.getObject()); populateBindingSets(results, predVar, objVar, predSts); } // } return results; }
private void addBinding(QueryBindingSet result, String name, org.openrdf.model.Value val) { if (result.hasBinding(name)) result.removeBinding(name); result.addBinding(name, val); }