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