Правила логического вывода SWRL, SPIN, SHACL

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

Как мы видели в предыдущей главе, возможности логического вывода «по умолчанию» довольно скромны. Куда интереснее с практической точки зрения получить возможность определять собственные правила, в соответствии с которыми должны получаться логические выводы. Для этого предназначены синтаксисы записи правил логического вывода, определяемых пользователем: SWRL, SPIN и SHACL. Правила SWRL исторически возникли первыми и в промышленных применениях практически не используются. Затем появилась нотация SPIN, но на настоящее время актуальной является спецификация SHACL, определяющая способы записи условий проверки консистентности онтологий, и ее расширение SHACL Rules, предназначенное для записи произвольных правил получения новых фактов на основании уже известных. Несмотря на существенно различный синтаксис, идеологически принцип записи правил во всех нотациях весьма схож. Здесь мы рассмотрим простой пример записи правил в нотации SWRL, т.к. она наиболее наглядна, а создавать и отлаживать такие правила можно в редакторе Protege.

Синтаксис правил SWRL довольно прост. Каждое правило состоит из двух частей – условия и вывода, который формируется, если условие выполнено. И условие, и вывод могут состоять из нескольких атомов – элементарных логических выражений. Условие выполняется, если истинны все составляющие его атомы; если условие выполняется, то «сработают» все атомы, составляющие вывод. Внимание – отрицание и дизъюнкция в атомах не поддерживаются.

Каждый атом представляет собой предикат – утверждение о каких-либо объектах онтологии. Синтаксис записи предикатов соответствует принятому в логике. Например, если известно, что Петр является сыном Ивана, это может быть записано как предикат: являетсяСыном ( Петр, Иван ). То, что указано в скобках – аргументы предиката. При составлении правил SWRL в качестве аргументов могут выступать переменные или конкретные объекты.

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

1. Утверждения о принадлежности к классу. Записывается в следующей форме: Человек ( Петр ). Аргументом является индивидуальный объект. Минимальное SWRL-правило может выглядеть так:
Мужчина ( ?x ) -> Человек ( ?x )
Это правило утверждает, что любой экземпляр класса Мужчина является и экземпляром класса Человек. Впрочем, столь простой вывод можно получить и средствами OWL, без использования SWRL. Как мы видим, переменные в SWRL, как и в SPARQL, предваряются знаком вопроса; знак -> служит для разделения условий и вывода.

2. Утверждения о существовании связи. Примером является уже приводившееся выражение являетсяСыном ( Петр, ?x ) – заметим, что оно будет иметь практический смысл в правиле только в том случае, если хотя бы один аргумент будет переменной.

3. Утверждения о значении свойства-литерала. При помощи способа, аналогичного приведенному в предыдущем пункте, можно получать в переменные значения свойств-литералов, и затем сравнивать их с различными выражениями при помощи встроенных функций. Пример: имеетВозраст ( ?x , ?y ) ∧ swrlb:greaterThanOrEqual ( ?y, 16 ). Это условие проверяет, что объект ?x имеет возраст, больший или равный 16. Как мы видим из этого примера, знак ∧ используется для перечисления нескольких условий – это и некоторые другие обозначения соответствуют общепринятой нотации для записи логических выражений. Заметим также, что для проверки равенства значения свойства какой-либо величине можно обойтись более коротким выражением: имеетИмя ( ?x, "Иван" ), или являетсяСтудентом ( ?x, true ).

4. Условие раздельности двух индивидуальных объектов: differentFrom ( ?x, ?y )

5. Условие совпадения двух объектов: sameAs ( ?x, ?y ). Условие будет истинно, если переменные ?x и ?y оказались равны одному и тому же объекту.

6. Условие о принадлежности значения переменной определенному типу данных. Например: xsd:int ( ?x )

7. Так называемые встроенные условия (built-ins), одно из которых мы уже видели в пункте 3: swrlb:greaterThanOrEqual. Имеется обширный набор таких функций, а также возможность определять собственные.

Результат формулируется при помощи атомов в такой же форме, как и условие.

Рассмотрим пример создания и выполнения правила SWRL в редакторе Protégé. Для этого воспользуемся его старой версией, Protégé 3, которая имела визуальный интерфейс для построения правил. Окно ввода правила выглядит так:

Создание правила SWRL Рис. 26. Создание SWRL-правила в редакторе Protégé.

Это правило гласит, что если ?x работает в компании ?y, а компания ?y имеет директора ?z, то ?x имеет начальника ?z. Редактор выдает подсказки в процессе ввода правил, подсвечивает неверно введенные правила.

Вернемся к примеру онтологии из прошлой главы. Создав в онтологии персону Jackson, связь hasBoss (Alpha, Jackson), и применив наше правило, увидим в свойствах пользователя Smith, что его боссом является Jackson.

Механизм применения правил в Protégé 3 достаточно непрост, поскольку для этого используется экспорт правил и всего содержимого онтологии в компонент исполнения бизнес-правил Drools, применение правил, а затем их импорт в обратном направлении. В Protégé 4 и 5 для выполнения правил SWRL используется машина логического вывода Pellet, напрямую работающая с содержимым онтологий, зато отсутствует визуальный интерфейс для создания правил.

Как мы видим, правила SWRL позволяют создавать весьма гибкие условия для получения новых знаний. Недостатком этой технологии является необходимость специальной подготовки пользователя для конструирования правил, наличие у него глубоких знаний онтологии, а также слабые программные реализации.

Следующий раздел: Обзор возможностей OWL 1 и OWL 2