2016-01-23 5 views
0

У меня есть программа, которая использует Jena для загрузки Ontology .owl, разработанной в Protege. Я пытаюсь сделать это с использованием 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

Вы не указали sign1 и sign2, чтобы отличаться друг от друга. Таким образом, поскольку два человека могут быть sameAs друг другу, рассудитель определил, что это единственный случай, не поднимающий столкновение. Поэтому онтология является последовательной.

+0

Моя проблема решена. Так полезно, спасибо большое. – Kourosh

Смежные вопросы