- •Национальный исследовательский
- •Университет
- •В ы п у с к н а я р а б о т а
- •Введение
- •Глава 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.4. Примеры работы транслятора.
Запрос 1. Найти студентов, родившихся в 1991 году.
?X.ФИО-X IN Студент(ГодРожд=1991)
ИЛИ
?X.ФИО-X IN Студент;X.ГодРожд=1991
Результат трансляции:
SELECT DISTINCT X.ФИО
FROM (SELECT id, ФИО FROM Студент WHERE ГодРожд=1991) AS X
Запрос 2.Какую фамилию имеет староста группы А13-09?
?X.Группа.Староста.ФИО - X IN Студент;X.Группа.Номер = 'А13-09'
ИЛИ
?X.Группа.Староста.ФИО - X IN Студент(Группа.Номер = 'А13-09')
Результат трансляции:
SELECT DISTINCT __0.ФИО
FROM (SELECT id, ФИО FROM Студент) AS __0
CROSS JOIN (SELECT id, Староста FROM Группа) AS __2
CROSS JOIN (SELECT id, Группа FROM Студент) AS X
CROSS JOIN (SELECT id FROM Группа WHERE Номер='А13-09') AS __1
WHERE __2.Староста = __0.id AND X.Группа = __1.id AND X.Группа = __2.id
ИЛИ
?X.Группа.Староста.ФИО - X IN Студент;X.Группа = Y;Y.Номер = 'А13-09'
Результат трансляции:
SELECT DISTINCT __0.ФИО
FROM (SELECT id, ФИО FROM Студент) AS __0
CROSS JOIN (SELECT id, Староста FROM Группа) AS __1
CROSS JOIN (SELECT id, Группа FROM Студент) AS X
CROSS JOIN (SELECT id FROM Группа WHERE Номер='А13-09') AS Y
WHERE __1.Староста = __0.id AND X.Группа = Y.id AND X.Группа = __1.id
Запрос 3.Найти всех студентов группы А13-01, родившихся ранее старосты этой группы.
?X.ФИО - X IN Студент(Группа.Номер = 'А13-08';ГодРожд < Группа.Староста.ГодРожд)
Результат трансляции:
SELECT DISTINCT X.ФИО
FROM (SELECT id, Группа, ФИО, ГодРожд FROM Студент) AS X
CROSS JOIN (SELECT id, ГодРожд FROM Студент) AS __2
CROSS JOIN (SELECT id FROM Группа WHERE Номер='А13-08') AS __0
CROSS JOIN (SELECT id, Староста FROM Группа) AS __1
WHERE X.Группа = __0.id AND __1.Староста = __2.id AND X.ГодРожд<__2.ГодРожд
Запрос 4. Какие студенты группы А13-08 сдали экзамен по дискретной математике на отлично?
?X.ФИО - X IN Студент; X.Группа.Номер = 'А13-08';
(X СдалЭкзамен Z Y); Y.Назв = 'Дискретная математика'; Z.Оценка = 5
Результат трансляции:
SELECT DISTINCT X.ФИО
FROM (SELECT id, Группа, ФИО FROM Студент) AS X
CROSS JOIN (SELECT id, Студент, Предмет FROM СдалЭкзамен WHERE Оценка=5) AS Z
CROSS JOIN (SELECT id FROM Группа WHERE Номер='А13-08') AS __0
CROSS JOIN (SELECT id FROM Предмет WHERE Назв='Дискретная математика') AS Y
WHERE X.Группа = __0.id AND Z.Студент = X.id AND Z.Предмет = Y.id
Запрос5. Каков средний бал на экзвмене по дискретной математике у студентов группы А13-08?
?AVG(Z.Оценка) - Z IN СдалЭкзамен(Предмет.Назв = 'Дискретная математика';Студент.Группа.Номер = 'А13-08')
Результат трансляции
SELECT AVG( Z.Оценка
FROM (SELECT id, Предмет, Студент, Оценка FROM СдалЭкзамен) AS Z
CROSS JOIN (SELECT id FROM Предмет WHERE Назв='Дискретная математика') AS __0
CROSS JOIN (SELECT id, Группа FROM Студент) AS __1
CROSS JOIN (SELECT id FROM Группа WHERE Номер='А13-08') AS __2
WHERE Z.Предмет = __0.id AND Z.Студент = __1.id AND __1.Группа = __2.id
Запрос6. Какие студенты сдали все экзамены на отлично в январе 2012 года?
?X.ФИО - (X СдалЭкзамен Z Y); Z.Оценка = 5; Z.Дата >= '01/01/2012'; Z.Дата <= '01/31/2012'
Результат трансляции:
SELECT DISTINCT X.ФИО
FROM (SELECT id, ФИО FROM Студент) AS X
CROSS JOIN (SELECT id, Студент, Предмет FROM СдалЭкзамен WHERE Оценка=5 AND Дата>='01/01/2012' AND Дата<='01/31/2012') AS Z
CROSS JOIN (SELECT id FROM Предмет) AS Y
WHERE Z.Студент = X.id AND Z.Предмет = Y.id
Запрос 7. Найти всех профессоров кафедры Прикладной математики.
?X.ФИО-Работает_на(X).Назв='Прикладная математика'; X.Должность='Профессор'
ИЛИ
?X.ФИО- (X Работает_на Y Z);X.Должность='Профессор'; Z.Назв='Прикладная математика'
Результат трансляции:
SELECT DISTINCT X.ФИО
FROM (SELECT id, ФИО FROM Препод WHERE Должность='Профессор') AS X
CROSS JOIN (SELECT id, Препод, Кафедра FROM Работает_на) AS __1
CROSS JOIN (SELECT id FROM Кафедра WHERE Назв='Прикладная математика') AS __0
WHERE __1.Препод = X.id AND __1.Кафедра = __0.id
Запрос 8. Какие студенты и по каким предметам сдади экзамены на отлично? У каких препододавателей и по каким предметам студент Иванов сдал экзамены на отлично?
?X.Студент.ФИО,X.Предмет.Назв - X IN СдалЭкзамен(Оценка=5)
Результат трансляции:
SELECT DISTINCT __0.ФИО, __1.Назв
FROM (SELECT id, ФИО FROM Студент) AS __0
CROSS JOIN (SELECT id, Назв FROM Предмет) AS __1
CROSS JOIN (SELECT id, Студент, Предмет FROM СдалЭкзамен WHERE Оценка=5) AS X
WHERE X.Студент = __0.id AND X.Предмет = __1.id
ИЛИ
?X.ФИО,Y.Назв - (X СдалЭкзамен Z Y); Z.Оценка=5
Результат трансляции:
SELECT DISTINCT X.ФИО, Y.Назв
FROM (SELECT id, ФИО FROM Студент) AS X
CROSS JOIN (SELECT id, Назв FROM Предмет) AS Y
CROSS JOIN (SELECT id, Студент, Предмет FROM СдалЭкзамен WHERE Оценка=5) AS Z
WHERE Z.Студент = X.id AND Z.Предмет = Y.id
Запрос 9. У каких препододавателей и по каким предметам студент Иванов сдал экзамены на отлично?
?Z.Кому.ФИО,Y.Назв - (X СдалЭкзамен Z Y);X.ФИО = 'Иванов А.П.';Z.Оценка=5
Результат трансляции:
SELECT DISTINCT __0.ФИО, Y.Назв
FROM (SELECT id, ФИО FROM Препод) AS __0
CROSS JOIN (SELECT id, Назв FROM Предмет) AS Y
CROSS JOIN (SELECT id, Студент, Предмет, Кому FROM СдалЭкзамен WHERE Оценка=5) AS Z
CROSS JOIN (SELECT id FROM Студент WHERE ФИО='Иванов А.П.') AS X
WHERE Z.Студент = X.id AND Z.Предмет = Y.id AND Z.Кому = __0.id