Запросы анонимных классов в OWL API с манчестерским синтаксисом

Я использую 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? Заранее благодарим за ответ.


person user1823541    schedule 06.05.2013    source источник
comment
DLQueryExample должен обрабатывать анонимные выражения класса как входные (как в Protege). Не могли бы вы уточнить точное выражение, которое вы использовали, а также включить фрагмент или ссылку на используемую онтологию?   -  person loopasam    schedule 07.05.2013
comment
@loopasam, спасибо за ответ. Я пробовал образец пиццы: co-ode.org/ontologies/pizza/pizza .owl. Запрос прост: Пицца и (hasTopping some CheeseTopping), результат: Загруженная онтология: OntologyID (OntologyIRI (‹co-ode.org/ontologies/pizza pizza.owl›)) Введите выражение класса в манчестерском синтаксисе и нажмите Enter (или нажмите x для выхода): Pizza и (hasTopping some CheeseTopping) QUERY : Pizza и (hasTopping some CheeseTopping) суперклассы [NONE] Эквивалентные классы [NONE] Подклассы [NONE] Экземпляры [NONE]   -  person user1823541    schedule 23.05.2013
comment
Ссылка на проблемный пример запроса DL теперь выглядит следующим образом: github.com/owlcs/owlapi/blob/version3/contract/src/test/java/   -  person FBB    schedule 04.02.2016


Ответы (1)


Предполагая, что вы используете класс DLQueryExample как таковой без изменений.

Вам нужно использовать другой аргумент, чем тот, который используется по умолчанию. Посмотрите на строку 151, реализация использует структурный аргумент, встроенный в OWL-API. Этот аргумент ограничен и не способен обрабатывать сложные выражения классов, как ваш.

Как это исправить:

Используйте более продвинутый аргумент, например Hermit. Загрузите и поместите банку в свой путь к классам, затем замените код в строке 151 на это:

OWLReasonerFactory reasonerFactory = new Reasoner.ReasonerFactory();

Вам нужно будет импортировать пакет org.semanticweb.HermiT.Reasoner. Теперь вы будете использовать Hermit для обработки ваших запросов. Попробуйте Pizza and (hasTopping some CheeseTopping), должно работать!

person loopasam    schedule 23.05.2013
comment
OWL API теперь предоставляет документацию по этой проблеме: github. com / owlcs / owlapi / wiki / DL-Queries-with-a-real-reasoner - person FBB; 04.02.2016