Hi Andy,

Thanks you for your quick response.
I am working on a project that extends Apache Jena and in the preprocessing 
phase I need to find the triple patterns of all variables 
For example the following:

(project (?o)
  (join
    (project (?p ?o) #project0
      (bgp
        (triple ?s ?p ?o)  #triple0
        (triple ?s ?k ?m) #triple1
      ))
    (project (?p ?o) #project1
      (bgp (triple ?o ?p ?s) #triple2
        ))))



will give the following map:

?s —> [ triple0 , triple1 ]
?p —> [ triple0 , triple2 ]
?o —> [ triple0 , triple2 ]
?k —> [ triple1 ]
?m —> [ triple1 ] 


So I thought that the easiest way of building the graph is to construct a map 
of variables to a list of (triple-position). This can be done by traversing an 
operator using the OpWalker.walk(Op op, OpVisitor visitor) and storing the 
variables to a Map<Node_Variable, List<Triple>>.

To achieve that we need to rename all variables that are not visible outside 
project operators. 
The class TransformScopeRename can do  exactly this by employing at some point 
the Rename.renameVars(Op op, Collection<Var> constants) function which 
eventually adds the prefix “/” to each local variable. 
However the local variables will have the same name across different project 
operators.

For example the above algebra will be transformed to 

(project (?o)
  (join
    (project (?p ?o) #project0
      (bgp
        (triple ?/s ?p ?o)  #triple0
        (triple ?s ?/k ?/m) #triple1
      ))
    (project (?p ?o) #project1
      (bgp (triple ?o ?p ?/s) #triple2
        ))))

where variable ?s under project0 and project1 will get the same name ?/s so it 
remains the same variable and cannot be globally distinguished.

I thought that the solution to this problem was to perform the renaming by 
adding different prefixes to the hidden variables per project operator.

Thanks
Dimis

> On 31 Jan 2017, at 11:36, Andy Seaborne <[email protected]> wrote:
> 
> Hi Dimis,
> 
> Thanks for pointing this point.
> 
> This function has changed recently in the development branch - there is no 
> longer a class member "varPrefix" because "varPrefix" was always set to the 
> constant "prefix". The fixed setting is assumed elsewhere in the code.
> 
> https://github.com/apache/jena/blob/master/jena-arq/src/main/java/org/apache/jena/sparql/engine/Rename.java
> 
> Do you have specific need to have "varPrefix" in RenameAnyVars? It can be put 
> back easily enough even if not required by ARQ itself.
> 
>    Andy
> 
> 
> On 31/01/17 00:16, Dimitrianos Savva wrote:
>> Hi,
>> 
>> It seems that the field varPrefix should have been used as a parameter 
>> (instead of prefix):
>> 
>> var2 = Rename.chooseVarName(var, constants, prefix) ;
>> 
>> in function:
>> 
>> Node apply(Node node)
>> 
>> in static class RenameAnyVars
>> 
>> in class org.apache.jena.sparql.engine.Rename
>> 
>> Thanks
>> Dimis
>> 

Reply via email to