You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jena.apache.org by "Joshua Taylor (JIRA)" <ji...@apache.org> on 2014/01/30 17:10:12 UTC

[jira] [Updated] (JENA-631) property functions are not called from property paths

     [ https://issues.apache.org/jira/browse/JENA-631?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Joshua Taylor updated JENA-631:
-------------------------------

    Attachment: PropertyFunctionsNotCalledInPath.java

Code to demonstrate the issue.

> property functions are not called from property paths
> -----------------------------------------------------
>
>                 Key: JENA-631
>                 URL: https://issues.apache.org/jira/browse/JENA-631
>             Project: Apache Jena
>          Issue Type: Bug
>          Components: ARQ, Jena
>    Affects Versions: Jena 2.11.1
>            Reporter: Joshua Taylor
>         Attachments: PropertyFunctionsNotCalledInPath.java
>
>
> Property functions in certain property paths are not invoked.  This was discussed on the users mailing list [1], and sample code to reproduce follows.
> [1] http://mail-archives.apache.org/mod_mbox/jena-users/201401.mbox/%3CCA%2BQ4JnnO4oOLzdA0OP1csP8fr_RRdtRW_p_o8D9%2BKpwvisTm8g%40mail.gmail.com%3E
> import com.hp.hpl.jena.graph.Node;
> import com.hp.hpl.jena.query.Query;
> import com.hp.hpl.jena.query.QueryExecutionFactory;
> import com.hp.hpl.jena.query.QueryFactory;
> import com.hp.hpl.jena.rdf.model.Model;
> import com.hp.hpl.jena.rdf.model.ModelFactory;
> import com.hp.hpl.jena.sparql.algebra.Algebra;
> import com.hp.hpl.jena.sparql.engine.ExecutionContext;
> import com.hp.hpl.jena.sparql.engine.QueryIterator;
> import com.hp.hpl.jena.sparql.engine.binding.Binding;
> import com.hp.hpl.jena.sparql.pfunction.PropFuncArg;
> import com.hp.hpl.jena.sparql.pfunction.library.version;
> import com.hp.hpl.jena.vocabulary.RDFS;
> public class PropertyFunctionsNotCalledInPath {
> 	// This class isn't important.  It's just an extension of an existing property 
> 	// function class so that we can add some output.
> 	public static class versionEx extends version {
> 		@Override
> 		public QueryIterator execEvaluated(Binding binding, PropFuncArg subject, Node predicate, PropFuncArg object, ExecutionContext execCxt) {
> 			System.out.println( "** Calling versionEx **" );
> 			return super.execEvaluated(binding, subject, predicate, object, execCxt);
> 		}
> 		
> 	}
> 	public static void main(String[] args) {
> 		Model model = ModelFactory.createDefaultModel();
> 		model.add( RDFS.Class, RDFS.comment, RDFS.Class );
> 		String[] queries = {
> 				"ask { ?s <java:PropertyFunctionsNotCalledInPath$versionEx>  \"foo\" }" ,
> 				"ask { ?s <java:PropertyFunctionsNotCalledInPath$versionEx>? \"foo\" }" };
> 		
> 		for ( String queryString : queries ) {
> 			Query query = QueryFactory.create( queryString );
> 			System.out.println( "Result:  "+QueryExecutionFactory.create( query, model ).execAsk() );
> 			System.out.println( "Query:   "+queryString );
> 			System.out.println( "Algebra: "+Algebra.compile( query ));
> 		}
> 		
> 		/*
> 		 * Output is as follows.  The versionEx property function gets called in the 
> 		 * simple case, but not in the case of the more complicated property path.
> 		 * Neither algebra expression has a propertyfunc operator;  the first just
> 		 * uses (triple ...).
> ** Calling versionEx **
> Result:  false
> Query:   ask { ?s <java:PropertyFunctionsNotCalledInPath$versionEx>  "foo" }
> Algebra: (bgp (triple ?s <java:PropertyFunctionsNotCalledInPath$versionEx> "foo"))
> Result:  true
> Query:   ask { ?s <java:PropertyFunctionsNotCalledInPath$versionEx>? "foo" }
> Algebra: (path ?s (path? <java:PropertyFunctionsNotCalledInPath$versionEx>) "foo")
> 		 */
> 	}
> }



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)