Just to confirm; using backward syntax for rules works as expected. However, it is still not clear if and if so, how, you can configure ruleMode=BACKWARD via an Assembler file in Fuseki.
Thanks for all the help. Barry -----Original Message----- From: Nouwt, B. (Barry) [mailto:[email protected]] Sent: vrijdag 19 januari 2018 13:21 To: [email protected] Subject: RE: GenericRuleReasoner with limited scope Hi Dave, You are right, I assumed unknown URIs would be ignored (but aren't [1]) and unknown values for URIs were not (which is true [2]). I'll try the backward syntax tip, thanks! Barry [1] https://github.com/apache/jena/blob/master/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/FBRuleReasoner.java#L346 [2] https://github.com/apache/jena/blob/master/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/GenericRuleReasoner.java#L306 -----Original Message----- From: Dave Reynolds [mailto:[email protected]] Sent: vrijdag 19 januari 2018 11:38 To: [email protected] Subject: Re: GenericRuleReasoner with limited scope Hi Barry, I don't understand the assembler syntax enough to directly help (no doubt others can) but given you didn't get any error messages when you had the wrong URI then not getting an error message from "bla" isn't definitive :) As mentioned your other alternative is to leave the reasoner in hybrid mode and write your rules in backward syntax. Dave On 19/01/18 09:49, Nouwt, B. (Barry) wrote: > Hi all, > > I fixed the error Dave found, but it does not seem to activate > 'backward' mode. I test it by providing a wrong value 'bla' instead of > 'backward' and check whether Fuseki fails to load the assembler. But, > unfortunately, it doesn't fail. > > Any other suggestions on how to enable 'backward' mode from an > assembler file? > > Regards, Barry > > Verzonden vanaf mijn Windows 10-telefoon > > *Van: *Dave Reynolds <mailto:[email protected]> > *Verzonden: *donderdag 18 januari 2018 09:40 > *Aan: *[email protected] <mailto:[email protected]> > *Onderwerp: *Re: GenericRuleReasoner with limited scope > > Hi Barry, > > I'm not sure of the assembler syntax but there's one error in your > example which might fix it: > > > @prefix rr: <http://jena.hpl.hp.com/2003/RuleReasoner> . > > That should be: > > @prefix rr: <http://jena.hpl.hp.com/2003/RuleReasoner#> . > > Dave > > On 17/01/18 15:12, Nouwt, B. (Barry) wrote: >> Hi Dave, thanks for the answer. >> >> I was not aware that the backward reasoner started at triple patterns >> (retrieved from the SPARQL query), so I will definitely test whether that >> indeed causes the rule to be applied once instead of twice in the example >> described in my second post. >> >> My setup uses Apache Jena Fuseki, so the PROPruleMode should be >> configured via a assembly TTL file. Do you know how to do that? I >> found the 'http://jena.hpl.hp.com/2003/RuleReasoner/ruleMode' >> property in the > ReasonerVocabulary.java file [1], but it does not seem to load this > property when I use the following assembly: >> >> @prefix rr: <http://jena.hpl.hp.com/2003/RuleReasoner> . >> . >> . >> . >> >> <#infGraph> rdf:type ja:InfModel ; >> ja:reasoner [ ja:rulesFrom >><file:src/test/resources/et.rules> ; >> rr:ruleMode "backward" ; ] ; >> ja:content <#test-inf> . >> >> >> Any pointers are welcome! >> >> Regards, Barry >> >> [1] >> https://github.com/apache/jena/blob/cc038809fb622779933831011909714e2 >> 2ef494c/jena-core/src/main/java/org/apache/jena/vocabulary/ReasonerVo >> cabulary.java#L77 >> >> -----Original Message----- >> From: Dave Reynolds [mailto:[email protected]] >> Sent: woensdag 17 januari 2018 09:33 >> To: [email protected] >> Subject: Re: GenericRuleReasoner with limited scope >> >> 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 >> 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. >> 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.
