
org.aksw.jena_sparql_api.utils.VarUtils Maven / Gradle / Ivy
package org.aksw.jena_sparql_api.utils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.jena.sdb.core.Gensym;
import org.apache.jena.sparql.core.Var;
import org.apache.jena.sparql.graph.NodeTransform;
public class VarUtils {
public static Var parseVar(String str) {
// Remove leading ? of the varName
String varName = str.trim();
if(varName.charAt(0) != '?') {
throw new RuntimeException("var name must start with '?'");
}
varName = varName.substring(1);
Var result = Var.alloc(varName);
return result;
}
/**
* Create a generator which yields fresh variables that is not contained in the array 'vars'.
* The new var name will have the given prefix
*
*/
public static Generator createVarGen(String prefix, Collection excludeVars) {
prefix = prefix == null ? "v" : prefix;
Generator result = VarGeneratorBlacklist.create(prefix, excludeVars);
// Set/Var> excludeVarNames = getVarNames(excludeVars);
//var generator = GenSym.create(prefix);
//var genVarName = new GeneratorBlacklist(generator, excludeVarNames);
//var result = new VarGen(genVarName);
return result;
}
/**
* Returns a list of variable names as strings for a given iterable of Var objects.
*
* @param vars
* @return
*/
public static List getVarNames(Iterable vars) {
List result = new ArrayList();
for(Var var : vars) {
result.add(var.getName());
}
return result;
}
public static List toList(Collection varNames) {
List result = new ArrayList(varNames.size());
for(String varName : varNames) {
Var var = Var.alloc(varName);
result.add(var);
}
return result;
}
public static Set toSet(Collection varNames) {
Set result = new HashSet();
for(String varName : varNames) {
Var var = Var.alloc(varName);
result.add(var);
}
return result;
}
public static List map(Collection varNames, Map varMap) {
List result = new ArrayList(varNames.size());
for(String varName : varNames) {
Var sourceVar = Var.alloc(varName);
Var targetVar = varMap.get(sourceVar);
if(targetVar == null) {
targetVar = sourceVar;
}
String targetVarName = targetVar.getVarName();
result.add(targetVarName);
}
return result;
}
public static Var applyNodeTransform(Var var, NodeTransform nodeTransform) {
Var result = applyNodeTransform(var, nodeTransform, var);
return result;
}
public static Var applyNodeTransform(Var var, NodeTransform nodeTransform, Var defaultVar) {
Var tmp = (Var)nodeTransform.apply(var);
Var result = tmp == null ? defaultVar : tmp;
return result;
}
/**
* Returns a map that maps *each* variable from vbs to a name that does not appear in vas.
*
* @param excludeSymmetry if true, exclude mappings from a var in vbs to itself.
*/
public static Map createDistinctVarMap(Collection vas, Collection vbs, boolean excludeSymmetry, Generator generator) {
//var vans = vas.map(VarUtils.getVarName);
if (generator == null) {
generator = new VarGeneratorBlacklist(new VarGeneratorImpl(Gensym.create("v")), vas);
}
// Rename all variables that are in common
Map result = new HashMap();
for(Var oldVar : vbs) {
Var newVar;
if (vas.contains(oldVar)) {
newVar = generator.next();
} else {
newVar = oldVar;
}
boolean isSame = oldVar.equals(newVar);
if(!(excludeSymmetry && isSame)) {
result.put(oldVar, newVar);
}
}
return result;
}
public static Map createJoinVarMap(Collection sourceVars, Collection targetVars, List sourceJoinVars, List targetJoinVars, Generator generator) {
if (sourceJoinVars.size() != targetJoinVars.size()) {
throw new RuntimeException("Cannot join on different number of columns");
}
Map result = VarUtils.createDistinctVarMap(sourceVars, targetVars, true, generator);
for (int i = 0; i < sourceJoinVars.size(); ++i) {
Var sourceJoinVar = sourceJoinVars.get(i);
Var targetJoinVar = targetJoinVars.get(i);
// Map targetVar to sourceVar
result.put(targetJoinVar, sourceJoinVar);
// rename[targetVar.getName()] = sourceVar;
}
return result;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy