SWRL – как, зачем?

Как показывает практика, русскоязычного контента о технологиях Семантик Веб днем с огнем не сыщешь. С одной стороны хорошо, а с другой – как-то не очень. Поэтому, некоторым людям иногда приходят мысли – а не написать ли чего-нибудь интересного, дабы обратить полезную (или не очень – кому как) информацию в массы, так сказать.
Где-то так и появился следующий ниже текст, в котором автор пытается ненавязчиво в двух словах рассказать о том, что же такое 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), что в переводе на обычный язык означает:

  • S – это ALC (это набор базовых классов, имен свойств и имен объектов, является подмножеством DL) в связке с транзитивными свойствами;
  • H – иерархия свойств;
  • O – номиналы (так называемые классы единичных объектов);
  • I – обратные свойства;
  • N – числовые ограничения области значений свойств;
  • (D) – типы данных, свойства, которые связывают объекты с типами данных.
  • Ядром RuleML является язык Datalog, который, в свою очередь – синтаксическое подмножество Prolog’а. Отсюда вывод: работаем с хорновскими дизъюнктами.
    Дизъюнктом Хорна называют выражение типа
    дизъюнкт Хорна
    откуда, используя правила эквивалентных преобразований, получаем дизъюнкцию всех отрицаний аi и b. Ограничение на предикаты(атомы) SWRL-правил заключается в том, что они, в отличии от предикатов RuleML, должны быть одноместными, двуместными. Таким образом, все N-арные отношения (где N > 2) должны быть представлены соответствующей форме, чтобы их было возможно реализовать средствами SWRL. Для приведения к этому виду предлагается использовать преобразование Ллойда-Топора.

    Синтаксис SWRL.

    Атомы в SWRL определены следующим образом.
    atom
    где
    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-правил выглядит следующим образом:
    sem
    где
    I – интерпретация;
    R – множество ресурсов;
    LV R – множество конкретных значений;
    EC – отображение классов и типов данных на множества R и LV соответственно;
    ER – отображение свойств на бинарные отношения в R;
    L – отображение расклассифицированных конкретных объектов на элементы LV;
    S – отображение экземпляров на EC.
    Причем, область объектов интерпретации не пересекается с областью типов данных объектов интерпретации.

    Связь интерпретации со структурой атома SWRL-правила выглядит следующим образом:

    Атом

    Условие интерпретации

    table_1_1 table_1_2
    table_2_1 table_2_2
    table_3_1 table_3_2
    table_4_1 table_4_2
    table_5_1 table_5_2
    table_6_1 table_6_2
    table_7_11 table_7_2

    В SWRL-правиле антецедент удовлетворен, если в нем все атомы пусты (консеквент в этом случае принимает значение истины) или если все атомы удовлетворены (согласованы).
    В SWRL-правиле консеквент удовлетворен, если атом в нем не пуст или удовлетворен.
    SWRL-правило удовлетворяет интерпретации I, если интерпретация каждого атома в антецеденте удовлетворена и интерпретация консеквента удовлетворена.

    Пример №1 SWRL-правила. Определение «быстрого компьютера»
    ex1
    где, к примеру, FastComputer(?c) это C(i), hasCPU(?c; ?cpu) это R(i,j).

    Пример №2 SWRL-правила. Определение «дяди».
    uncle1
    где все отношения являются 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, что должно повысить эффективность описания и обработки, как минимум.

    Ссылки

      1.A Semantic Web Rule Language
      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)»


    Понравилась статья? Поделитесь с друзьями!


    10 Responses to SWRL – как, зачем?

    1. Ошибка с определением «дяди» на SWRL. По-моему, перепутаны предикаты hasParent и hasBrother.

      У Вас:

      hasParent (?x1,?x2) ← hasBrother (?x2, ?x3) ^ hasUncle (?x1, ?x3)

      Мне кажется, должно быть:

      hasBrother (?x1,?x2) ← hasParent (?x2, ?x3) ^ hasUncle (?x1, ?x3)

    2. Отлично, что появилась эта статья!
      Поподробнее прочитаю потом, пока только оставлю две маленькие ремарки:
      1. SWRL — теоретически неразрешимый язык, поэтому нет и не может полного reasoner’a. Грубо говоря это означает, что не все знания семантически следующие из БЗ могут быть логически выведены.
      2. DL-Safe правила, о которых упомянула Анна, как раз и были введены для того, чтобы вернуть разрешимость. OWL + DL-Safe rules реализованы (например, в Pellet). Они действительно применяются *только* к объектам, явно находящимся в ABox. Из этого прямо следует, что на основании DL-safe правил нельзя доказать ни одно нетривиальное соотношение между классами (в TBox).

    3. А мне и вовсе кажется, что:
      hasUncle (?x1, ?x3) ← hasParent (?x1, ?x2) ^ hasBrother (?x2,?x3)
      :)

    4. наверное, здесь автором была допущена опечатка, потому что в оригинале правило было записано наоборот hasParent(?x1,?x2) ∧ hasBrother(?x2,?x3) ⇒ hasUncle(?x1,?x3)
      В связи с чем у меня вопрос: как лучше записывать правила — с головы или с тела?
      Второй вопрос: что такое BUILTLN? Возможно, это Builtin или я ошибаюсь?

    5. Нет, не ошибаешься, это именно built-ins (встроенные правила) [1]

      [1] http://www.w3.org/Submission/SWRL/#8

    6. Anna:

      да, действительно ошиблась. только в правильном варианте консексент hasUncle (?x1, ?x3). мы же «дядю» определяем :smile:

    7. Anna:

      по поводу «с головы или с тела?», мне кажется, что все же в головы. т.к. не даром же ее головой назвали :smile: ну, а на самом деле, это скорее всего из пролога повзаимствовано.
      BUILTIN — правильно так. тут уж простите, опечатка.
      сейчас исправлю

    8. Ждем отдельной статьи о DL-Safe rules! 😎

    9. Евгения:

      Анна, как можно получить ваши данные (ФИО), чтобы сослаться на вашу статью в научной работе?

    10. Анна Андреевна Воскобойникова

    Добавить комментарий

    Ваш e-mail не будет опубликован. Обязательные поля помечены *


    Ответить с помощью ВКонтакте: