Hi everyone, thanks for your answers.

@Lorenz Buehmann: I am currently only using SELECT SPARQL queries and no 
CONSTRUCT SPARQL queries. Also, I think the strategy for first executing the 
SPARQL query and use the output as input to the reasoner is not going to work 
if the SELECT SPARQL query selects inferred triples. However, the strategy 
where the SPARQL query is reduced in steps until it gives results and use these 
results as the starting point for a reasoner might be a valid strategy.

@ Martynas Jusevičius: I'm not directly interested in extending Apache Jena's 
rule engine to include SPARQL queries in the rules, but it is interesting from 
the perspective on how to extend Jena's rule engine.

Maybe an example helps explaining my use case. If I have the following (not 
that useful) data.ttl file:

@prefix tno: <http://tno.nl/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . 

tno:A rdf:type tno:Country . 
tno:A tno:hasProduction tno:B .
tno:B rdf:type tno:Production .
tno:B tno:productionOfCountry tno:A .

tno:C rdf:type tno:Country .
tno:C tno:hasProduction tno:D .
tno:D rdf:type tno:Production .
tno:D tno:productionOfCountry tno:C .

And a file et.rules with the following rule:

@prefix tno: <http://tno.nl/> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . 

[test: (?a rdf:type tno:Country) (?a tno:hasProduction ?b) -> (?a rdf:type 
tno:ProducingCountry) ]

And I execute the following SPARQL Query:

SELECT ?object
WHERE {
  tno:A a tno:ProducingCountry .
  tno:A tno:hasProduction ?object .
}

The GenericRuleReasoner first applies the rule above twice and derives two new 
triples:

tno:A  a tno:ProducingCountry
tno:C  a tno:ProducingCountry

And then executes the SPARQL Query above on the data.ttl data together with the 
two new triples above and gives the following result:

tno:B

Now what I would like the GenericRuleReasoner to do, is the following. After I 
execute the SPARQL Query above, the reasoner would 'see' that the SPARQL query 
is only interested in the subject tno:A and not in subject tno:C. So, instead 
of applying the rule twice to both tno:A and tno:C, it would only apply it to 
tno:A. Then there would only be a single inferred triple:

tno:A a tno:ProducingCountry

And the query result would again be:

tno:B

I hope this helps with understanding what I meant with my point 1 in my initial 
email. Any pointers on how to achieve this?

Regards, Barry

-----Original Message-----
From: Lorenz Buehmann [mailto:[email protected]] 
Sent: dinsdag 16 januari 2018 13:29
To: [email protected]
Subject: Re: GenericRuleReasoner with limited scope

Source code [1]

Jena version: 2.12.1-SNAPSHOT

[1] https://github.com/mbentoalves/jena/tree/trunk/jena-core


On 16.01.2018 12:56, Martynas Jusevičius wrote:
> There is also something like this:
> https://www.researchgate.net/publication/307934931_SPARQL_Commands_in_
> Jena_Rules
>
> On Tue, Jan 16, 2018 at 12:21 PM, Lorenz Buehmann < 
> [email protected]> wrote:
>
>>> I would like the GenericRuleReasoner to take the SPARQL query into
>> account when reasoning. So, only reason about those facts that 'seem'
>> relevant for answering the SPARQL query.
>> Wouldn't the logical way here to execute the SPARQL query (it has to 
>> be a CONSTRUCT query indeed) and use the model returned here as the 
>> input of the reasoner?
>>
>>
>> On 16.01.2018 10:55, Nouwt, B. (Barry) wrote:
>>> Hi everyone,
>>>
>>> Currently I'm using the GenericRuleReasoner of Apache Jena in my 
>>> project
>> to apply custom rules to my RDF data. This works as expected: as soon 
>> as I execute the first SPARQL query in Apache Jena Fuseki, the 
>> GenericRuleReasoner correctly determines all the derived triples and 
>> the query can be answered.
>>> Now I am looking for the following GenericRuleReasoner (or another
>> reasoner) behavior:
>>>   1.  I would like the GenericRuleReasoner to take the SPARQL query 
>>> into
>> account when reasoning. So, only reason about those facts that 'seem'
>> relevant for answering the SPARQL query.
>>>   2.  I would like the GenericRuleReasoner to remove the derived 
>>> triples
>> after the SPARQL query has been answered. So, the next time it 
>> receives the same SPARQL query, it will not be able to reuse the 
>> previous reasoning result.
>>> Note:
>>>
>>>   *   I am willing to accept some incomplete answers to get the
>> functionality described in 1.
>>>   *   In literature I found the term 'query answering' as one of the
>> things a reasoner can do, which looks like the behavior I describe in 
>> point
>> 1 above. It is also mentioned here: http://ontogenesis.
>> knowledgeblog.org/1486
>>> Does anyone know whether the behavior described above is possible 
>>> (does
>> Apache Jena allow the reasoner to use the SPARQL query as input at 
>> all) and whether there are rule engine implementations for Jena 
>> available that implement such behavior? Is it possible to configure 
>> Jena in such a way that it restarts the reasoner for every query it receives?
>>> Any other pointers that help me understand this reasoner related 
>>> subject
>> are welcome as well.
>>> Regards,
>>>
>>> Barry
>>> This message may contain information that is not intended for you. 
>>> If
>> you are not the addressee or if this message was sent to you by 
>> mistake, you are requested to inform the sender and delete the 
>> message. TNO accepts no liability for the content of this e-mail, for 
>> the manner in which you use it and for damage of any kind resulting 
>> from the risks inherent to the electronic transmission of messages.
>>

Reply via email to