Машины логического вывода (англ. Reasoner) – еще один класс программного обеспечения, предназначенный для работы с онтологическими моделями. Они позволяют проверять правильность модели, и вычислять результаты логических выражений. Если в языке SPARQL для этого нужно строить довольно сложные запросы, учитывающую всю «механику» отражения логических связей в модели, то машины логического вывода позволяют оперировать именами классов, свойств и сущностей, и «задавать модели вопросы», абстрагируя пользователя от подробностей внутреннего строения модели. В доступной пользователю форме проще всего познакомиться с Reasoner’ом Pellet, который можно установить как плагин к редактору Protégé, или использовать как самостоятельный продукт.
Посмотрим, как машина логического вывода проверяет корректность онтологии. Создадим простую онтологию, состоящую из четырех классов:
Organization Company Institution Person
В этой онтологии мы описали организации, которые делятся на компании и учреждения, а также персон – физических лиц. Зададим условие разобщенности (disjoint) для классов Company и Institution, поскольку ни одна компания не может являться одновременно и учреждением. Попробуем создать экземпляр класса Company, а затем добавить ему в список типов класс Institution. Reasoner выдаст сообщение об ошибке:
Рис. 21. Логическая ошибка в онтологии
Кроме того, знак ошибки появится в правом верхнем углу окна редактора Protégé:
Рис. 22. Знак логической ошибки в онтологии в редакторе Protégé.
При нажатии на него мы также сможем увидеть описание ошибки. Наконец, в списке типов нашей сущности оба класса будут подсвечены красным:
Рис 23. Неверно заданные классы в редакторе Protégé.
Теперь попробуем функционал получения логических выводов. Создадим свойство-ссылку worksIn (работает в), которая соединяет персон и организации, и объявим его функциональным инверсивным свойством. Таким же образом создадим свойство hasEmployee (имеет сотрудника), которое соединяет организации с персонами. Укажем, что эти свойства являются инверсивными друг для друга:
Рис. 24. Создание инверсивного свойства
Теперь создадим индивидуальный объект класса Person, под названием Smith, и укажем, что он работает в компании Alpha. Перейдя в свойства компании Alpha, увидим сделанный вывод, который состоит в том, что эта компания имеет сотрудника Smith:
Рис. 25. Значение свойства, полученное в результате логического вывода
Перейдем к рассмотрению правил логического вывода. Необходимо понимать, что каждый из стандартов онтологического представления информации содержит набор «корневых» аксиом, например:
rdf:type rdfs:range rdfs:Class .
Эта аксиома говорит о том, что областью значений предиката rdf:type является rdfs:Class. Таким образом, стандарты определяют сами себя через собственные термины.
Правила, по которым работают машины логического вывода, также приведены в стандартах. RDFS определяет базовый набор правил вывода, OWL существенно их расширяет. Среди правил логического вывода, определенных в RDFS, присутствуют следующие:
ЕСЛИ | ТО |
aaa rdfs:domain xxx . yyy aaa zzz . | yyy rdf:type xxx . |
xxx rdfs:subClassOf yyy . yyy rdfs:subClassOf zzz . | xxx rdfs:subClassOf zzz . |
aaa rdfs:range xxx . yyy aaa zzz . | zzz rdf:type xxx . |
Полный список правил логического вывода RDFS можно найти здесь – их не так много, всего 13. Мы привели в пример только некоторые из них, чтобы проиллюстрировать принцип действия машин логического вывода и пределы их возможностей. Например, согласно правилу, записанному во второй строке таблицы, если у класса xxx есть подкласс yyy, а у того – подкласс zzz, то считается, что xxx имеет подкласс zzz. Это очень важно при практическом использовании онтологий, когда иерархии классов могут иметь сложную структуру.
Можно использовать логический вывод и при работе через точку доступа SPARQL – для этого нужно включить у нее entailment режим, соответствующий нужному стандарту. Тогда в ответ на все запросы точка доступа начнет возвращать не только триплеты, непосредственно содержащиеся в хранилище, но и триплеты, полученные в результате логического вывода. Подробнее работа с entailment режимами будет рассмотрена в главе 6.
Следующий раздел: Правила логического вывода SWRL, SPIN, SHACL