Hi Andy,
Thanks.  Thls explanation helped clue me in on what I needed to do to fix my 
transform.  As always, I appreciate the help!

Tim




On Wednesday, January 8, 2014 2:55 PM, Andy Seaborne <[email protected]> wrote:
 
On 08/01/14 19:53, Tim Harsch wrote:
>> Hi,
>> I'm trying to write a transformer on a spatial property function.  For 
>> example:
>>
>>
>> The following algbra
>>
>> (propfunc <http://jena.apache.org/spatial#withinBox>
>>          ?s (37.6315270872214 -122.52347356152336 37.81401629628255 
>>-122.35095387768547)
>>          (table unit)
>>        )
>>
>> Comes in to:
>> public Op transform(OpPropFunc opPropFunc, Op subOp)
>>
>>
>> as
>> (propfunc <http://jena.apache.org/spatial#withinBox>
>>          ?s (37.6315270872214 -122.52347356152336 37.81401629628255 
>>-122.35095387768547)
>>          (table unit)
>>        )
>> for opPropFunc
>>
>> and
>> (table unit)
>> for subOp
>>
>> I don't really understand why some transforms have a subOp and some don't
>
>It's not specific to property functions. They appear all over the place 
>but are often trimmed as the last step of algebra generation and it's 
>called "simplifcation" in the spec.
>
>The original query was something like:
>
>{ ?s spatial:withinBox
>       ( 37.6315270872214 -122.52347356152336
>         37.81401629628255 -122.35095387768547 )
>
>  ... more ...
>}
>
>A propfunc is a function to be called on the output of graph pattern 
>matching i.e. an iterator over some earlier results in the query.
>
>There is always a graph pattern.
>
>When you have { ... }, the SPARQL spec says to start with the empty 
>pattern.  Sometimes, it can't be removed as it's necessary. The empty 
>graph pattern - a BGP of zero triple patterns - appears when no pattern.
>
>{ FILTER(true) }
>
>becomes
>
>  (filter true
>    (table unit))
>
>{ OPTIONAL { ?s ?p ?o } }
>
>becomes
>
>   (leftjoin
>     (table unit)
>     (bgp (triple ?s ?p ?o)))
>
>It evaluates to a table of one row and no columns. So there is a table 
>of one row and no columns.  That is the join identity in SPARQL.
>
>
>(table unit)
>
>forall X . I join X = X
>
>so removal is possible when it leaves a pattern behind otherwise it remains.
>
>    Andy
>
>
>>
>
>
>
>

Reply via email to