Проверка согласованности и выполнимости онтологии с помощью OWL API 4

Я пытаюсь проверить онтологию на ее непротиворечивость. Онтология включает только описания индивидов, классы и семантические правила описываются импортированной онтологией.

Я думаю, что использование метода isConsistenct будет правильным выбором.

OWLReasonerFactory reasonerFactory = new StructuralReasonerFactory();
OWLReasoner reasoner =     reasonerFactory.createNonBufferingReasoner(mergedOntology);
    if(reasoner.isConsistent()){
        return "Merged ontology PASSED the consistency test";
    }else{
        return "Ontology FAILED the consistency test";
    } 

Каким будет правильный подход к проверке непротиворечивости онтологии, как Protege 5 применяется при запуске рассуждающего?


Обновление кода с помощью Pellet

        OWLReasonerFactory reasonerFactory = new PelletReasonerFactory();
        OWLReasoner reasoner = reasonerFactory.createNonBufferingReasoner(mergedOntology);
        String answer = "";
        if(reasoner.isConsistent()){
            if(reasoner.getUnsatisfiableClasses().getEntitiesMinusBottom().size()>0){
                answer = "Merged ontology FAILED satisfiability test. Unsatisfiable classes detected: " + reasoner.getUnsatisfiableClasses().getEntitiesMinusBottom().size();
            }
            answer = "Merged ontology PASSED the consistency test";
        }else{
            answer = "Merged ontology FAILED the consistency test, please review the Axioms or debug using Protege";
            //FYI an example how to implement a working debugger can be found on sourceforge's OWL API page under Debugger 
        }
        reasoner.dispose();
        return answer;

person Corpswalker    schedule 17.06.2015    source источник
comment
В чем именно заключается вопрос? Вы можете рассчитать несоответствие этим методом. Если вы хотите получить неудовлетворительные классы, вам нужно использовать другой метод.   -  person Artemis    schedule 17.06.2015


Ответы (2)


Подход правильный, но использование StructuralReasonerFactory является проблемой. Этот рассуждающий не делает реальных рассуждений, он просто использует утвержденные аксиомы, чтобы ответить на некоторые основные вопросы. Он не может проверить согласованность.

Для проверки непротиворечивости вам нужно использовать настоящий аргументатор. Некоторые аргументы уже поддерживают OWLAPI 4, см. https://github.com/owlcs/owlapi/wiki < / а>

person Ignazio    schedule 18.06.2015
comment
Спасибо, попробовал использовать Pellet в качестве аргументации. Несогласованные онтологии обнаруживаются сейчас, но я не уверен, нужно ли мне проверять каждый класс на его выполнимость, чтобы быть уверенным в надежности онтологии. - person Corpswalker; 21.06.2015
comment
Некоторые классы могут быть неудовлетворительными по замыслу, хотя это не обычное явление. Их присутствие не делает онтологию несостоятельной, хотя может вызвать вопросы. Правильно ли это, зависит от конкретной онтологии. - person Ignazio; 22.06.2015
comment
Является ли использование метода reasoner.getUnsatisfiableClasses (). GetEntitiesMinusBottom () правильным подходом для проверки наличия каких-либо неудовлетворенности? - person Corpswalker; 22.06.2015
comment
Да, это правильно. getEntitiesMinusBottom - это удобство, поэтому вы можете просто проверить, пусто ли оно, чтобы увидеть, существуют ли какие-либо неудовлетворительные классы. - person Ignazio; 22.06.2015

Protege также использует какой-то метод isConsistent. В зависимости от того, о какой версии вы имеете в виду, этот метод либо встроен разработчиками, либо использует метод, разработанный в OWL API. Например, посмотрите this. Однако, когда вы запускаете средство рассуждений в Protege, оба метода inConsistent и isSatisfiable запускаются. Итак, вы видите результат двух действий. Прочтите следующую запись в блоге, чтобы понять разницу, если вам нужно. Суть такова:

Итак, в то время как у нас могут быть неудовлетворительные классы в согласованной онтологии, все классы в несовместимой онтологии являются неудовлетворительными, потому что несовместимая онтология просто не имеет модели, и, следовательно, у нее не может быть модели с экземплярами любого данного класса.

Если вы хотите найти неудовлетворительные классы, вам просто нужно вызвать метод isSatisfiable для всех классов:

reasoner.isSatisfiable(className);
person Artemis    schedule 17.06.2015
comment
Есть ли необходимость в вызове метода isSatisfiable, если рассуждающий не обнаруживает несоответствия? - person Corpswalker; 21.06.2015
comment
Да, есть необходимость. Как упоминалось выше, онтология может быть непротиворечивой, но иметь неудовлетворительные классы. Обычно, когда вы работаете с A-Box, более вероятно возникновение несоответствия, а когда вы работаете с T-Box, возникнет неудовлетворенность. - person Artemis; 22.06.2015
comment
Спасибо за Ваш ответ. Проверяемые онтологии относятся только к типу A-Box. Просто люди. - person Corpswalker; 22.06.2015