Разработка языка запросов в бинарной модели знаний и транслятора этого языка в язык SQL (бакалаврская работа) (544460), страница 5
Текст из файла (страница 5)
▪ (K1, K2,…, Kn), где Kj
String1 или Kj есть пара вида E: D с E, D
String1;
▪ С(α), где С
String1 и α – атрибутное условие. Синтаксис атрибутных условий будет рассмотрен в п. 2.5. Синтаксис составных имен для типов данных будет рассмотрен позднее в п. 2.3.1.
Составные имена объектов имеют форму
[A1: e1, A2: e2,…, Am: em],
где Ai – имена атрибутов, а ei – имена индивидных объектов (1
i
m).
Примеры 2.1:
▪ Студент, Профессор, Доцент, P@mt_ab21 – простые имена понятий;
▪ ФИО, ГодРожд, Price – имена атрибутов;
▪ Доцент | Профессор , Студент(*) – составные имена понятий;
▪ студент#1, студент#27, ‘староста группы А13-05’ – простые имена объектов;
▪ SurrСтудент = {студент#0, студент#1, студент#2,…};
▪ [ФИО: ‘А.П. Иванов’, ГодРожд: 1985] – составное имя объекта.
Замечание. В составном имени объекта ‘А.П. Иванов’ использованы одиночные кавычки, так как, если снять кавычки, то получится строчка, которая уже не является именем в системе БМЗ.
Множество всех строчек обычно рассматривают как примитивный (предопределенный) тип данных, обозначаемый String. На этом типе данных действует операция конкатенации: если x, y - произвольные строчки символов, то их конкатенация xy есть строчка, получаемая присоединением строчки у к строчке х. При этом конкатенацией строчек, взятых в одиночные кавычки, ‘x’ и ‘y’ считается строчка ‘xy’, а не ‘x’‘y’.
2.2. Бинарная Модель Данных
В системе БМЗ имеется подсистема «Бинарная Модель Данных» (БМД). В БМД используются следующие языки:
▪ язык описания данных – ЯОД. Используется для спецификации универсумов понятий, т.е. фактически для определения структуры объектов – примеров и контрпримеров понятий. Поэтому предложения ЯОД называются структурными. Таким образом, ЯОД является языком структурной спецификации систем понятий;
▪ язык для спецификации типов данных (значений) – ЯТД. Этот язык можно рассматривать как подъязык ЯОД;
▪ язык запросов к базе данных – ЯЗД;
▪ язык атрибутных условий – ЯАУ. Эти условия являются компонентами запросов.
▪ языки для спецификации логических отношений между понятиями. Предложения этих языков называются логическими. Заметим, что язык атрибутных условий ЯАУ можно рассматривать как логический (условие является булевой комбинацией бинарных отношений между селекторами, которые являются атрибутами или итерациями атрибутов);
▪ языки для спецификации модальных отношений (включая темпоральные отношения);
▪ язык продукций – ЯП.
2.2.1. Спецификация типов данных
В БМЗ используются два вида имен для типов данных – простые (примитивные, предопределенные) имена и составные имена. Простыми именами для типов данных являются:
▪ Boolean = {true, false} . На этом типе данных действуют логические операции NOT x, x AND y, x OR y, x IMP y (x IMPy = false тогда и только тогда, когда x =false и y =true);
▪ Number = {0,1,2,…} (в ASCII представлении). На этом типе данных действуют стандартные бинарные операции (Number,Number)à Number: сложение x+y ; умножение x*y ; усеченная разность x-y (x-y=0, если х меньше y ; возведение в степень x**y; действуют также операции сравнения (Number,Number)àBoolean: , x<y ( x<y =true тогда и только тогда, когда x меньше y), x =<y, x>y, x>=y, x=/y (x не равно y);
▪ Integer = {0,1,-1,2,-2,…} и Real – вещественные числа (в ASCII представлении). На этих типах данных действуют те же операции, что и на типе Number (но вычитание не усеченное);
▪ Char – тип знаков, т.е. букв и символов клавиатуры в ASCII представлении:
A a B b C c D d E e F f G g H h I i J j K k L l M m N n O o P p Q q R r S s T t U u V v W w X x Y y Z z А а Б б В в Г г Д д Е е Ж ж З з И и Й й К к Л л М м Н н О о П п Р р С с Т т У у Ф ф Х х Ц ц Ч ч Ш ш Щ щ Ъ ъ Ь ь Ы ы Э э Ю ю Я я ~ ` @ # $ % & * / \ ^ _ - " # ; : < > ? . , | + ( ) '
▪ String – строчки символов клавиатуры (в ASCII представлении). На этом типе действует операция конкатенации x^y (к строчке x приписывается без пробела строчка y) и операция LNG: String à Nat(LNG(x) – длина сточки x . (Например, если x = ‘100$ abc’ и y = ‘De’, то LNG(x) = 10 и x^y = ‘100$ abc’’De’ .)
Составные имена для типов данных специфицируют производные типы данных, которые получаются из примитивных типов путем применения конструкторов типов.
2.2.2. Конструкторы типов данных
Пусть Alpha - какая-либо спецификация некоторого типа данных. Через "Alpha" обозначим этот тип значений (точнее, множество всех элементов типа значений, специфицированного выражением Alpha).
Замечание. Вообще, двойные кавычки, заключающие произвольное выражение exp, обозначают смысл (значение) этого выражения. Например, если переменная X приняла значение true, а переменная Y приняла значение false, т.е. “X” = true и “Y” = false, то “X ANDY” = false.
n-Местный конструктор F по спецификацям типов Alpha1, Alpha2,…, Alphan (синтаксически) дает спецификацию F(Alpha1,Alpha2,...,Alphan). Семантически, этот конструктор есть n-местная функция, которая для данных типов значений "Alphaj" определяет новый тип значений
"F(Alpha1,Alpha2,...,Alphan)".
Любую спецификацию типа значений Alpha можно рассматривать как имя того типа "Alpha", который определяется этой спецификацией. Поэтому, следуя обычной практике, мы будем, говоря о типе значений "Alpha", часто использовать его имя Alpha.
Замечание. На любом типе данных Alpha действуют два оператора сравнения =, /= : (Alpha,Alpha) à Boolean: “x=y”
“x” = “y” и “x/= y”
“x”
“y”. Выражение x/=y эквивалентно выражению NOT x=y : “NOT x=y” совпадает с “x/=y”.
Конструктор (*).
Alpha à Alpha(*),
“Alpha(*)” = {{x1,x2,...,xp} | xj
"Alpha" (1
j
p), p = 0,1,2,...}.
Другими словами, элементами типа Alpha(*) являются выражения, представляющие произвольные конечные множества, которые составлены из элементов типа Alpha. Точнее, элементами типа Alpha(*) являются выражения вида {e1,e2,...,ep}, которые можно рассматривать как (составные) имена для соответствующих конечных множеств, состоящих из имен – элементов типа Alpha. Поэтому, если элементы ej
“Alpha” в {e1,e2,...,ep} записать в другом порядке, то получим выражение, обозначающее то же самое множество, т.е. имеем кореферентные имена: {e1,e2,...,ep} ~ {ei1,ei2,...,eip}, где i1, i2,…, ip – числа от 1 до p, записанные в произвольном порядке. (Например, {a, b, c, d} ~ {d, a, c, b}.)
Конструктор объединения
Этот конструктор образует объединение типов:
Alpha, Beta --> Alpha | Beta,
“Alpha | Beta” = {x | x
“Alpha” или x
Beta}.
Конструктор {}.
Если Alpha – произвольный тип значений и e1, e2,...,en – какие-либо элементы этого типа, то {e1,e2,...,en} есть спецификация конечного типа, состоящего из этих элентов, т.е. “{e1,e2,...,en}” – множество из элементов e1, e2,...,en .
Конструктор декартова произведения ( , ,…)
Этот конструктор дает декартово произведение типов:
Alpha1, Alpha2,..., Alphan à (Alpha1,Alpha2,...,Alphan),
“(Alpha1,Alpha2,...,Alphan)” = {(x1,x2,...,xn) | xj
“Alphaj ” (1
j
n)}.
Таким образом, элементами декартова произведения служат выражения – упорядоченные n-наборы, составленные из элементов типов Alphaj .
С конструктором декартова произведения ассоциированы операция "точка", с помощью которой можно находить компоненты элементов декартова произведения: если e = (e1,e2,...,en) и 1
j
n, то e.j = ej ; если же j > n, то значение e.j не определено.
Конструктор «метка» .
Пусть L
String1 – "метка", рассматриваемая как атрибут.
Alpha, L à L: Alpha,
“L: Alpha” = { L: x | x
“Alpha”}.
Таким образом, элементами “Alpha” являются выражения вида L: e , где е – произвольный элемент типа Alpha.
На этом типе значений действует операция применения атрибута L : если переменная X приняла значение L: е, то X.L = e. Если конструктор «метка» используется в комбинации с декартовым произведением, то получается так называемое помеченное декартово произведение:
Alpha1, L1, Alpha2, L2,..., AlphaN, Ln à
(L1: Alpha1, L2: Alpha2,..., Ln: Alphan),
“(L1: Alpha1, L2: Alpha2,..., Ln: AlphaN)” =
{(L1: x1, L2 :x2,..., Ln:xn) | xj
Alphaj (1
j
n)}.
Метка, примененная как атрибут к элементу е = (L1: e1, L2 : e2,..., Ln: en) помеченного декартова произведения, позволяет получать ту компоненту, которая помечена этой меткой:
(L1: e1, L2 : e2,..., Ln: en).Lj = ej .
Вариантом конструктора L: является конструктор /L: /. Различие между этими конструкторами лишь в том, что когда /L: / входит в помеченное декартово произведение, компонента L: может быть пропущена. Рассмотрим, например, следующую спецификацию составного типа:
(/L: Alpha/, M: Beta, /N: Gamma/).
Эта спецификация дает тип данных














