Проверка непротиворечивости онтологии во время выполнения

У меня есть программа, которая использует Jena для загрузки онтологии .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());

Что не так? Почему это не работает?


person Kourosh    schedule 23.01.2016    source источник


Ответы (1)


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

person Ignazio    schedule 23.01.2016