2016-01-23 39 views
0

我有一個使用Jena加載在Protege中設計的.owl本體的程序。我試圖用Pellet對它進行推理,如果我在運行時添加一些語句以便模型能夠檢查其一致性。例如,我有'方法','簽名'和'hasSignature'概念,其中hasSignature是一個對象屬性。我有以下的公理:在運行時檢查本體一致性

Method hasSignature exactly 1 Signature 

當我添加一些實例語句,以違反上述公理沒有不一致性報告。這是我的代碼:

List<Statement> statements = new ArrayList<>(); 

OntModel model = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM_RULE_INF); 
FileManager.get().readModel(model, "Ontologies\\Ontology.owl"); 

OntClass Method = model.createClass(ns + "Method"); 
Individual method1 = Method.createIndividual(ns + "method1"); 

OntClass Signature = model.createClass(ns + "Signature"); 
Individual sign1 = Signature.createIndividual(ns + "sign1"); 
Individual sign2 = Signature.createIndividual(ns + "sign2"); 

Property hasSignature = model.createObjectProperty(ns + "hasSignature"); 

Statement st = model.createStatement(method1, hasSignature, sign1); 
statements.add(st); 

Statement st1 = model.createStatement(method1, hasSignature, sign2); 
statements.add(st1); 

Reasoner reasoner = PelletReasonerFactory.theInstance().create(); 
InfModel inf = ModelFactory.createInfModel(reasoner, model.add(statements)); 
System.out.println(inf.validate().isValid()); 

怎麼了?爲什麼它不起作用?

回答

1

您還沒有聲明sign1sign2彼此不同。因此,由於兩個人可能彼此成爲sameAs,所以推理人員已經確定這是唯一不會發生衝突的情況。因此本體是一致的。

+0

我的問題解決了。非常有幫助,非常感謝。 – Kourosh