I have a fix for he missing operation using a pattern already found
elsewhere (basically queryBuilder.addOptional( queryBuilder ))  but I was
working on the testing and thought I would try the suggestion to clean up
the querybuilder tests by running the same query through the standard
queryFactory.create( string ) method.

The textual output of the 2 looked the same but the equality failed because
the querybuilder used an ElementTriplesBlock and the queryFactory used an
ElementPathBlock.

So my questions are:

What is the difference between the ElementTripleBlock and the
ElementPathBlock?

When should one be used over the other?

Thx,
Claude

On Mon, Sep 21, 2015 at 5:55 PM, Andy Seaborne <[email protected]> wrote:

> On 20/09/15 11:18, Claude Warren wrote:
>
>> Andy,
>>
>> I started to work on a solution which was fairly simple until I started to
>> run the test.  I tried creating a query with the same optional block.
>> However, while they both looked like:
>> {noformat}
>>
>>   OPTIONAL
>>        { ?s  <urn:q>  "123"^^<http://www.w3.org/2001/XMLSchema#int> ;
>>              <urn:v>  ?x
>>          FILTER ( ?x > 56 )
>>        }
>>
>> {noformat}
>>
>> the one built by querybuilder is using an ElementTriplesBlock for the:
>> {noformat}
>>
>> ?s  <urn:q>  "123"^^<http://www.w3.org/2001/XMLSchema#int> ;
>>              <urn:v>  ?x
>>
>> {noformat}
>>
>> while the queryFactory version uses an ElementPathBlock.
>>
>> I suspect this is as defect in the querybuilder but can you explain the
>> difference and when one or the other should be used?
>>
>
> ElementGroup
>
> This is unit for OPTIONAL and other compound structures.  It can hold
> several ElementPathBlock, ElementFilter, ElementOptional.  Indeed, it can
> hold other ElementGroup.
>
> Do not confuse with GROUP BY - unrelated. ElementGroup is SPARQL 1.0 and
> then the term "group" was free.
>
> WhereHandler, other than it's name, looks (by inspection) to be close in
> concept.
>
> It needs "addPattern(WhereHandler)" which is why the name looks odd to me.
>
> This gives the inner {} in:
>     { ?s1 ?p1 ?o1
>       { ?s ?p ?o }
>       ?s2 ?p2 ?o2
>     }
>
> so maybe: untested:
>
> WhereHandler -> PatternHandler
>   without setVars
>   ?? addAll(PatternHandler)
>
> WhereHandler becomes subclass of PatternHandler.
>   with setVars - the only action that only applies to WHERE
>
> WhereHandler::addAll looks odd - only considers ElementTriplesBlock in
> some cases.
>
>         Andy
>
>
>> Claude
>>
>> On Sun, Sep 20, 2015 at 10:19 AM, Claude Warren <[email protected]> wrote:
>>
>> No there isn't.  It is an oversight.  Looks like QueryBuilder needs to
>>> have a group pattern.  I think that this could be done by using a
>>> SelectBuilder as a container the group pattern as we can get a
>>> WhereHandler
>>> from it and that seems to have all the bits that are needed.
>>>
>>> Claude
>>>
>>> On Sat, Sep 19, 2015 at 3:10 PM, Andy Seaborne <[email protected]> wrote:
>>>
>>> how do I add
>>>>
>>>> OPTIONAL {
>>>>      ?s <q> 123 .
>>>>      ?s <v> ?x .
>>>>      FILTER(?x>56)
>>>> }
>>>>
>>>> i.e a compound OPTIONAL pattern?
>>>>
>>>> There seems to be no concept of a group pattern (do not confuse with
>>>> GROUP BY).
>>>>
>>>> (This applies all places group patterns occur, which is quite a few in
>>>> SPARQL)
>>>>
>>>>          Andy
>>>>
>>>>
>>>
>>>
>>> --
>>> I like: Like Like - The likeliest place on the web
>>> <http://like-like.xenei.com>
>>> LinkedIn: http://www.linkedin.com/in/claudewarren
>>>
>>>
>>
>>
>>
>


-- 
I like: Like Like - The likeliest place on the web
<http://like-like.xenei.com>
LinkedIn: http://www.linkedin.com/in/claudewarren

Reply via email to