Andy,

"Another approach is to use a named variable, parse the SPARQL query, which 
identifies variables, then rewrite the parsed structure to replace occurrences 
of variable 'n' by a specific value.”

in a first glance, it's what I expect to do. If I have a variable ?n 
instantiated, I will lookup for &n and replace. 

I read carefully your suggestions but I need to start to have a well founded 
opinion. I will start only in next week.

Miguel


On 19 Aug 2014, at 14:36, Andy Seaborne <[email protected]> wrote:

> On 18/08/14 12:17, Miguel Bento Alves wrote:
>> Dear all,
>> 
>> I will start to develop an engine to evaluate rules that combines SPARQL 
>> commands with rule terms. The purpose is to be possible to define rules like:
>> 
>> ex:SportsMan ex:minimumSportsPlayed 1 .
>> ex:IronMan ex:minimumSportsPlayed 3 .
>> 
>> 
>>  (?x rdf:type ?t) <-
>>      ?t ex:minimumSportsPlayed ?n .
>>      (\\\SPARQL      
>>               (Select ?x     
>>               Where {        
>>                       ?x ex:playSport ?y .   
>>               }      
>>               group by ?x    
>>               having (count(1) >=&n)
>>       \\\SPARQL).    
>>      
>> Note: in a first approach syntax "&n" is to make reference to ?n .
>> 
>> my question is: how we should make reference to external variables in a 
>> Sparql command?
>> 
>> To start the discussion, I have two proposals:
>>      the symbol "&";
>>      keep the symbol "?", where some variables must be instantiated before 
>> the execution of the sparql command. Something like:
>>       (?x rdf:type ?t) <-
>>              ?t ex:minimumSportsPlayed ?n .
>>              (\\\SPARQL      
>>                       (Select ?x     
>>                       Where {        
>>                               ?x ex:playSport ?y .   
>>                       }      
>>                       group by ?x    
>>                       having (count(1) >=?n)
>>               \\\SPARQL).    
>>      
>>      
>> Miguel
>> 
> 
> Using & means you need to process the query string and so need to be careful 
> of & used elsewhere (e.g. in a string, in the '&&' operator).
> 
> Another approach is to use a named variable, parse the SPARQL query, which 
> identifies variables, then rewrite the parsed structure to replace 
> occurrences of variable 'n' by a specific value.
> 
> If "?t ex:minimumSportsPlayed ?n" has multiple matches, it would need to loop 
> on ?n.
> 
> I do have some code that rewrites the abstract syntax tree:
> 
> https://github.com/afs/AFS-Dev/tree/master/src/main/java/element
> 
> which you're free to copy and use.
> 
> Or you can do it on the Algebra -- see 
> com.hp.hpl.jena.sparql.core.Substitute(Op, Binding)
> 
> If you know "?t ex:minimumSportsPlayed ?n" is from the data, you may be able 
> to convert that part and the SPARQL query into a single algebra expression bu 
> joining the two parts, and execute the whole right-hand side as SPARQL.
> 
>       Andy
> 

Reply via email to