I am currently still trying to figure out the solution. 1. If I do not call coreInfModel.prepare(), nothing happens during the triple update which is WAD, I believe. 2. When one triple is updated, all the rules which have true condition will be triggered, rather than the rules related. I am expecting the other rules will not be triggered unless its related triplets are updated. Is it possible?
L B <[email protected]> 于2023年3月24日周五 16:10写道: > > 1) Init code: > > GenericRuleReasoner reasoner = new GenericRuleReasoner(new > ArrayList<Rule>()); > reasoner.setMode(GenericRuleReasoner.FORWARD); > mCoreInfModel = ModelFactory.createInfModel(reasoner, > mCoreModel); > > 2) Statement exits > (:A :B :C) > > 3) Rule exists and triggered before > > [ alwaysTrue: > (:A :B :C) > -> triggerAction > ] > > 4) Now, I am trying to add rules at runtime. > > [ rule2: > (:X :Y :Z) > -> triggerAction2 > ] > > InfModel infModel = getCoreInfModel(); > BasicForwardRuleInfGraph infGraph = (BasicForwardRuleInfGraph) > infModel.getGraph(); infGraph.addRule(rule) > coreInfModel.prepare() > > 5) add triple (:X :Y :Z) > > val infGraph = infModel.graph as BasicForwardRuleInfGraph > infGraph.add(triple) > > *The problem comes, both "alwaysTrue" and "rule2" triggered.* > > *I am expecting only "rule2" is triggered. * > > Is there anyway that only "rule2" can be triggered since the updated > triple is only X, Y Z? > > Many thanks > > >
