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
