никаких выводов с запросами DL в OWL - API

пытаюсь написать запрос

Больницы и значение hasNameWithWords "center"^^string

Этот запрос возвращает мне экземпляры, в которых есть больницы, в названии которых есть слово «центр» в Protege 4.2 с аргументом FACT++, а также с аргументом Hermit.

но когда я ввожу тот же запрос в пример запроса DL OWL-API, который доступен на веб-сайте http://sourceforge.net/p/owlapi/code/ci/aef6981535f07a2d0d44c394b9f4d5415f36025a/tree/contract/src/test/java/org/coode/owlapi/examples/DLQueryExample.java

Я не получаю никакого результата.

Но это дает мне результат, когда я пишу простые запросы, такие как

Больницы

Это потому, что рассуждающий в коде не может сделать вывод?

Какой другой резонатор был бы лучше?


person karthi    schedule 16.01.2013    source источник


Ответы (1)


Класс, который вы используете в качестве примера (DLQueryExample.java), опирается на встроенный в OWL-API структурный анализатор (OWLReasonerFactory reasonerFactory = new StructuralReasonerFactory();).

Этот тип рассуждения довольно прост и не подходит для таких сложных запросов, как ваш. Однако он может предоставить ответы по иерархии классов: вот почему вы получаете некоторые результаты с помощью простого запроса Hospitals.

Что вам нужно сделать, так это настроить свой код на использование Hermit или FACT++. Я привожу пример с Hermit:

  • Загрузите jar-файл HermiT и добавьте его в путь к классам вашего проекта.
  • В своем классе замените строку OWLReasonerFactory reasonerFactory = new StructuralReasonerFactory(); на: OWLReasonerFactory reasonerFactory = new Reasoner.ReasonerFactory();. Вы должны импортировать org.semanticweb.HermiT.Reasoner, чтобы заставить его работать.
  • Мы только что заменили распорядитель по умолчанию на HermiT. Остальной код должен остаться прежним, и теперь ваш запрос должен работать.
  • Вы можете попробовать FaCT++ и Pellet и сравнить скорость и т.д...
person loopasam    schedule 16.01.2013