Hashim

I think what you want is probably --optimize=off and that should yield you the 
expected two BGPs e.g.


arq --optimize=off --query exampleQuery.sparql --explain


09:43:57 INFO  exec            :: ALGEBRA

  (slice _ 100

    (distinct

      (project (?name ?birth ?death)

        (filter (< ?birth "1900-01-01")

          (leftjoin

            (bgp

              (triple ?person http://dbpedia.org/ontology/birthPlace 
http://dbpedia.org/resource/Berlin)

              (triple ?person http://dbpedia.org/ontology/birthDate ?birth)

              (triple ?person http://xmlns.com/foaf/0.1/name ?name)

            )

            (bgp (triple ?person http://dbpedia.org/ontology/deathDate 
?death)))))))



As James noted query engines are free to apply optimisations to the raw algebra 
of the query provided that those optimisations preserve the semantics of the 
query.  Jena’s ARQ query engine contains many of these that have been developed 
over many years based on implementation experience, academic papers, applying 
well known query optimisation techniques etc.



Note that turning optimisations off (whatever engine you are using) is rarely a 
good idea.

You may want to experiment with the qparse command whose --print option allows 
you to ask to see various forms of the query from the perspective of Jena’a ARQ 
engine.  For example, the following shows the raw algebra and the optimised 
algebra in the same output.

qparse --query exampleQuery.sparql --print=op --print=optquad



(prefix ((dbo: http://dbpedia.org/ontology/)

         (dbr: http://dbpedia.org/resource/)

         (foaf: http://xmlns.com/foaf/0.1/))

  (slice _ 100

    (distinct

      (project (?name ?birth ?death)

        (filter (< ?birth "1900-01-01")

          (leftjoin

            (bgp

              (triple ?person dbo:birthPlace dbr:Berlin)

              (triple ?person dbo:birthDate ?birth)

              (triple ?person foaf:name ?name)

            )

            (bgp (triple ?person dbo:deathDate ?death))))))))

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

(prefix ((dbo: http://dbpedia.org/ontology/)

         (dbr: http://dbpedia.org/resource/)

         (foaf: http://xmlns.com/foaf/0.1/))

  (slice _ 100

    (distinct

      (project (?name ?birth ?death)

        (conditional

          (sequence

            (filter (< ?birth "1900-01-01")

              (quadpattern

                (quad <urn:x-arq:DefaultGraphNode> ?person dbo:birthPlace 
dbr:Berlin)

                (quad <urn:x-arq:DefaultGraphNode> ?person dbo:birthDate ?birth)

              ))

            (quadpattern (quad <urn:x-arq:DefaultGraphNode> ?person foaf:name 
?name)))

          (quadpattern (quad <urn:x-arq:DefaultGraphNode> ?person dbo:deathDate 
?death)))))))



Hope this helps,



Rob

From: James Anderson <[email protected]>
Date: Wednesday, 20 September 2023 at 22:06
To: Hashim Khan <[email protected]>
Cc: [email protected] <[email protected]>
Subject: Re: Query features info
good evening;

if you want to reproduce those results, you will have to examine the parsed 
syntax tree.
that should comprise just two bgps, as that is the immediate syntax.
if, on the other hand, you examaine the results of a query planner, you are not 
looking at a systax tree, you are looking at the query processor's prospective 
exection plan.
execution model permits the transformations to which i alluded.
you will more likely get your desired representation by having jena emit an 
sse, rather than an execution plan.

best regards, from berlin,

> On 20. Sep 2023, at 17:48, Hashim Khan <[email protected]> wrote:
>
> Thanks for the quick reply.
>
> To be precise, I want to clarify the table on page 7 of the attached paper. 
> Here, the No. of BGPs is 2, and also some more values. I want to extract all 
> the info using Jena. But I could not till now. About the LSQ, I will check 
> it, but I am following this paper and want to reproduce the results.
>
> Best Regards,
> Hashim
>
> On Tue, Sep 19, 2023 at 4:18 PM James Anderson 
> <[email protected]> wrote:
> good afternoon;
>
> you have to consider that a query processor is free to consolidate statement 
> patterns in a nominal bgp - which itself implicitly joins them, or separate 
> them in order to either apply a different join strategy or - as in this case, 
> to interleave an operation under the suspicion that it will reduce solution 
> set cardinality.
>
> best regards, from berlin,
>
> > On 19. Sep 2023, at 13:20, Hashim Khan <[email protected]> wrote:
> >
> > Hi,
> >
> > Having a look on this SPARQL query:
> > ---------------------------------------------------------------------------
> > prefix dbo:<http://dbpedia.org/ontology/>
> > prefix dbr:<http://dbpedia.org/resource/>
> > prefix foaf:<http://xmlns.com/foaf/0.1/>
> >
> > SELECT DISTINCT ?name ?birth ?death
> > WHERE { ?person dbo:birthPlace  dbr:Berlin .
> >        ?person dbo:birthDate ?birth .
> >        ?person foaf:name ?name .
> > OPTIONAL { ?person dbo:deathDate ?death . }
> > FILTER (?birth < "1900-01-01") .
> > }
> > LIMIT 100
> > -----------------------------------------------------------------------------
> > Using Apache Jena ARQ command, ./arq --query exampleQuery.sparql --explain
> > I got this result.
> >
> > 13:11:41 INFO  exec            :: ALGEBRA
> >  (slice _ 100
> >    (distinct
> >      (project (?name ?birth ?death)
> >        (conditional
> >          (sequence
> >            (filter (< ?birth "1900-01-01")
> >              (bgp
> >                (triple ?person <http://dbpedia.org/ontology/birthPlace> <
> > http://dbpedia.org/resource/Berlin>)<http://dbpedia.org/resource/Berlin%3e)>
> >                (triple ?person <http://dbpedia.org/ontology/birthDate>
> > ?birth)
> >              ))
> >            (bgp (triple ?person <http://xmlns.com/foaf/0.1/name> ?name)))
> >          (bgp (triple ?person <http://dbpedia.org/ontology/deathDate>
> > ?death))))))
> > 13:11:41 INFO  exec            :: BGP
> >  ?person <http://dbpedia.org/ontology/birthPlace> <
> > http://dbpedia.org/resource/Berlin><http://dbpedia.org/resource/Berlin%3e>
> >  ?person <http://dbpedia.org/ontology/birthDate> ?birth
> > 13:11:41 INFO  exec            :: Reorder/generic
> >  ?person <http://dbpedia.org/ontology/birthPlace> <
> > http://dbpedia.org/resource/Berlin><http://dbpedia.org/resource/Berlin%3e>
> >  ?person <http://dbpedia.org/ontology/birthDate> ?birth
> > 13:11:41 INFO  exec            :: BGP ::   ?person <
> > http://xmlns.com/foaf/0.1/name><http://xmlns.com/foaf/0.1/name%3e> ?name
> > ------------------------
> > | name | birth | death |
> > ========================
> > ------------------------ I have a question about the Basic Graph Patterns.
> > I think, in this query there are two BGPs. But here i shows 3. Can anyone
> > explain it to me? Also, I want to know, the number of joins, no of
> > projection variables, number of left joins, depth, and such other relevant
> > info about the query features. How can I get all at one place?
> >
> > Best Regards,
> >
> >
> > *Hashim Khan*
>
> ---
> james anderson | [email protected] | https://dydra.com
>
>
>
>
> --
> Hashim Khan
>
> <swj3336.pdf>

---
james anderson | [email protected] | https://dydra.com

Reply via email to