Навигация
Главная
Поиск
Новости
Статьи
Ссылки
Об авторе
Контакты
FFQs
 
Главная arrow FFQs arrow SemanticWeb, Jena и другое семантическое arrow Необходимость машин вывода (Reasoners) для работы с OWL онтологиями)
Необходимость машин вывода (Reasoners) для работы с OWL онтологиями) Версия для печати Отправить на e-mail

При работе с Jena с OWL онтологиями иногда можно обнаружить проблемы с якобы "ошибочной" работой некоторых методов (listDomain, hasDomain, getDeclaredProperties и др.). Это связанно с тем, что онтологии создаются в различных приложениях, а посему, в результирующей онтологии, использующей в основе RDF, различные сущьности и связи могут быть представленны в виде, который Jena может неверно интерпретировать. Например, в одной онтологии верхние классы не являлись наследниками Thing, и поэтому метод возвращающий корневые классы ничего не возвращал. Поэтому, чтобы не иметь с высокой выразительностью RDF проблем необходимо использовать машины вывода - reasoner. Вот перевод док-ии к Jena из статьи http://www.semanticlinks.net/ (читай подчеркнутое, если лень все):


В дистрибутиве Jena2 имеется несколько встроенных машин вывода:

  • Transitive reasoner – Обеспечивает поддержку хранения и пересечения классов и свойств. Это реализация только свойств транзитивности и симметрии из rdfs:subPropertyOf и rdfs:subClassOf.
  • RDFS rule reasoner – Реализация с конфигурируемым подмножеством RDFS импликации.
  • OWL, OWL Mini, OWL Micro Reasoners – Набор полезной, но неполной реализации OWL/Lite подмножетсва языка OWL/Full.
  • DAML micro reasoner – Используется внутри, чтобы дать возможность наследовать DAML API и обеспечивать RDFS расширение процесса логического вывода, схожий с имеющемся в Jena1.
  • Generic rule reasoner – Норма, основывающаяся на машине вывода, чтобы поддерживать правила пользователя.

Как видно ни одна из имеющихся в Jena2 машин вывода не поддерживает полностью OWL DL. По этому поводу в документации по Jena сказано, что для полной поддержки вывода OWL DL нужно использовать внешние машины вывода, такие как Pellet [19], Racer [20] или FaCT [21]. Отметим, что использование Jena DIG интерфейса делает легким установку соединения с любой машиной вывода, поддерживающей DIG стандарт. Из существующих машин вывода рассмотрим: FaCT, RacerPro, Pellet.

  • Машина вывода FaCT (Fast Classification of Terminologies) – это разработка профессора Манчестерского университета Яна Хоррокса (Ian Horrocks). FaCT – бесплатная DL машина вывода (DL reasoner), первоначально реализованная на Common Lisp, в настоящее время имеет несколько реализаций, в первую очередь - реализация DIG интерфейса для этой машины вывода, называемый FaCT DIG servlet [21].
  • Машина вывода RacerPro – это разработка немецкой компании Racer Systems GmbH & Co. KG. RacerPro – семантическое промежуточное программное обеспечение для индустриальных проектов, базирующееся на стандартах W3C RDF/OWL. Программа RacerPro имеет несколько видов лицензий; на бессрочное пользование продуктом выдаются только коммерческие лицензии(поэтому в лес такие наработки).
  • Машина вывода Pellet – это разработка группы исследователей Semantic Web из лаборатории MIND LAB Мэрилендского университета. Pellet - open-source Java машина вывода OWL DL [19]. Эта машина вывода может совместно использоваться с API Jena и OWL API.

Подводя итог выше сказанному, выберем машину вывода OWL DL, исходя из наших потребностей. Машина вывода OWL DL должна быть бесплатной и иметь open-source коды на Java, реализовывать DIG интерфейс для совместимости с Jena. Будем использовать Pellet, скачиваем его (11 мб). Можно посмотреть HOW-TO. В нем сказано что лучше использовать Пеллет напрямую, в обход DIG, больше возможностей + результаты корректные будут. Там также сказанно как подключать - публикую ниже (надо просто использовать спецификацию Пеллета при создании модели, а не RDF или OWL):


// URL к онтолгии String ont = "http://www.mindswap.org/2004/owl/mindswappers";

// Создаем пустую модеть используя специ-ю Пеллета
OntModel model = ModelFactory.createOntologyModel( PelletReasonerFactory.THE_SPEC );

// Читаем онологию из файла  model.read( ont );
// Работаем с моделью как обычно
OntClass Person = model.getOntClass( "http://xmlns.com/foaf/0.1/Person" );
Iterator instances = Person.listInstances();


Попробую-напишу лучше стало или нет.

Последнее обновление ( 08.12.2008 )
 
< Пред.
crider.rork.ru © 2018