Машины и правила логического вывода

Эта страница представляет собой главу из нашего методического пособия
"Введение в онтологическое моделирование" (нажмите для перехода к полной версии в формате PDF).

Машины логического вывода (англ. 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