Then I think I better start writing some code. Thanks Steve and Andy, your
inputs are really helpful!


On Thu, Sep 8, 2022 at 4:36 PM Andy Seaborne <[email protected]> wrote:

>
>
> On 08/09/2022 09:54, Rushikesh Halle wrote:
> > Hello community,
> >
> > How to check equivalence of two sparql queries ?
> > We have tried the QueryCompare.equals(), Op.equalTo() methods. But they
> > seem to be sensitive to the order of operands in joins, unions.
>
> The contract on QueryCompare is "same syntax".
>
> > *Example: *The following queries are equivalent, because irrespective of
> > the order of operands to the UNION operator, the query should give the
> same
> > solution set. But, the QueryCompare.equals(query1, query2) operation
> > returns 'false'.
>
> There's isn't anything for such semantic equivalence, including the
> simple cases of BGP order.
>
> >
> > *query1:*
> >
> > PREFIX dc10:  <http://purl.org/dc/elements/1.0/>
> > PREFIX dc11:  <http://purl.org/dc/elements/1.1/>
> >
> > SELECT ?title WHERE  {
> >      { ?book dc10:title  ?title }
> >      UNION
> >      { ?book dc11:title  ?title }
> > }
> >
> > *query2:*
> >
> > PREFIX dc10:  <http://purl.org/dc/elements/1.0/>
> > PREFIX dc11:  <http://purl.org/dc/elements/1.1/>
> >
> > SELECT ?title WHERE  {
> >      { ?book dc11:title  ?title }
> >      UNION
> >      { ?book dc10:title  ?title }
> > }
> >
> >
> > *Use Case:* Currently we are writing our own query transformer for
> > domain specific optimisation. We want to check the equivalence of queries
> > for Unit testing. The test should pass if the expected and actual queries
> > are equivalent.
>
> For optimization, ARQ's query tranform mechinary works on the query
> algebra, not the surface syntax. While there is some for syntax rewrite,
> most is with the org.apache.jena.sparql.algebra.Transform interface, not
> ElementTransform.
>
> There is OpAsQuery which converts an algebra expression into query syntax.
>
> > Is there any existing way of checking query equivalence?
>
> Only by writing some code. You write something that check equivalence of
> known cases (BGP order, UNION)
>
>      Andy
>
> > Thanks in advance,
> > Rushikesh
>
>

Reply via email to