Я использую OWL API для размышлений над онтологией, созданной в Protege. Я имею дело с запросом DL с примером API OWL: http://sourceforge.net/p/owlapi/code/ci/aef6981535f07a2d0d44c394b9f4d5415f36025a/tree/contract/src/test/java/org/coode/owlapi/examples/DLQueryExample.java. Я предполагаю, что этот пример обеспечивает функциональность, эквивалентную вкладке DL Query в Protege. Но на самом деле есть некоторые существенные различия: мне нужно получить информацию (подкласс, суперкласс и т. Д.) Анонимного класса, который определяется набором лиц (например, {Member1, Member2 ...}) или другим способ. В Protege этот запрос возвращает правильный результат, но такой запрос в примере запроса OWL API Dl возвращает [НИЧЕГО]. Есть ли способ управлять анонимными классами в OWL API? Заранее благодарим за ответ.
Запросы анонимных классов в OWL API с манчестерским синтаксисом
Ответы (1)
Предполагая, что вы используете класс DLQueryExample
как таковой без изменений.
Вам нужно использовать другой аргумент, чем тот, который используется по умолчанию. Посмотрите на строку 151, реализация использует структурный аргумент, встроенный в OWL-API. Этот аргумент ограничен и не способен обрабатывать сложные выражения классов, как ваш.
Как это исправить:
Используйте более продвинутый аргумент, например Hermit. Загрузите и поместите банку в свой путь к классам, затем замените код в строке 151 на это:
OWLReasonerFactory reasonerFactory = new Reasoner.ReasonerFactory();
Вам нужно будет импортировать пакет org.semanticweb.HermiT.Reasoner
. Теперь вы будете использовать Hermit для обработки ваших запросов. Попробуйте Pizza and (hasTopping some CheeseTopping)
, должно работать!
DLQueryExample
должен обрабатывать анонимные выражения класса как входные (как в Protege). Не могли бы вы уточнить точное выражение, которое вы использовали, а также включить фрагмент или ссылку на используемую онтологию? - person loopasam   schedule 07.05.2013