On 16/01/18 09: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.
If I understand what you want then use the backward rather than forward
engine.
The GenericRuleReasoner contains two engines which can be used
separately or in a cascade (hybrid mode). For configuring this see
PROPruleMode in
https://jena.apache.org/documentation/inference/#RULEconfiguration
The backward reasoner is driven by goals at the level of triple patterns
and isn't aware of the overall sparql query so the goals are not very
selective but it will at least help with point #1.
In terms of point #2 then the backward engine, by default, will not
retain any answers. You can use the tabling declarations to cause it to
selectively remember the answer to specific (sub)goals if you need to see:
https://jena.apache.org/documentation/inference/#RULEbackward
Note that in hybrid mode (the default) you can still use backward rules
by writing them with the arrow reversed. The advantage of switching the
reasoner mode is that you can use the same rule source syntax and run
the rules in either forward or backward mode to test the difference.
Dave