У меня есть модель Jena, заполненная операторами, и я использую GenericRuleReasoner
с настраиваемыми строками правил, как показано ниже (пример непосредственно взят из учебная страница Йены)
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);
Насколько я понимаю рассуждение Йены, новая модель вывода inf
будет содержать утверждения из model
, а также новые выведенные утверждения, сгенерированные правилами. Являются ли экземпляры операторов в inf
и model
общими или разными? Если по-другому, не будет ли это тратить слишком много памяти?
Проблема, с которой я сталкиваюсь, заключается в повторном использовании выведенных операторов в model
. Перебор модели inf
для поиска новых выведенных утверждений и добавления их к model
кажется наивным подходом. Есть ли другой более разумный метод?
Наконец, мне интересно, как лучше всего удалить устаревшее утверждение из model
. То, что я имею в виду под устаревшим утверждением, вероятно, лучше всего объяснить на примере. Скажем, есть утверждение (Speaker hasSoundLevel 50) в файле model
. Позже, когда будет вставлено новое утверждение, такое как (Speaker hasSoundLevel 80), оно должно аннулировать (т. е. удалить) (Speaker hasSoundLevel 50) из файла model
. Можно ли этого добиться с помощью правила? Что делать, если оператор должен быть устаревшим через определенное время после его вставки? Любые предложения о том, как этого добиться, будут оценены.
Спасибо,