Java源码示例:org.apache.jena.sparql.core.Var

示例1
private QueryIterator execFixedSubject(Node nodeURI, Node nodeLocalname, Binding binding, ExecutionContext execCxt)
{
    if ( ! nodeURI.isURI() )
        // Subject bound but not a URI
        return QueryIterNullIterator.create(execCxt) ;

    // Subject is bound and a URI - get the localname as a Node 
    Node localname = NodeFactory.createLiteral(nodeURI.getLocalName()) ;
    
    // Object - unbound variable or a value? 
    if ( ! nodeLocalname.isVariable() )
    {
        // Object bound or a query constant.  Is it the same as the calculated value?
        if ( nodeLocalname.equals(localname) )
            // Same
            return QueryIterSingleton.create(binding, execCxt) ;
        // No - different - no match.
        return QueryIterNullIterator.create(execCxt) ;
    }
    
    // Object unbound variable - assign the localname to it.
    return QueryIterSingleton.create(binding, Var.alloc(nodeLocalname), localname, execCxt) ;
}
 
示例2
/**
 * Makes the plan for a SPARQL SOURCE clause.
 *
 * @param elementSource the SPARQL SOURCE
 * @return -
 */
private static BindOrSourcePlan makeSourcePlan(
        final ElementSource elementSource) throws SPARQLExtException {
    Objects.requireNonNull(elementSource, "The Source must not be null");

    Node node = elementSource.getSource();
    Node accept = elementSource.getAccept();
    Var var = elementSource.getVar();

    Objects.requireNonNull(node, "The source must not be null");
    checkIsTrue(node.isURI() || node.isVariable(), "The source must be a"
            + " URI or a variable. Got " + node);
    // accept may be null
    checkIsTrue(accept == null || accept.isVariable() || accept.isURI(),
            "The accept must be null, a variable or a URI. Got " + accept);
    Objects.requireNonNull(var, "The variable must not be null.");

    return new SourcePlan(node, accept, var);
}
 
示例3
final public Node VarOrIri() throws ParseException {
                 Node n = null ; String iri ;
  switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  case VAR1:
  case VAR2:
    n = Var();
    break;
  case IRIref:
  case PNAME_NS:
  case PNAME_LN:
    iri = iri();
                            n = createNode(iri) ;
    break;
  default:
    jj_la1[123] = jj_gen;
    jj_consume_token(-1);
    throw new ParseException();
  }
  {if (true) return n ;}
  throw new Error("Missing return statement in function");
}
 
示例4
final public Var Var() throws ParseException {
            Token t ;
  switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
  case VAR1:
    t = jj_consume_token(VAR1);
    break;
  case VAR2:
    t = jj_consume_token(VAR2);
    break;
  default:
    jj_la1[125] = jj_gen;
    jj_consume_token(-1);
    throw new ParseException();
  }
    {if (true) return createVariable(t.image, t.beginLine, t.beginColumn) ;}
  throw new Error("Missing return statement in function");
}
 
示例5
private List<Binding> getNewValues(String queryName, SPARQLExtQuery query, List<Var> signature, List<List<Node>> callParameters) {
    final int size = signature.size();
    final List<Binding> bindings = new ArrayList<>();
    for (List<Node> callParams : callParameters) {
        if (callParams.size() != size) {
            throw new SPARQLExtException("Query " + queryName + " called with " + callParams.size() + " parameters but accepts only " + size);
        }
        final BindingHashMap b = new BindingHashMap();
        for (int i = 0; i < size; i++) {
        	if(callParams.get(i) != null) {
        		b.add(signature.get(i), callParams.get(i));
        	}
        }
        bindings.add(b);
    }
    return bindings;
}
 
示例6
public boolean canBeIsomorphic(Node n1, Node n2) {
    if (    (n1.isBlank() || Var.isBlankNodeVar(n1))
         && (n2.isBlank() || Var.isBlankNodeVar(n2)) ) {
        final Node other = map.get(n1);
        if ( other == null ) {
        	if ( valueSet.contains(n2) )
        		return false;

            map.put(n1, n2);
            valueSet.add(n2);
            return true;
        }
        return other.equals(n2);
    }
    return n1.equals(n2);
}
 
示例7
private static Map<String, Object> tupleBindings(List<Var> vars, List<Object> t) {
	assert vars.size() == t.size();
	Map<String, Object> result = HashMapFactory.make();
	
	vars = JenaTranslator.sortVars(vars, new Function<Var,String>() {
		@Override
		public String apply(Var arg0) {
			return arg0.getVarName();
		}			
	});

	for(int i = 0; i < vars.size(); i++) {
		result.put(vars.get(i).getVarName(), t.get(i));
	}
	
	if (DEBUG) System.err.println(result);
	return result;
}
 
示例8
private static Node replace(Node node, Set<String> assignNeeded, Map<String, Var> assignSuper, Map<String, Var> assign) {
    if (!node.isBlank()) {
        return node;
    }
    String label = node.getBlankNodeLabel();
    if (!assignNeeded.contains(label)) {
        return node;
    }
    if (assignSuper.containsKey(label)) {
        return assignSuper.get(label);
    }
    if (assign.containsKey(label)) {
        return assign.get(label);
    }
    return node;
}
 
示例9
/**
 * {@inheritDoc
 */
@Override
public Object visit(Node_List node) {
    if (cache.containsKey(node)) {
        result = cache.get(node);
        return null;
    }
    if (node.getExpr().isVariable()) {
        result = node;
        return null;
    }
    Var var = Var.alloc(node.getLabel());
    final Expr expr = nzer.normalize(node.getExpr());
    bindings.add(new ElementBind(var, expr));
    Node_List nzedList = new Node_List(new ExprVar(var));
    cache.put(node, nzedList);
    this.result = nzedList;
    return null;
}
 
示例10
private QueryIterator execAllNodes(Var subjVar, Node nodeLocalname,  Binding input, ExecutionContext execCxt)
{
    if ( ! nodeLocalname.isVariable() )
    {
        if ( ! nodeLocalname.isLiteral() )
            // Not a variable, not a literal=> can't match
            return QueryIterNullIterator.create(execCxt) ;
    
        if( ! NodeUtils.isSimpleString(nodeLocalname) )
            return QueryIterNullIterator.create(execCxt) ;
    }
    
    //Set bindings = new HashSet() ;    // Use a Set if you want unique results. 
    List<Binding> bindings = new ArrayList<Binding>() ;   // Use a list if you want counting results. 
    Graph graph = execCxt.getActiveGraph() ;
    
    ExtendedIterator<Triple>iter = graph.find(Node.ANY, Node.ANY, Node.ANY) ;
    for ( ; iter.hasNext() ; )
    {
        Triple t = iter.next() ;
        slot(bindings, input, t.getSubject(),   subjVar, nodeLocalname) ;
        slot(bindings, input, t.getPredicate(), subjVar, nodeLocalname) ;
        slot(bindings, input, t.getObject(),    subjVar, nodeLocalname) ;
    }
    return new QueryIterPlainWrapper(bindings.iterator(), execCxt) ;
}
 
示例11
/**
 * Makes the plan for a SPARQL ITERATOR clause.
 *
 * @param elementIterator the SPARQL ITERATOR
 * @return -
 */
static IteratorPlan makeIteratorPlan(
        final ElementIterator elementIterator)
        throws SPARQLExtException {
    Objects.requireNonNull(elementIterator, "The Iterator must not be null");

    List<Var> vars = elementIterator.getVars();
    Expr expr = elementIterator.getExpr();

    Objects.requireNonNull(vars, "The variables of the Iterator must not be null");
    Objects.requireNonNull(expr, "The Expr in the iterator must not be null");
    checkIsTrue(expr.isFunction(), "Iterator should be a function:"
            + " <iri>(...) AS ?var1 ?var2 ...");

    ExprFunction function = expr.getFunction();
    String iri = function.getFunctionIRI();
    ExprList exprList = new ExprList(function.getArgs());
    return new IteratorPlan(iri, exprList, vars);
}
 
示例12
@Override
public List<SortCondition> getOrderBy() {
	List<SortCondition> conditions = new ArrayList<SortCondition>();
	List<OrderCondition> orderConditions = selectQuery
			.getSolutionModifier().getOrderClause();
	for (OrderCondition condition : orderConditions) {
		Var expr = null;
		int dir = ORDER_UNKNOW;
		if (condition.getType() == OrderCondition.EOrderType.ASC) {
			dir = ORDER_ASCENDING;
		} else if (condition.getType() == OrderCondition.EOrderType.DESC) {
			dir = ORDER_DESCENDING;
		}

		SortCondition sortCondition = new SortCondition(expr, dir);
		conditions.add(sortCondition);
	}
	return conditions.size() > 0 ? conditions : null;
}
 
示例13
/**
 * Turns a QuerySolution into a Binding. 
 * @param map  the input QuerySolution
 * @return a Binding or null if the input is null
 */
public static Binding asBinding(final QuerySolution map) {
	if(map != null) {
		BindingHashMap result = new BindingHashMap();
		Iterator<String> varNames = map.varNames();
		while(varNames.hasNext()) {
			String varName = varNames.next();
			RDFNode node = map.get(varName);
			if(node != null) {
				result.add(Var.alloc(varName), node.asNode());
			}
		}
		return result;
	}
	else {
		return null;
	}
}
 
示例14
public static void runFabricate(String queryFile, SparqlSelectResult result) throws URISyntaxException,
		MalformedURLException, ParserConfigurationException, SAXException,
		IOException {
	Query q = JenaUtil.parse(queryFile);
	List<Var> vars = q.getProjectVars();

	UniverseFactory uf = new BoundedUniverse();

	SolutionRelation r = null;
	if (result != null) {
		uf.addSolution(r = new SolutionRelation(result, vars, Collections.<String,Object>emptyMap()));
	}

	Op query = JenaUtil.compile(q);
	JenaTranslator jt = r==null? JenaTranslator.make(vars, query, uf): JenaTranslator.make(vars, query, uf, r);
	Pair<Formula, Pair<Formula, Formula>> answer = jt.translateSingle(Collections.<String,Object>emptyMap(), false).iterator().next();

	check(uf, answer, "solution");
}
 
示例15
public void exec(List<Var> variables, List<Binding> values, Context context) {
	final IndentedWriter writer = ContextUtils.getTemplateOutput(context);
	boolean first = true;
	final FunctionEnv env = new FunctionEnvBase(context);
	String result;
	for(Iterator<Binding> it=values.iterator(); it.hasNext();) {
		Binding binding = it.next();
		if (first && before != null) {
			result = getExprEval(before, binding, context, env);
			writer.print(result);
		}
		if (!first && separator != null) {
			result = getExprEval(separator, binding, context, env);
			writer.print(result);
		}
		result = getExprEval(expr, binding, context, env);
		writer.print(result);
		first = false;
		if (!it.hasNext() && after != null) {
			result = getExprEval(after, binding, context, env);
			writer.print(result);
		}
		writer.flush();
	}
}
 
示例16
private Query createQuery(final SPARQLExtQuery select, final List<Var> variables,
		final List<Binding> values, final Context context) {
	// SPARQLExtQuery q = select.cloneQuery();
	Binding binding = !values.isEmpty() ? values.get(0) : null;
	SelectQueryPartialCopyVisitor cloner = new SelectQueryPartialCopyVisitor(binding, context);
	select.visit(cloner);
	Query q = cloner.getOutput();
	if (!isSelectType && !q.hasGroupBy() && !q.hasAggregators()) {
		variables.forEach(v -> {
			if (!q.getProjectVars().contains(v)) {
				q.getProject().add(v);
			}
		});
	}
	return q;
}
 
示例17
@Override
public void visitGroupBy(final Query query) {
    if (query.hasGroupBy()) {
    	isDummyQuery = false;
        if (!query.getGroupBy().isEmpty()) {
            VarExprList namedExprs = query.getGroupBy();
            for (Var var : namedExprs.getVars()) {
                Expr expr = namedExprs.getExpr(var);
                if (expr != null) {
                    output.addGroupBy(var, expr);
                    if (!query.isSelectType()) {
                        output.addResultVar(var);
                    }
                } else {
                    output.addGroupBy(var.getVarName());
                    if (!query.isSelectType()) {
                        output.addResultVar(var);
                    }
                }
            }
        }
    }
}
 
示例18
private Var toVar(String s) {
	if (s == null)
		return null;
	/* SPARQL 1.1 VAR Gramar ?
	 VARNAME	  ::=  	( PN_CHARS_U | [0-9] ) ( PN_CHARS_U | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] )*
	 PN_CHARS_U	  ::=  	PN_CHARS_BASE | '_'
	 PN_CHARS_BASE	  ::=  	[A-Z] | [a-z] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x02FF] | [#x0370-#x037D] | [#x037F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
		I've omitted UTF-16 character range #x10000-#xEFFFF.
	*/

	String PN_CHARS_BASE = "A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD";
	String pattern = PN_CHARS_BASE + "0-9\u00B7\u0300-\u036F\u203F-\u2040";

	s = s.trim().replaceAll("[^" + pattern + "]", "_").replace(":", "");

	if ("".equals(s))
		return null;
	return Var.alloc(s);
}
 
示例19
private void execIteratorAndSourcePlans(final List<Var> variables, final List<Binding> values,
		final Context context, final int i) {
	if (i < iteratorAndSourcePlans.size()) {
		final BindingsClausePlan plan = iteratorAndSourcePlans.get(i);
		if (plan instanceof BindOrSourcePlan) {
			final BindOrSourcePlan bindOrSourcePlan = (BindOrSourcePlan) plan;
			variables.add(bindOrSourcePlan.getVar());
			final List<Binding> newValues = bindOrSourcePlan.exec(values, context);
			execIteratorAndSourcePlans(variables, newValues, context, i + 1);
			LOG.debug("Finished plan " + bindOrSourcePlan);
		} else {
			IteratorPlan iteratorPlan = (IteratorPlan) plan;
			iteratorPlan.exec(variables, values, context, (newValues) -> {
				final List<Var> newVariables = new ArrayList<>(variables);
				newVariables.addAll(iteratorPlan.getVars());
				execIteratorAndSourcePlans(newVariables, newValues, context, i + 1);
				LOG.debug("Finished batch for " + iteratorPlan);
			});
			LOG.debug("Finished plan " + iteratorPlan);
		}
	} else {
		execSelectPlan(variables, values, context);
	}
}
 
示例20
private static ElementData compress(List<Var> variables, List<Binding> input) {
    ElementData el = new ElementData();
    variables.forEach(el::add);
    if (input.size() < 10) {
        input.forEach((b) -> el.add(compress(variables, b)));
        return el;
    }
    for (int i = 0; i < 5; i++) {
        el.add(compress(variables, input.get(i)));
    }
    BindingMap binding = BindingFactory.create();
    Node n = NodeFactory.createLiteral("[ " + (input.size() - 10) + " more ]");
    variables.forEach((v) -> binding.add(v, n));
    el.add(binding);
    for (int i = input.size() - 5; i < input.size(); i++) {
        el.add(compress(variables, input.get(i)));
    }
    return el;
}
 
示例21
@Test
public void testROWNUM() throws IOException {
	options = new CSVOptions();
	csv = "First,Last\nAlice,Smith\nBob,Miller";
	String query = "SELECT ?ROWNUM ?First ?Last {} OFFSET 1";
	TarqlQuery tq =  new TarqlParser(new StringReader(query), null).getResult();
	List<Var> vars = vars("ROWNUM", "First", "Last");
	assertSelect(tq, binding(vars, "1", "\"Alice\"", "\"Smith\""), binding(vars, "2", "\"Bob\"", "\"Miller\""));
}
 
示例22
@Override
public void visit(OpExtend opExtend) {
	for(Entry<Var, Expr> v : opExtend.getVarExprList().getExprs().entrySet()) {
		add(processVar(v.getKey()));
		processExpr(v.getValue());
	}
}
 
示例23
@Override
public void visit(OpProject arg0) {
	visit(arg0.getSubOp(), (TranslatorContext context, Formula f) -> {
		TranslatorContext sub = new DelegatingContext(context) {
			private final Map<String, Variable> vars;
			
			{
				vars = HashMapFactory.make();
				for(Var v : arg0.getVars()) {
					String name = v.getName();
					Variable nv = context.getVars().get(name);
					vars.put(name, nv);
				}
			}
			
			@Override
			public Map<String, Variable> getVars() {
				return vars;
			}
			
		};

		this.context = sub;
		sub.setCurrentQuery(f);
		sub.getCurrentContinuation().next(sub, f);
	});
}
 
示例24
private static void addCompressedToElementData(ElementData el, Binding b) {
    final Binding compressed = compress(b);
    final Iterator<Var> varsIterator = compressed.vars();
    while (varsIterator.hasNext()) {
        el.add(varsIterator.next());
    }
    el.add(compressed);
}
 
示例25
protected Set<String> getMultipleOccurrenceVars(MultiSet<Var> vars) {
	Set<String> ret = new HashSet<String>();
	for (Var v: vars) {
		if (vars.getCount(v)>1) {
			ret.add(v.getName());
		}
	}
	return ret;
}
 
示例26
@Test
public void testSelectWithFilter() throws IOException {
	csv = "Alice,Smith\nBob,Cook";
	String query = "SELECT * { FILTER(?b=\"Smith\") }";
	TarqlQuery tq =  new TarqlParser(new StringReader(query), null).getResult();
	List<Var> vars = vars("a", "b");
	assertSelect(tq, binding(vars, "\"Alice\"", "\"Smith\""));
}
 
示例27
@Override
public void visit(ExprVar nv) {
	String s = nv.getVarName();
	if (Var.isBlankNodeVarName(s)) {
		// Return to a bNode via the bNode mapping of a variable.
		Var v = Var.alloc(s);
		out.print(context.getBNodeMap().asString(v));
	} else {
		// Print in variable form or as an aggregator expression
		out.print(nv.asSparqlExpr());
	}
}
 
示例28
@Test
public void testBindData() throws IOException {
	csv = "x";
	String query = "SELECT * { BIND (?a AS ?b) }";
	TarqlQuery tq =  new TarqlParser(new StringReader(query), null).getResult();
	List<Var> vars = vars("a", "b");
	assertSelect(tq, binding(vars, "\"x\"", "\"x\""));
}
 
示例29
void printSignature(SPARQLExtQuery query) {
    out.print("(");
    boolean first = true;
    List<Var> signature = query.getSignature();
    for (int i = 0; i < signature.size(); i++) {
        Var var = signature.get(i);
        if (i != 0) {
            out.print(", ");
        }
        out.print("?");
        out.print(var.getName());
        first = false;
    }
    out.print(")");
}
 
示例30
public static Binding binding(List<Var> header, String... values) {
	if (header.size() != values.length) {
		throw new IllegalArgumentException(
				"header and values must have same length: " + 
						header + ", " + Arrays.toString(values));
	}
	BindingHashMap result = new BindingHashMap();
	for (int i = 0; i < header.size(); i++) {
		result.add(header.get(i), NodeFactoryExtra.parseNode(values[i]));
	}
	return result;
}