Меню
Главная
Авторизация/Регистрация
 
Главная arrow Информатика arrow ИНТЕЛЛЕКТУАЛЬНЫЕ СИСТЕМЫ
Посмотреть оригинал

Теоретико-множественные методы ускорения поиска

Обработка множества фактов методами реляционной алгебры

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

Пусть в результате отбора фактов для условий правила с (su p:, Oj), с (s2,P2> о2),..., с (sk,pk, ок), где s,, ot — либо константа, либо переменная, получены множества кортежей Т = [1], /., = (ха, xi2), если в условии правила две переменные, Г, = (ха) — если одна переменная. Таким образом, для правила из k условий, получаем к таблиц приблизительно следующего вида:

*11

*12

*21

*22

*»1

*41

*42

Если два или более условий имеют общую переменную, то соответствующие таблицы оказываются связанными общим ограничением. В противном случае результат будет равен декартовому произведению таблиц, что обычно лишено смысла.

Таблицы могут иметь связи следующих типов:

  • 1) соединение двух таблиц по совпадению значений одной или более переменных у пары таблиц. В этом случае две таблицы объединяются реляционным оператором INNER JOIN,
  • 2) фильтрация таблицы по условию сравнения значения переменных между собой или переменной и значения. Данная функция выполняется с помощью условия WHERE (...).

Рассмотрим на конкретных примерах, как условия правил могут транслироваться в операторы SQL. Для упрощения импорта базы знаний в СУБД создадим для фактов единственную таблицу F, состоящую из столбцов S, Р, О, для хранения субъекта, предиката и объекта соответственно. Запрос на языке SQL для вывода фактов о отношении «дядя — племянник(ца)» будет выглядеть следующим образом:

SELECT F_1.Object AS Uncle, F. Object AS Nephew FROM F INNER JOIN F AS F_1 ON F. Sub j ect = F_1. Sub ject WHERE (((F. Predicate) ="is_parent")

AND ((F_l.Predicate) ="has_brother"))

Более сложное правило для отношения «падчерица» на языке SWRL:

hasChild (?xl,?x2) лhasSpouse (?xl,?x3)

лhasSex (?х2, female) лhasChild (?х4,?х2)

л differentFrom (?xl,?x4) л differentFrom (?хЗ,?х4) =>

=>hasStepDaughter (?хЗ,?х2)

Данное правило будет иметь следующий эквивалент на языке SQL:

SELECT DISTINCT F_l.Object AS Step_parent, F_2.Object

AS Step_daughter

FROM

( (F INNER JOIN F AS F_1 ON F. Subject = F_1. Subject) INNER JOIN F AS F_2 ON F. Object = F_2 .Object)

INNER JOIN F AS F_3 ON F_3 . Sub j ect = F_2 . Ob j ect WHERE (F. Predicate="is_parent"

And F_1.Predicate = "is_spouse" AND F_2.Predicate = "is_parent"

And F. Subject< > F_2 .Subject AND

F_1.Object<>F_2.Subject And F_3.Predicate="has_sex"

AND F_3.Object="female")

Поскольку мощность языка SQL существенно выше, чем SWRL, следует ожидать, что любая конструкция SWRL может транслироваться в SQL, а мощные средства работы с индексами в современных СУБД обеспечат высокую скорость массовой обработки фактов правилами.

 
Посмотреть оригинал
Если Вы заметили ошибку в тексте выделите слово и нажмите Shift + Enter
< Предыдущая   СОДЕРЖАНИЕ   Следующая >
 

Популярные страницы