[ 
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)

Reply via email to