Java源码示例:org.apache.jena.sparql.engine.ExecutionContext

示例1
static public QueryIterator create( QueryIterator input,
                                       Triple tp,
                                       ExecutionContext cxt )
{
	if (   tp.getSubject() instanceof Node_Triple
	    || tp.getObject()  instanceof Node_Triple
		|| tp.getSubject().isVariable()
		|| tp.getObject().isVariable() )
	{
		return new QueryIterTripleStarPattern(input, tp, cxt);
	}
	else
	{
		return new QueryIterTriplePattern(input, tp, cxt);
	}
}
 
示例2
public TripleMapper( Binding binding, Triple tp, ExecutionContext cxt )
{
    super(cxt) ;
    this.s = ExtendedSubstitute.substitute( tp.getSubject(),   binding );
    this.p = ExtendedSubstitute.substitute( tp.getPredicate(), binding );
    this.o = ExtendedSubstitute.substitute( tp.getObject(),    binding );
    this.sIsTripleWithVars = isTripleWithVars(s);
    this.oIsTripleWithVars = isTripleWithVars(o);
    this.binding = binding;

    final Node s2 = sIsTripleWithVars ? Node.ANY : convertToBeUsedForFind(s);
    final Node p2 = convertToBeUsedForFind(p);
    final Node o2 = oIsTripleWithVars ? Node.ANY : convertToBeUsedForFind(o);

    final Graph graph = cxt.getActiveGraph();
    this.graphIter = graph.find(s2, p2, o2);
}
 
示例3
@Test
public void matchSubjectInSubjectTriple()
{
	// << ?V1 ex:p ex:o >> ex:m1 ex:x1
	final Triple tp1 = new Triple( $V1(), $p(), $o() );
	final Node nTP1 = new Node_TripleStarPattern( tp1 );
	final Triple tp2 = new Triple( nTP1, $m1(), $x1() );

	final Binding inputBinding = BindingFactory.binding();
	final ExecutionContext execCxt = createTestExecCxt();
	final QueryIterator input = QueryIterSingleton.create(inputBinding, execCxt);

	final QueryIterator it = QueryIterTripleStarPattern.create( input, tp2, execCxt );
	assertTrue( it.hasNext() );

	final Binding outputBinding = it.nextBinding();
	assertEquals( 1, outputBinding.size() );
	assertEquals( $V1(), outputBinding.vars().next() );

	assertEquals( $s(), outputBinding.get($V1()) );

	assertFalse( it.hasNext() ); 
	it.close();
}
 
示例4
@Test
public void matchSubjectInSubjectTripleWithGivenObjectInMetaTriple()
{
	// << ?V1 ex:p ex:o >> ex:m1 ?V2
	final Triple tp1 = new Triple( $V1(), $p(), $o() );
	final Node nTP1 = new Node_TripleStarPattern( tp1 );
	final Triple tp2 = new Triple( nTP1, $m1(), $V2() );

	// ?V2 --> ex:x1
	final Binding inputBinding = BindingFactory.binding( $V2(), $x1() );
	final ExecutionContext execCxt = createTestExecCxt();
	final QueryIterator input = QueryIterSingleton.create(inputBinding, execCxt);

	final QueryIterator it = QueryIterTripleStarPattern.create( input, tp2, execCxt );
	assertTrue( it.hasNext() );

	final Binding outputBinding = it.nextBinding();
	assertEquals( 2, outputBinding.size() );

	assertEquals( $s(), outputBinding.get($V1()) );
	assertEquals( $x1(), outputBinding.get($V2()) );

	assertFalse( it.hasNext() ); 
	it.close();
}
 
示例5
@Test
public void matchNothingWithGivenObjectInObjectTriple()
{
	// ?V1 ?V2 << ex:s ex:p ?V3 >>
	final Triple tp1 = new Triple( $s(), $p(), $V3() );
	final Node nTP1 = new Node_TripleStarPattern( tp1 );
	final Triple tp2 = new Triple( $V1(), $V2(), nTP1 );

	// ?V3 --> ex:x1
	final Binding inputBinding = BindingFactory.binding( $V3(), $x1() );
	final ExecutionContext execCxt = createTestExecCxt();
	final QueryIterator input = QueryIterSingleton.create(inputBinding, execCxt);

	final QueryIterator it = QueryIterTripleStarPattern.create( input, tp2, execCxt );
	assertFalse( it.hasNext() ); 
	it.close();
}
 
示例6
@Test
public void matchObjectRequiresRedundancyAugmentation()
{
	// ex:s ex:p ?V3
	final Triple tp = new Triple( $s(), $p(), $V3() );

	final Binding inputBinding = BindingFactory.binding();
	final ExecutionContext execCxt = createTestExecCxt();
	final QueryIterator input = QueryIterSingleton.create(inputBinding, execCxt);

	final QueryIterator it = QueryIterTripleStarPattern.create( input, tp, execCxt );
	assertTrue( it.hasNext() );

	final Binding outputBinding = it.nextBinding();
	assertEquals( 1, outputBinding.size() );

	assertEquals( $o(), outputBinding.get($V3()) );

	assertFalse( it.hasNext() ); 
	it.close();
}
 
示例7
@Test
public void matchSubjectWithGivenObjectRequiresRedundancyAugmentation()
{
	// ?V1 ex:p ?V3
	final Triple tp = new Triple( $V1(), $p(), $V3() );

	// ?V3 --> ex:x1
	final Binding inputBinding = BindingFactory.binding( $V3(), $o() );
	final ExecutionContext execCxt = createTestExecCxt();
	final QueryIterator input = QueryIterSingleton.create(inputBinding, execCxt);

	final QueryIterator it = QueryIterTripleStarPattern.create( input, tp, execCxt );
	assertTrue( it.hasNext() );

	final Binding outputBinding = it.nextBinding();
	assertEquals( 2, outputBinding.size() );

	assertEquals( $s(), outputBinding.get($V1()) );
	assertEquals( $o(), outputBinding.get($V3()) );

	assertFalse( it.hasNext() ); 
	it.close();
}
 
示例8
private static Node invokeFunction(Resource function, ExprList args, Dataset dataset) {

		if (dataset == null) {
	        dataset = ARQFactory.get().getDataset(ModelFactory.createDefaultModel());
	    }
		
		E_Function expr = new E_Function(function.getURI(), args);
		DatasetGraph dsg = dataset.asDatasetGraph();
		Context cxt = ARQ.getContext().copy();
		cxt.set(ARQConstants.sysCurrentTime, NodeFactoryExtra.nowAsDateTime());
		FunctionEnv env = new ExecutionContext(cxt, dsg.getDefaultGraph(), dsg, null);
		try {
			NodeValue r = expr.eval(BindingRoot.create(), env);
			if(r != null) {
				return r.asNode();
			}
		}
		catch(ExprEvalException ex) {
		}
		return null;
	}
 
示例9
@Override
public QueryIterator exec(Binding binding, PropFuncArg argSubject,
		Node predicate, PropFuncArg argObject, ExecutionContext execCxt) {

	argSubject = Substitute.substitute(argSubject, binding);
	argObject = Substitute.substitute(argObject, binding);
	
	if(!argObject.getArg().isVariable()) {
		throw new ExprEvalException("Right hand side of tosh:targetContains must be a variable");
	}
	
	Node targetNode = argSubject.getArgList().get(0);
	Node shapesGraphNode = argSubject.getArgList().get(1);
	
	Model currentModel = ModelFactory.createModelForGraph(execCxt.getActiveGraph());
	Dataset dataset = new DatasetWithDifferentDefaultModel(currentModel, DatasetImpl.wrap(execCxt.getDataset()));

	Model model = dataset.getNamedModel(shapesGraphNode.getURI());
	Resource target = (Resource) model.asRDFNode(targetNode);

	Set<Node> focusNodes = new HashSet<Node>();
	SHACLUtil.addNodesInTarget(target, dataset, focusNodes);
	return new QueryIterExtendByVar(binding, (Var) argObject.getArg(), focusNodes.iterator(), execCxt);
}
 
示例10
private QueryIterator buildSyntax(QueryIterator input, Node nodeVar, String pattern, ExecutionContext execCxt)
{
    Var var2 = createNewVar() ; 
    // Triple patterns for   ?x rdfs:label ?hiddenVar
    ElementTriplesBlock elementBGP = new ElementTriplesBlock();
    Triple t = new Triple(nodeVar, RDFS.label.asNode(), var2) ;
    elementBGP.addTriple(t) ;
    
    // Regular expression for  regex(?hiddenVar, "pattern", "i") 
    Expr regex = new E_Regex(new ExprVar(var2.getName()), pattern, "i") ;
    
    ElementGroup elementGroup = new ElementGroup() ;
    elementGroup.addElement(elementBGP) ;
    elementGroup.addElement(new ElementFilter(regex)) ;
    // Compile it.
    // The better design is to build the Op structure programmatically,
    Op op = Algebra.compile(elementGroup) ;
    op = Algebra.optimize(op, execCxt.getContext()) ;
    return QC.execute(op, input, execCxt) ;
}
 
示例11
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) ;
}
 
示例12
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) ;
}
 
示例13
@Override
public QueryIterator execute(BasicPattern pattern, 
                             QueryIterator input,
                             ExecutionContext execCxt)
{
    // Just want to pick out some BGPs (e.g. on a particualr graph)
    // Test ::  execCxt.getActiveGraph() 
    if ( ! ( execCxt.getActiveGraph() instanceof GraphBase ) )
        // Example: pass on up to the original StageGenerator if
        // not based on GraphBase (which most Graph implementations are). 
        return other.execute(pattern, input, execCxt) ;
    
    System.err.println("MyStageGenerator.compile:: triple patterns = "+pattern.size()) ;

    // Stream the triple matches together, one triple matcher at a time. 
    QueryIterator qIter = input ;
    for (Triple triple : pattern.getList())
        qIter = new QueryIterTriplePattern(qIter, triple, execCxt) ;
    return qIter ;
}
 
示例14
@Override
protected QueryIterator execute(BasicPattern pattern,
                                ReorderTransformation reorder,
                                StageGenerator execution,
                                QueryIterator input,
                                ExecutionContext execCxt)
{
	// The implementation of this method is a copy of the
	// superclass method that is modified to use SPARQL*-aware
	// versions of Substitute and QueryIterBlockTriples.

       Explain.explain(pattern, execCxt.getContext());

       if ( ! input.hasNext() )
           return input;

       if ( reorder != null && pattern.size() >= 2 ) {
           // If pattern size is 0 or 1, nothing to do.
           BasicPattern bgp2 = pattern;

           // Try to ground the pattern
           if ( ! input.isJoinIdentity() ) {
               QueryIterPeek peek = QueryIterPeek.create(input, execCxt);
               // And now use this one
               input = peek;
               Binding b = peek.peek();
               bgp2 = ExtendedSubstitute.substitute(pattern, b);
           }
           ReorderProc reorderProc = reorder.reorderIndexes(bgp2);
           pattern = reorderProc.reorder(pattern);
       }
       Explain.explain("Reorder/generic", pattern, execCxt.getContext());

       QueryIterator chain = input;
       for ( final Triple triple : pattern )
           chain = QueryIterTripleStarPattern.create(chain, triple, execCxt);
       return chain;
}
 
示例15
protected QueryIterTripleStarPattern( QueryIterator input,
                                      Triple tp,
                                      ExecutionContext cxt )
{
    super(input, cxt);
    this.tp = Node_TripleStarPattern.asTripleWithNode_TripleStarPatterns(tp);
}
 
示例16
@Test
public void matchWholeSubjectTriple()
{
	// ?V1 ex:m1 ex:x1
	final Triple tp = new Triple( $V1(), $m1(), $x1() );

	final ExecutionContext execCxt = createTestExecCxt();
	final Binding inputBinding = BindingFactory.binding();
	final QueryIterator input = QueryIterSingleton.create(inputBinding, execCxt);

	final QueryIterator it = QueryIterTripleStarPattern.create( input, tp, execCxt );
	assertTrue( it.hasNext() );

	final Binding outputBinding = it.nextBinding();
	assertEquals( 1, outputBinding.size() );
	assertEquals( $V1(), outputBinding.vars().next() );

	final Node outputValue = outputBinding.get( $V1() );  
	assertTrue( outputValue instanceof Node_Triple );

	final Triple outputTriple = ( (Node_Triple) outputValue ).get();
	assertEquals( $s(), outputTriple.getSubject() );
	assertEquals( $p(), outputTriple.getPredicate() );
	assertEquals( $o(), outputTriple.getObject() );

	assertFalse( it.hasNext() ); 
	it.close();
}
 
示例17
@Test
public void matchWholeObjectTriple()
{
	// ex:x1 ex:m1 ?V1
	final Triple tp = new Triple( $x1(), $m1(), $V1() );

	final ExecutionContext execCxt = createTestExecCxt();
	final Binding inputBinding = BindingFactory.binding();
	final QueryIterator input = QueryIterSingleton.create(inputBinding, execCxt);

	final QueryIterator it = QueryIterTripleStarPattern.create( input, tp, execCxt );
	assertTrue( it.hasNext() );

	final Binding outputBinding = it.nextBinding();
	assertEquals( 1, outputBinding.size() );
	assertEquals( $V1(), outputBinding.vars().next() );

	final Node outputValue = outputBinding.get( $V1() );  
	assertTrue( outputValue instanceof Node_Triple );

	final Triple outputTriple = ( (Node_Triple) outputValue ).get();
	assertEquals( $s(), outputTriple.getSubject() );
	assertEquals( $p(), outputTriple.getPredicate() );
	assertEquals( $o(), outputTriple.getObject() );

	assertFalse( it.hasNext() ); 
	it.close();
}
 
示例18
@Test
public void matchMetaTriplesBasedOnWholeSubjectTriple()
{
	//  << ex:s ex:p ex:o >> ?V1 ?V2
	final Triple tp1 = new Triple( $s(), $p(), $o() );
	final Node nTP1 = new Node_TripleStarPattern( tp1 );
	final Triple tp2 = new Triple( nTP1, $V1(), $V2() );

	final Binding inputBinding = BindingFactory.binding();
	final ExecutionContext execCxt = createTestExecCxt();
	final QueryIterator input = QueryIterSingleton.create(inputBinding, execCxt);

	final QueryIterator it = QueryIterTripleStarPattern.create( input, tp2, execCxt );
	assertTrue( it.hasNext() );

	Binding outputBinding = null;

	outputBinding = it.nextBinding();
	assertEquals( 2, outputBinding.size() );

	assertEquals( $m1(), outputBinding.get($V1()) );
	assertEquals( $x2(), outputBinding.get($V2()) );

	outputBinding = it.nextBinding();
	assertEquals( 2, outputBinding.size() );

	assertEquals( $m1(), outputBinding.get($V1()) );
	assertEquals( $x1(), outputBinding.get($V2()) );

	assertFalse( it.hasNext() ); 
	it.close();
}
 
示例19
@Test
public void matchSubjectInSubjectTripleAndObjectInMetaTriple()
{
	// << ?V1 ex:p ex:o >> ex:m1 ?V2
	final Triple tp1 = new Triple( $V1(), $p(), $o() );
	final Node nTP1 = new Node_TripleStarPattern( tp1 );
	final Triple tp2 = new Triple( nTP1, $m1(), $V2() );

	final Binding inputBinding = BindingFactory.binding();
	final ExecutionContext execCxt = createTestExecCxt();
	final QueryIterator input = QueryIterSingleton.create(inputBinding, execCxt);

	final QueryIterator it = QueryIterTripleStarPattern.create( input, tp2, execCxt );
	assertTrue( it.hasNext() );

	Binding outputBinding = it.nextBinding();
	assertEquals( 2, outputBinding.size() );

	assertEquals( $s(), outputBinding.get($V1()) );
	assertEquals( $x2(), outputBinding.get($V2()) );

	outputBinding = it.nextBinding();
	assertEquals( 2, outputBinding.size() );

	assertEquals( $s(), outputBinding.get($V1()) );
	assertEquals( $x1(), outputBinding.get($V2()) );

	assertFalse( it.hasNext() ); 
	it.close();
}
 
示例20
@Test
public void matchSubjectInMetaTripleWithGivenObjectInObjectTriple()
{
	// ?V1 ?V2 << ex:s ex:p ?V3 >>
	final Triple tp1 = new Triple( $s(), $p(), $V3() );
	final Node nTP1 = new Node_TripleStarPattern( tp1 );
	final Triple tp2 = new Triple( $V1(), $V2(), nTP1 );

	// ?V3 --> ex:o
	final Binding inputBinding = BindingFactory.binding( $V3(), $o() );
	final ExecutionContext execCxt = createTestExecCxt();
	final QueryIterator input = QueryIterSingleton.create(inputBinding, execCxt);

	final QueryIterator it = QueryIterTripleStarPattern.create( input, tp2, execCxt );
	assertTrue( it.hasNext() );

	Binding outputBinding = it.nextBinding();
	assertEquals( 3, outputBinding.size() );

	assertEquals( $x2(), outputBinding.get($V1()) );
	assertEquals( $m2(), outputBinding.get($V2()) );
	assertEquals( $o(), outputBinding.get($V3()) );

	outputBinding = it.nextBinding();
	assertEquals( 3, outputBinding.size() );

	assertEquals( $x1(), outputBinding.get($V1()) );
	assertEquals( $m1(), outputBinding.get($V2()) );
	assertEquals( $o(), outputBinding.get($V3()) );

	assertFalse( it.hasNext() ); 
	it.close();
}
 
示例21
@Test
public void matchSubjectInMetaTripleWithGivenSubjectInObjectTriple()
{
	// ?V1 ?V2 << ?V3 ex:p ex:o >>
	final Triple tp1 = new Triple( $s(), $p(), $V3() );
	final Node nTP1 = new Node_TripleStarPattern( tp1 );
	final Triple tp2 = new Triple( $V1(), $V2(), nTP1 );

	// ?V2 --> ex:m1, ?V3 --> ex:s
	final Binding inputBindingX = BindingFactory.binding( $V2(), $m1() );
	final Binding inputBinding = BindingFactory.binding( inputBindingX, $V3(), $o() );
	final ExecutionContext execCxt = createTestExecCxt();
	final QueryIterator input = QueryIterSingleton.create(inputBinding, execCxt);

	final QueryIterator it = QueryIterTripleStarPattern.create( input, tp2, execCxt );
	assertTrue( it.hasNext() );

	final Binding outputBinding = it.nextBinding();
	assertEquals( 3, outputBinding.size() );

	assertEquals( $x1(), outputBinding.get($V1()) );
	assertEquals( $m1(), outputBinding.get($V2()) );
	assertEquals( $o(), outputBinding.get($V3()) );

	assertFalse( it.hasNext() ); 
	it.close();
}
 
示例22
@Override
public QueryIterator execEvaluated(Binding binding, Node nodeURI, Node predicate, Node nodeLocalname, ExecutionContext execCxt)
{
    if ( ! nodeURI.isVariable() )
        return execFixedSubject(nodeURI, nodeLocalname, binding, execCxt) ;
    else
        return execAllNodes(Var.alloc(nodeURI), nodeLocalname, binding, execCxt) ;
}
 
示例23
@Override
public QueryIterator iterator(ExecutionContext ctxt) {
	// QueryIteratorPlainWrapper doesn't close wrapped 
	// ClosableIterators, so we do that ourselves.
	final ClosableIterator<Binding> wrapped = rows();
	return new QueryIterPlainWrapper(wrapped, ctxt) {
		@Override
		protected void closeIterator() {
			super.closeIterator();
			wrapped.close();
		}
	};
}
 
示例24
protected ExecutionContext createTestExecCxt()
{
	final DatasetGraph dsg = DatasetGraphFactory.create( createTestGraph() );
	final Context context = ARQ.getContext();
	return new ExecutionContext( context, dsg.getDefaultGraph(), dsg, QC.getFactory(context) );
}
 
示例25
@Override
public QueryIterator exec(Binding binding, PropFuncArg argSubject,
		Node predicate, PropFuncArg argObject, ExecutionContext execCxt) {

	argSubject = Substitute.substitute(argSubject, binding);
	argObject = Substitute.substitute(argObject, binding);
	
	if(!argObject.getArg().isVariable()) {
		throw new ExprEvalException("Right hand side of tosh:exprEval must be a variable");
	}
	
	Node exprNode = argSubject.getArgList().get(0);
	Node focusNode = argSubject.getArgList().get(1);
	
	Model model = ModelFactory.createModelForGraph(execCxt.getActiveGraph());
	Dataset dataset = ARQFactory.get().getDataset(model);
	URI shapesGraphURI = URI.create("urn:x-topbraid:dummyShapesGraph");
	dataset.addNamedModel(shapesGraphURI.toString(), model);
	
	ShapesGraph[] shapesGraph = new ShapesGraph[1];
	
	NodeExpression n = NodeExpressionFactory.get().create(model.asRDFNode(exprNode));
	ExtendedIterator<RDFNode> it = n.eval(model.asRDFNode(focusNode), new NodeExpressionContext() {
		
		@Override
		public URI getShapesGraphURI() {
			return shapesGraphURI;
		}
		
		@Override
		public ShapesGraph getShapesGraph() {
			if(shapesGraph[0] == null) {
				shapesGraph[0] = new ShapesGraph(model);
			}
			return shapesGraph[0];
		}
		
		@Override
		public Dataset getDataset() {
			return dataset;
		}
	});
	
	Iterator<Node> nit = it.mapWith(rdfNode -> rdfNode.asNode());

	return new QueryIterExtendByVar(binding, (Var) argObject.getArg(), nit, execCxt);
}
 
示例26
@Override
public void build(PropFuncArg argSubject, Node predicate, PropFuncArg argObject, ExecutionContext execCxt)
{
    if ( argSubject.isList() || argObject.isList() )
        throw new QueryBuildException("List arguments to "+predicate.getURI()) ;
}
 
示例27
@Override
public QueryIterator exec(QueryIterator input, PropFuncArg argSubject, Node predicate, PropFuncArg argObject, ExecutionContext execCxt)
{
    // No real need to check the pattern arguments because
    // the replacement triple pattern and regex will cope
    // but we illustrate testing here.

    Node nodeVar = argSubject.getArg() ;
    String pattern = NodeUtils.stringLiteral(argObject.getArg()) ;
    if ( pattern == null )
    {
        Log.warn(this, "Pattern must be a plain literal or xsd:string: "+argObject.getArg()) ;
        return QueryIterNullIterator.create(execCxt) ;
    }

    if ( false )
        // Old (ARQ 1) way - not recommended.
        return buildSyntax(input, nodeVar, pattern, execCxt) ;
    
    // Better 
    // Build a SPARQL algebra expression
    Var var2 = createNewVar() ;                     // Hidden variable
    
    BasicPattern bp = new BasicPattern() ;
    Triple t = new Triple(nodeVar, RDFS.label.asNode(), var2) ;
    bp.add(t) ;
    OpBGP op = new OpBGP(bp) ;
    
    Expr regex = new E_Regex(new ExprVar(var2.getName()), pattern, "i") ;
    Op filter = OpFilter.filter(regex, op) ;

    // ---- Evaluation
    if ( true )
    {
        // Use the reference query engine
        // Create a table for the input stream (so it uses working memory at this point, 
        // which is why this is not the preferred way).  
        // Then join to expression for this stage.
        Table table = TableFactory.create(input) ;
        Op op2 = OpJoin.create(OpTable.create(table), filter) ;
        return Algebra.exec(op2, execCxt.getDataset()) ;
    }        
    
    // Use the default, optimizing query engine.
    return QC.execute(filter, input, execCxt) ;
}
 
示例28
@Override
public OpExecutor create(ExecutionContext execCxt) {
    return new OpExecutorAlt(execCxt) ;
}
 
示例29
public OpExecutorAlt(ExecutionContext execCxt) {
    super(execCxt) ;
}