Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка языка запросов в бинарной модели знаний и транслятора этого языка в язык SQL (бакалаврская работа).doc
Скачиваний:
13
Добавлен:
28.06.2014
Размер:
1.31 Mб
Скачать

3.3. Описание алгоритма трансляции.

Трансляция состоит из следующих этапов:

  1. Подготовка к трансляции.

  2. Анализ используемых переменных, замена коротких записей.

  3. Проверка на корректность классов.

  4. Удаление ненужных переменных.

  5. Создание запроса SQL на основе используемых переменных.

Каждому этапу соответствует несколько функций в программном коде, который представлен в приложении.

Ниже дается описание каждого этапа и названия функций в программе.

  1. Подготовка к трансляции.

Определяется структурная схема. Запрос делится на две части: с целями (левую) и с конъюнктивными условиями (правую). Создаются списки всех переменных и целевых переменных, инициализируется счетчик искусственных переменных.

Функции: string translate(string query)

void divideQuery(string query)

  1. Анализ используемых переменных и замена коротких записей.

Анализ

Анализ состоит в определении целей, типов переменных, используемых атрибутов и значений для атрибутов.

В каждой цели проверяется наличие агрегатной функции (среднее арифметическое(AVG), сумма(SUM), максимум(MAX), минимум(MIN), количество(COUNT)).

Правая часть запроса разбивается на отдельные конъюнкции. Список конъюнкций проходится два раза: первый раз для определения типа переменных, второй – для замены коротких записей и для определения используемых атрибутов переменных и их значений.

Замена коротких записей

Заменяются два тип коротких записей:

а) Атрибутное условие:

Условие X IN Type(A=value)заменяется условиями:

X IN Type; X.A=value

Пример:

X IN Студент(ГодРожд=1990)заменяется на

X IN Студент;X.ГодРожд=1990

б) С многократным использованием операции “точка”

Условие X.Y.Z=valueзаменяется условиями:

X.Y = __i; __i.Z=value

,где __i– искусственно введенная переменная. Значение ‘i’ обозначает номер такой переменной.

Пример:

Х.Группа.Номер = ‘А13-09’ заменяется на

Х.Группа =__0; __0.Группа =‘А13-09’.

Если условие с несколькими точками записано в целевой части запроса, то оно так же разделяется на две, при этом левая часть переносится в часть запроса с конъюнктивными запросами.

Условие V.A < X.Y.Z заменяется условиями:

X.Y = __i; V.A < __i.Z

Функции: void GoalProcessing()

void ConditionsProcessing()

  1. Проверка на корректность классов.

Возможны два случая:

  1. Противоречивость классов переменных.

Например, запрос может быть таким:

X IN Студент; X IN Препод

  1. Неопределенность классов переменных.

Например, запрос

?X - X.ФИО = 'Иванов А.А.'

В данном случае тип переменной X неопределен.

Выдается сообщение об ошибке, если эти случаи имеют место.

Функции: void checkVariablesClass()

  1. Удаление ненужных переменных.

Выполняется удаление из списка переменных, которые не нужны для определения целевых переменных запроса.

Пример:

?Y.Название - (X СдалЭкзамен Z Y); Z.Оценка=5;R IN Студент( ГодРожд=1990)

В данном запросе переменная Rне нужна для определения целевой переменнойY.

Функции: void removeUselessVariables()

  1. Преобразование запроса для БМЗ в запрос SQL

Запрос SQLзаписывается с помощью ключевых словSELECT,FROM,WHERE(выборка),CROSSJOIN(декартово произведение),AS(синоним таблиц).

Пример такого запроса:

SELECT DISTINCT __0.Name

FROM (SELECT id, Name FROM Student) AS __0

CROSS JOIN (SELECT id, Head FROM [Group]) AS __3

CROSS JOIN (SELECT id, [Group] FROM Student) AS X

CROSS JOIN (SELECT id FROM [Group] WHERE Name='А13-08') AS __1

WHERE __3.Head = __0.id AND X.[Group] = __1.id AND X.[Group] = __3.id

Запрос на SQLсоставляется из главного запроса, подзапросов (часть запроса междуCROSSJOINиAS), где выбирается часть таблиц по значениям, которые не являются внешними ключами и связывания атрибутов.

Предполагается, что в каждой таблице имеется суррогатный ключ. По умоланию, суррогатный ключ каждой таблицы принимается за «id», но при определении классов онтологии, можно задать другие значения, соответствующие таблицам.

Если класс атрибута переменной совпадает со служебным словом в диалекте SQL, то он экранируется символами «[» и «]» (квадратные скобки) для диалектаSQLServer, «`» (обратный апостроф) для диалектаMySQLи «"» (двойные кавычки) для диалектаOracleDatabase.

Функции: string CreateSQLQuery(string query)

string CreateSQLSubQuery(QueryVariable qv)

Соседние файлы в предмете Государственный экзамен