我有一个充满语句的 Jena 模型,并使用GenericRuleReasoner
如下自定义规则字符串(示例直接取自Jena 教程页面)
String rules = "[rule1: (?a eg:p ?b) (?b eg:p ?c) -> (?a eg:p ?c)]";
Reasoner reasoner = new GenericRuleReasoner(Rule.parseRules(rules));
reasoner.setDerivationLogging(true);
InfModel inf = ModelFactory.createInfModel(reasoner, model);
根据我对 Jena 推理器的理解,新的推理模型inf
将包含model
规则生成的语句以及新推断的语句。inf
两者中的陈述实例是model
共享的还是不同的?如果不同,这不会太浪费内存吗?
我遇到的一个问题是将推断的语句重用到model
. 遍历inf
模型以查找新推断的语句并将它们添加到model
似乎是一种幼稚的方法。还有其他更明智的方法吗?
最后,我想知道从model
. 我所说的过时陈述的意思可能最好用一个例子来解释。假设在model
. 稍后,当插入一个新的语句,例如 (Speaker hasSoundLevel 80) 时,它应该从model
. 这可以通过使用规则来实现吗?如果语句在插入后的一定时间后需要过时怎么办?任何有关如何实现这一目标的建议将不胜感激。
谢谢,