package org.aksw.jena_sparql_api.core.utils; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.aksw.jena_sparql_api.concepts.Concept; import org.aksw.jena_sparql_api.mapper.Agg; import org.aksw.jena_sparql_api.mapper.AggGraph; import org.aksw.jena_sparql_api.mapper.MappedConcept; import org.aksw.jena_sparql_api.utils.GeneratorBlacklist; import org.aksw.jena_sparql_api.utils.VarUtils; import org.aksw.jena_sparql_api.utils.Vars; import org.apache.jena.graph.Graph; import org.apache.jena.graph.Node; import org.apache.jena.graph.Triple; import org.apache.jena.query.Query; import org.apache.jena.sdb.core.Generator; import org.apache.jena.sparql.core.BasicPattern; import org.apache.jena.sparql.core.Quad; import org.apache.jena.sparql.core.Var; import org.apache.jena.sparql.syntax.Element; import org.apache.jena.sparql.syntax.ElementGroup; import org.apache.jena.sparql.syntax.ElementNamedGraph; import org.apache.jena.sparql.syntax.ElementSubQuery; import org.apache.jena.sparql.syntax.ElementTriplesBlock; import org.apache.jena.sparql.syntax.PatternVars; import org.apache.jena.sparql.syntax.Template; public class QueryGenerationUtils { public static Query createQueryQuad(Quad quad) { Query query = new Query(); query.setQuerySelectType(); Node g = quad.getGraph(); Node s = quad.getSubject(); Node p = quad.getPredicate(); Node o = quad.getObject(); s = g == null || g.equals(Node.ANY) ? Vars.g : g; s = s == null || s.equals(Node.ANY) ? Vars.s : s; p = p == null || p.equals(Node.ANY) ? Vars.p : p; o = o == null || o.equals(Node.ANY) ? Vars.o : o; Triple triple = new Triple(s, p, o); BasicPattern bgp = new BasicPattern(); bgp.add(triple); Element element = new ElementTriplesBlock(bgp); element = new ElementNamedGraph(g, element); query.setQueryPattern(element); return query; } public static Query createQueryTriple(Triple m) { Query query = new Query(); query.setQueryConstructType(); /* Node s = m.getMatchSubject(); Node p = m.getMatchPredicate(); Node o = m.getMatchObject(); */ Node s = m.getSubject(); Node p = m.getPredicate(); Node o = m.getObject(); s = s == null || s.equals(Node.ANY) ? Vars.s : s; p = p == null || p.equals(Node.ANY) ? Vars.p : p; o = o == null || o.equals(Node.ANY) ? Vars.o : o; Triple triple = new Triple(s, p, o); BasicPattern bgp = new BasicPattern(); bgp.add(triple); Template template = new Template(bgp); Element element = new ElementTriplesBlock(bgp); query.setConstructTemplate(template); query.setQueryPattern(element); return query; } // Util for cerateQueryCount public static Query wrapAsSubQuery(Query query, Var v) { Element esq = new ElementSubQuery(query); Query result = new Query(); result.setQuerySelectType(); result.getProject().add(v); result.setQueryPattern(esq); return result; } /** * Takes a concept and adds * * @return */ public static Concept createPredicateQuery(Concept concept) { Collection<Var> vars = PatternVars.vars(concept.getElement()); List<String> varNames = VarUtils.getVarNames(vars); Var s = concept.getVar(); Generator gen = GeneratorBlacklist.create("v", varNames); Var p = Var.alloc(gen.next()); Var o = Var.alloc(gen.next()); Triple triple = new Triple(s, p, o); BasicPattern bp = new BasicPattern(); bp.add(triple); List<Element> elements; if(concept.isSubjectConcept()) { elements = new ArrayList<Element>(); } else { elements = concept.getElements(); } elements.add(new ElementTriplesBlock(bp)); Concept result = new Concept(elements, p); return result; } }