
- •Национальный исследовательский
- •Университет
- •В ы п у с к н а я р а б о т а
- •Введение
- •Глава 1 общие сведения об онтологиях и языках для спецификации онтологий
- •1.1. Содержание онтологии
- •1.2 Цели создания онтологий
- •1.3. Области применения онтологий
- •1.4. Формальная концептуализация и формальные онтологии
- •1.5. Формальная модель понятия и концептуальные языки
- •Глава 2 бинарная модель знаний
- •2.1. Синтаксис имен, используемых в бмз
- •2.2. Бинарная Модель Данных
- •2.2.1. Спецификация типов данных
- •2.2.2. Конструкторы типов данных
- •2.2.3. Спецификация функций
- •2.2.4. Спецификация структуры объектов
- •2.2.5. Синтаксис языка структурной спецификации
- •2.2.6. Атрибутные условия и интервальные ограничения
- •2.2.7. Структурные схемы
- •2.2.8. Представление данных в бмд
- •2.2.9. Логические предложения.
- •Глава 3 язык запросов для бинарной модели данных
- •3.1. Примеры запросов
- •3.2. Описание запросов
- •3.3. Описание алгоритма трансляции.
- •3.4. Примеры работы транслятора.
- •Глава 4 описание и использование программы, реализуюшей транслятор
- •4.1. Описание интерфейса программы.
- •4.2. Задание схемы
- •4.3. Использование транслятора в программном коде.
- •4.4. Программа с подключенной базой данных.
- •Приложение
- •Код программы Файл Onthology.Cs
- •Файл Translator.Cs
- •Заключение
- •Литература
- •Содержание
3.3. Описание алгоритма трансляции.
Трансляция состоит из следующих этапов:
Подготовка к трансляции.
Анализ используемых переменных, замена коротких записей.
Проверка на корректность классов.
Удаление ненужных переменных.
Создание запроса SQL на основе используемых переменных.
Каждому этапу соответствует несколько функций в программном коде, который представлен в приложении.
Ниже дается описание каждого этапа и названия функций в программе.
Подготовка к трансляции.
Определяется структурная схема. Запрос делится на две части: с целями (левую) и с конъюнктивными условиями (правую). Создаются списки всех переменных и целевых переменных, инициализируется счетчик искусственных переменных.
Функции: string translate(string query)
void divideQuery(string query)
Анализ используемых переменных и замена коротких записей.
Анализ
Анализ состоит в определении целей, типов переменных, используемых атрибутов и значений для атрибутов.
В каждой цели проверяется наличие агрегатной функции (среднее арифметическое(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()
Проверка на корректность классов.
Возможны два случая:
Противоречивость классов переменных.
Например, запрос может быть таким:
X IN Студент; X IN Препод
Неопределенность классов переменных.
Например, запрос
?X - X.ФИО = 'Иванов А.А.'
В данном случае тип переменной X неопределен.
Выдается сообщение об ошибке, если эти случаи имеют место.
Функции: void checkVariablesClass()
Удаление ненужных переменных.
Выполняется удаление из списка переменных, которые не нужны для определения целевых переменных запроса.
Пример:
?Y.Название - (X СдалЭкзамен Z Y); Z.Оценка=5;R IN Студент( ГодРожд=1990)
В данном запросе переменная Rне нужна для определения целевой переменнойY.
Функции: void removeUselessVariables()
Преобразование запроса для БМЗ в запрос 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)