Inference API被用來對本體論中的知識進行推理
假設我們今天的本體論長成這樣
主要分為動物和植物兩大類別,動物又分成肉食動物與草食動物
已知老虎是肉食動物的其中一種、牛是草食動物的其中一種、草是植物的其中一種
而且牛會吃草
我們知道身為肉食動物的老虎會狩獵草食動物,但是本體論中沒有描述,那我們要如何去推斷出來呢?
這就是我們以下將探討的部分
將你本體論的檔案匯入程式中
OntModel model = ModelFactory.createOntologyModel();
InputStream in = FileManager.get().open("your ontology file path");
if (in == null) {
throw new IllegalArgumentException("File: not found");
}
model.read(in, null);
建立一個格式為.rules的檔案,如inference.rules
接下來我們將「肉食動物會狩獵草食動物」進行規則的創建
在推理規則檔案中加入以下的內容
# prefix請設定為你自己的namespace與本體論
@prefix NS: <http://www.example.com/your_ontology.owl#>.
@include <RDFS>.
#如果某h為草食動物的一種,而且某c為肉食動物的一種,那某c就會狩獵某h
[rule1: (?h rdf:type NS:herbivore)(?c rdf:type NS:carnivore) -> (?c NS:hunt ?h)]
接下來jena將延伸一出一個新的Inference Model,裡面包括了導入推理規則後所獲得的結果
List<Rule> rules = Rule.rulesFromURL("your rule file path");
Reasoner reasoner = new GenericRuleReasoner(rules);
reasoner.setDerivationLogging(true);
InfModel inf = ModelFactory.createInfModel(reasoner, model);
現在的本體論變成這樣子了