Проблемы при попытке выполнить запросы SQWRL в большой онтологии

Моя ситуация следующая:

Я создал базовую онтологию, используя некоторые онтологии CCO и добавив определенные классы и свойства для домена приложения (назовем его базовой онтологией).

Я заполнил эту онтологию, создав экземпляры и их свойства из базы данных csv, используя Java и OWLAPI (назовем это полной онтологией).

При использовании SWRL API для выполнения запросов SQWRL к онтологии это вызывает ошибку Java из-за нехватки памяти. Я попытался решить эту проблему, увеличив доступную для процесса память с помощью параметра Xmx. Этого недостаточно, и я достиг предела возможностей моего скромного компьютера.

Если я попытаюсь сделать запрос в базовой онтологии (перед созданием всех индивидов базы данных), он будет работать без каких-либо проблем.

Та же проблема обнаруживается, если я пытаюсь запустить запросы из Protégé, он работает для базовой онтологии и блокирует программу, если используется полная онтология.

При использовании аргументов Protégé для обработки онтологии ошибок в онтологиях не обнаружено. И HermiT, и Pellet запускают базовую онтологию за несколько секунд. Но что касается полной онтологии, Pellet также работает очень быстро (выполняется за несколько секунд), а HermiT требуется около 15 минут для обработки онтологии.

Это странно, потому что размер базовой онтологии и заполненной онтологии на самом деле не слишком различается (9000 аксиом против 14000 аксиом приблизительно), даже если количество созданных индивидов составляет около 2500.

Запрос, который я использую для проверки: abox:caa(ClassName,? I) -> sqwrl:select(? I)

Я уверен, что SWRL API распознает команду, потому что, если я введу неправильное ClassName (класс, который не существует в онтологии), программа остановится с ошибкой неправильной команды. Но если команда верна, тогда возникает проблема, не имеющая аналогов.

Исключение в потоке "main" java.lang.OutOfMemoryError: пространство кучи Java в org.drools.core.reteoo.NotNode.createLeftTuple(NotNode.java:121) в org.drools.core.phreak.PhreakJoinNode.insertChildNeft.jpg :480) на org.drools.core.phreak.PhreakJoinNode.doLeftInserts(PhreakJoinNode.java:110) на org.drools.core.phreak.PhreakJoinNode.doNode(PhreakJoinNode.java:71) на org.drools. RuleNetworkEvaluator.switchOnDoBetaNode(RuleNetworkEvaluator.java:552) по адресу org.drools.core.phreak.RuleNetworkEvaluator.evalBetaNode(RuleNetworkEvaluator.java:538) по адресу org.drools.core.phrevaluator.java:538) по адресу org.drools.core.phrevaljava.valu. .drools.core.phreak.RuleNetworkEvaluator.innerEval (RuleNetworkEvaluator.java:333) на org.drools.core.phreak.RuleNetworkEvaluator.doRiaNode (RuleNetworkEvaluator.java:606) на org.drools.core.phreak.RuleNetworkEvaluator.evalBetaNode (RuleNetworkEvaluator.java:533) на org.drools.core.phreak.RuleNetworkEvaluator.evalNode (RuleNetworkEvaluator.java:373) на org.drools.core.phreak.Rule.Network по адресу org.drools.core.phreak.RuleNetworkEvaluator.outerEval(RuleNetworkEvaluator.java:169) по адресу org.drools.core.phreak.RuleNetworkEvaluator.evaluateNetwork(RuleNetworkEvaluator.javaleExevaluator.javaleExevaluator.javaleExplorer.Core.Core.php) (RuleExecutor.java:212) по адресу org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:87) по адресу org.drools.core.concurrent.AbstractRuleEvaluator.internalEvaluateAndFirevaluator: org.drools.internalEvaluateAndFireval.d (AbstractRuleEvaluator.internalEvaluateAndFirevaluator). core.concurrent.SequentialRuleEvaluator.evaluateAndFire(SequentialRuleEvaluator.java:43) на org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:1072) в org.drools.core.common.DefaultAgenda.internalFireAllRules(DefaultAgenda.java:1019) в org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1011) в org.drools .core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1321) в org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules (StatefulKnowledgeSessionImpl.fireAllRules (StatefulKnowledgeSessionImpl.java:1312) в org.drools.java:1312). : 1304) при org.swrlapi.drools.core.DroolsSWRLRuleEngine.runRuleEngine(DroolsSWRLRuleEngine.java:211) в org.swrlapi.factory.DefaultSWRLRuleAndQueryEngine.run(DefaultSWRLRuleAndQueryEngine.java:90) в org.swrlapi.factory.DefaultSWRLRuleAndQueryEngine.runSQWRLQuery(DefaultSWRLRuleAndQueryEngine.java:118) в org.swrlapi.factory.DefaultSWRLRuleAndQueryEngine.runSQWRLQuery(DefaultSWRLRuleAndQueryEngine.java:156) по адресу pred_maint.OntologyDataBase.main(OntologyDataBase.java:362)

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

Спасибо.

0 ответов

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