Ошибка API SWRL: нет зарегистрированных механизмов правил SWRL

Я строю проект Maven с API OWL и SWRL. Я хочу получить все правила, хранящиеся в файле.owl, используя код ниже:

import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.model.OWLOntology;
import org.semanticweb.owlapi.model.OWLOntologyCreationException;
import org.semanticweb.owlapi.model.OWLOntologyManager;
import org.swrlapi.core.SWRLAPIRule;
import org.swrlapi.core.SWRLRuleEngine;
import org.swrlapi.factory.SWRLAPIFactory;

import java.io.*;
import java.util.Set;

public class ManagingRules {

    public static void main(String[] args) throws OWLOntologyCreationException {

        OWLOntologyManager m = OWLManager.createOWLOntologyManager();
        OWLOntology ontology = m.loadOntologyFromOntologyDocument(new File("pwidasFinale.owl"));

        //taking SWRLs list
        SWRLRuleEngine ruleEngine = SWRLAPIFactory.createSWRLRuleEngine(ontology);

        // Get SWRL rules  
        Set<SWRLAPIRule> sets = ruleEngine.getSWRLRules();

        for(SWRLAPIRule item : sets){
            System.out.println(item.toString());
        }   
    }
}

Там нет ошибки компиляции. Но когда я запускаю этот класс, я получил это уведомление

Exception in thread "main" org.swrlapi.exceptions.NoRegisteredSWRLRuleEnginesException: no registered SWRL rule engines
    at org.swrlapi.factory.DefaultSWRLRuleAndQueryEngineFactory.createSWRLRuleEngine(DefaultSWRLRuleAndQueryEngineFactory.java:47)
    at org.swrlapi.factory.SWRLAPIFactory.createSWRLRuleEngine(SWRLAPIFactory.java:39)
    at ManagingRules.main(ManagingRules.java:20)

Фактически в файле.owl хранится 15 правил.

Пожалуйста, покажите мне, где это исправить.

Я искал удобный учебник или FAQ по SWRL API, включая этот. Но, похоже, это не очень помогает.

PS мои навыки кодирования плохие

1 ответ

Решение

Проблема не во входном файле, а в том, что нет доступных зарегистрированных механизмов правил SWRL. Скорее всего, эта настройка выполняется в Protege до использования SWRLAPIFactory.

Это требование описано здесь: https://github.com/protegeproject/swrlapi/

If you'd like to be able to execute SWRL rules or SQWRL queries you will need a SWRLAPI-based rule engine implementation. Currently, a Drools-based SWRL rule engine implementation is provided. This implementation is also hosted on Maven Central.

Я считаю, что вам нужно добавить зависимости, описанные на этой странице, в ваш проект.

Другие вопросы по тегам