Как показывает практика, русскоязычного контента о технологиях Семантик Веб днем с огнем не сыщешь. С одной стороны хорошо, а с другой – как-то не очень. Поэтому, некоторым людям иногда приходят мысли – а не написать ли чего-нибудь интересного, дабы обратить полезную (или не очень – кому как) информацию в массы, так сказать.
Где-то так и появился следующий ниже текст, в котором автор пытается ненавязчиво в двух словах рассказать о том, что же такое SWRL.
И так, с чего же это все началось. А началось, как показывают достоверные источники, уже давно – в мае 2004 года. Исследователями National Research Council of Canada, Network Inference и Stanford University в рамках работы W3C был представлен «релиз» A Semantic Web Rule Language. Перевести это выражение можно, но не нужно – теряется наглядность смысла.
A Semantic Web Rule Language (SWRL) – это технология, которая основана на объединении OWL и RuleML, т.е. объединены онтологии (OWL-DL) и правила.
Лирическое отступление.
Следует уточнить, что же разработчики понимали под онтологиями, а что под правилами.
OWL-DL с данном контексте соответствует SHOIN(D), что в переводе на обычный язык означает:
Ядром RuleML является язык Datalog, который, в свою очередь – синтаксическое подмножество Prolog'а. Отсюда вывод: работаем с хорновскими дизъюнктами.
Дизъюнктом Хорна называют выражение типа
![]()
откуда, используя правила эквивалентных преобразований, получаем дизъюнкцию всех отрицаний аi и b. Ограничение на предикаты(атомы) SWRL-правил заключается в том, что они, в отличии от предикатов RuleML, должны быть одноместными, двуместными. Таким образом, все N-арные отношения (где N > 2) должны быть представлены соответствующей форме, чтобы их было возможно реализовать средствами SWRL. Для приведения к этому виду предлагается использовать преобразование Ллойда-Топора.
Синтаксис SWRL.
Атомы в SWRL определены следующим образом.
![]()
где
C(i) – класс;
D(v) – тип данных;
R(i,j) – объектное свойство;
U(i,v) – свойства – типы данных (определяет связь);
p – встроенное отношение;
i,j – переменные, конкретные экземпляры или значения данных;
v1, …, vN – типы данных переменных или типы данных значений.
Выражение в SWRL, т.е. SWRL-правило, состоит из головы и тела: голова – это консеквент продукционного правила и может состоять только из одного атома, а тело – это антецедент, который может состоять из нескольких атомов (по поводу ограничений на количество информации не встречалось).
База знаний SWRL состоит из двух компонентов:
- 1) БЗ SHOIN(D) и
- 2) множества SWRL-правил.
Так же разработчиками введено понятие «safety» – безопасность SWRL-правил. В правилах атомы могут ссылаться на экземпляры, на реальные данные, переменные экземпляров и переменные данных. Причем, область действия переменных ограничена конкретным правилом. Переменные, которые присутствуют в антецеденте, присутствуют и в консеквенте. В консеквенте не может появится новая переменна, отличная от тех, что были использованы в антецеденте.
Семантика SWRL.
Правило интерпретации SWRL-правил выглядит следующим образом:
![]()
где
I – интерпретация;
R – множество ресурсов;
LV R – множество конкретных значений;
EC – отображение классов и типов данных на множества R и LV соответственно;
ER – отображение свойств на бинарные отношения в R;
L – отображение расклассифицированных конкретных объектов на элементы LV;
S – отображение экземпляров на EC.
Причем, область объектов интерпретации не пересекается с областью типов данных объектов интерпретации.
Связь интерпретации со структурой атома SWRL-правила выглядит следующим образом:
|
Атом |
Условие интерпретации |
В SWRL-правиле антецедент удовлетворен, если в нем все атомы пусты (консеквент в этом случае принимает значение истины) или если все атомы удовлетворены (согласованы).
В SWRL-правиле консеквент удовлетворен, если атом в нем не пуст или удовлетворен.
SWRL-правило удовлетворяет интерпретации I, если интерпретация каждого атома в антецеденте удовлетворена и интерпретация консеквента удовлетворена.
Пример №1 SWRL-правила. Определение «быстрого компьютера»
![]()
где, к примеру, FastComputer(?c) это C(i), hasCPU(?c; ?cpu) это R(i,j).
Пример №2 SWRL-правила. Определение «дяди».
![]()
где все отношения являются R(i,j).
Тривиальные SWRL-правила можно переводить в DL с помощью метода свертки. А вот привести к DL SWRL-правило, в консеквенте которого две различные переменные, невозможно. Для совершения такого преобразования нужно будет сгенерировать новые правила, которые будут содержать в консеквенте по одной переменной (пример №2), что не есть целесообразным действием.
Зачем нужен SWRL?
Какими именно устремлениями руководствовались разработчики технологии SWRL не известно, т.к. мемуаров они еще не написали (а жаль). Однако суть технологии и принципы ее работы дают возможность определить, что она необходима по следующим причинам:
- 1) правила SWRL не содержат конкретных объектов, а только ссылаются на них, что дает возможность применять одно и то же правило к ряду групп объектов;
- 2) правила SWRL могут быть добавлены к OWL-описанию, т.е. включены в онтологию;
- 3) написание и «чтение» правил удобнее, если для этого существует специальный язык.
Возможность работать с SWRL уже реализована во многих редакторах онтологий, в т.ч. и в Protege. Поддержка SWRL существует в Jess и Sesame.
Пример №3. Описание определения «дяди» в Jess
(defrule rule-5
(triple
(predicate "http://a.com/ontology#hasParent")
(subject ?x) (object ?y))
(triple
(predicate "http://a.com/ontology#hasBrother")
(subject ?y) (object ?z))
=>(assert (triple (predicate "http://a.com/ontology#hasUncle")
(subject ?x) (object ?z))))
В Sesame описание правил проходит так, как показано на W3C - SWRL
В целом, SWRL – это технология, которая помогает описать абстрактный механизм оперирования объектами предметной области, а так же закономерности предметной области. Основным достоинством SWRL является то, что он дает возможность выводить новые факты из существующих утверждений. Так же, плюсом технологии SWRL является то, что ее правила можно описывать с помощью таких языков, как CLIPS (что реализовано в Jess) или Prolog, что должно повысить эффективность описания и обработки, как минимум.
Ссылки
- 2. SWRL 0.6
- 3. RuleML
- 4. Protégé
- 5. Jing Mei, Elena Paslaru Bontas «Reasoning Paradigms for SWRL-enabled Ontologies»
- 6. Vahid Karimi «Semantic Web Rule Language (SWRL)»
Ошибка с определением «дяди» на SWRL. По-моему, перепутаны предикаты hasParent и hasBrother.
У Вас:
hasParent (?x1,?x2) ← hasBrother (?x2, ?x3) ^ hasUncle (?x1, ?x3)
Мне кажется, должно быть:
hasBrother (?x1,?x2) ← hasParent (?x2, ?x3) ^ hasUncle (?x1, ?x3)
Отлично, что появилась эта статья!
Поподробнее прочитаю потом, пока только оставлю две маленькие ремарки:
1. SWRL – теоретически неразрешимый язык, поэтому нет и не может полного reasoner’a. Грубо говоря это означает, что не все знания семантически следующие из БЗ могут быть логически выведены.
2. DL-Safe правила, о которых упомянула Анна, как раз и были введены для того, чтобы вернуть разрешимость. OWL + DL-Safe rules реализованы (например, в Pellet). Они действительно применяются *только* к объектам, явно находящимся в ABox. Из этого прямо следует, что на основании DL-safe правил нельзя доказать ни одно нетривиальное соотношение между классами (в TBox).
А мне и вовсе кажется, что:
hasUncle (?x1, ?x3) ← hasParent (?x1, ?x2) ^ hasBrother (?x2,?x3)
наверное, здесь автором была допущена опечатка, потому что в оригинале правило было записано наоборот
hasParent(?x1,?x2) ∧ hasBrother(?x2,?x3) ⇒ hasUncle(?x1,?x3)В связи с чем у меня вопрос: как лучше записывать правила – с головы или с тела?
Второй вопрос: что такое BUILTLN? Возможно, это Builtin или я ошибаюсь?
Нет, не ошибаешься, это именно built-ins (встроенные правила) [1]
[1] http://www.w3.org/Submission/SWRL/#8
да, действительно ошиблась. только в правильном варианте консексент hasUncle (?x1, ?x3). мы же «дядю» определяем
по поводу «с головы или с тела?», мне кажется, что все же в головы. т.к. не даром же ее головой назвали
ну, а на самом деле, это скорее всего из пролога повзаимствовано.
BUILTIN – правильно так. тут уж простите, опечатка.
сейчас исправлю
Ждем отдельной статьи о DL-Safe rules!
Анна, как можно получить ваши данные (ФИО), чтобы сослаться на вашу статью в научной работе?
Анна Андреевна Воскобойникова