Извлечь предполагаемый заполнитель свойства объекта в онтологии OWL
Как я могу получить для каждого класса в моей онтологии O всех (предполагаемых) экзистенциальных ограничений?
Мой текущий подход состоит в том, чтобы перебрать все пары классов и свойств объекта и проверить, выполняется ли ограничение:
- для каждого подкласса (C, D) в Classes (O) × Classes (O):
- для каждого свойства P, определенного в Свойствах объекта (O):
- если C и P, то некоторый D выполним:
- доходность (C, P, D)
Это довольно медленно, так как я работаю с онтологией вакцин, которая имеет 4557 классов и 107 свойств объекта. Даже если это однократное вычисление, я могу кое-чему научиться, увидев лучшие подходы.
С использованием OWLKnowledgeExplorerReasoner
из JFact, как предложено здесь, не работает, потому что он падал при получении меток соседей (см. мой тестовый пример)
Можете ли вы предложить какое-либо улучшенное решение с использованием OWLAPI, Protégé или любого другого инструмента? Кроме того, было бы неплохо получить только самые специфические классы-заполнители.
Спасибо!
1 ответ
Прежде всего, ваш чек неверен. Для пустой онтологии C and P some D
будет удовлетворительным, а это не то, что вы хотите. Вы должны проверить, C and not (P some D)
неудовлетворительно (в качестве альтернативы, вы можете просто проверить isSubsumedBy(C, P some D)
).
Вы можете улучшить время исследования, если вы используете некоторые методы, которые используются для классификации, например:
- если
C
это подклассP some D
то же самое относится и ко всем подклассамC
- если
C
не подклассP some D
тогда все супер-классыC
- Аналогичные правила для суб / суперклассов / свойств
P
а такжеD
- Вы можете дать имена всем
P some Thing
выражения. После классификации вы можете ограничить поискC
только подклассам этих понятий.
Это также помогает, если вы можете сузить проблему. Вы действительно должны проверить все пары и все свойства?
Использование OWLKnowledgeExplorerReasoner из JFact, как предложено здесь, не сработало, потому что он аварийно завершал работу при получении меток соседей (ситуация исключения недоступна!).
Не могли бы вы предоставить контрольный пример и полный стэк-трассировку проблемы, чтобы мы могли ее исправить? Вы пытались использовать то же самое с FaCT++?