Как я могу получить для каждого класса в моей онтологии O все (выведенные) экзистенциальные ограничения?
Мой текущий подход заключается в переборе всех пар классов и свойств объекта и проверке соблюдения ограничения:
- for each subclass (C, D) in Classes(O) × Classes(O):
- for each property P defined in Object properties(O):
- if C and P some D is satisfiable:
- yield (C, P, D)
Это довольно медленно, так как я работаю с онтологией вакцин, которая имеет 4557 классов и 107 свойства объекта. Даже если это одноразовое вычисление, я могу чему-то научиться, увидев лучшие подходы.
Использование OWLKnowledgeExplorerReasoner
из JFact, как предложено здесь, не сработало, потому что произошел сбой при получении меток соседей (см. мой тестовый пример)
Можете ли вы предложить какое-либо улучшенное решение с использованием OWLAPI, Protégé или любого другого инструмента? Кроме того, было бы неплохо получать только самые конкретные классы-заполнители.
Спасибо!