Języki i Środowiska Programowania Baz Danych | |||
|
1. Składnia SBQL Dla zdefiniowania składni SBQL przyjmiemy, że niektóre elementy wprowadzonego poprzednio zbioru V mają reprezentację "zewnętrzną", która pozwala zapisać ten element w zapytaniu w postaci ciągu bajtów. Wiele elementów zbioru V, takich jak grafika, skompilowane procedury i metody itd. nie posiada reprezentacji zewnętrznej; może istnieć więc wyłącznie wewnątrz składu obiektów lub jest zwracane jako rezultat zapytania. Zwykle zewnętrzny reprezentant elementu zbioru V jest zwany w językach programowania literałem; nazwa ta została użyta w innym (niewłaściwym) znaczeniu w terminologii standardu ODMG. Można użyć terminu stała, ale następuje tu kolizja znaczeniowa z nazwanym elementem składu obiektów, którego nie można modyfikować. Aby nie doprowadzać do nieporozumień, przywrócimy właściwe znaczenie terminu literał, znane z języków programowania na oznaczenie zewnętrznego, leksykalnego reprezentanta pewnej wartości zbioru V. Zbiór literałów będziemy oznaczać L. Będziemy zakładać, że istnieje prosta i jednoznaczna funkcja odwzorowująca element zbioru L w element zbioru V. Zgodnie z powszechną konwencją, funkcji tej nie będziemy specjalnie oznaczać. Np. literał "Kowalski" może pojawić się w zapytaniu oraz "Kowalski" jest wartością (stringiem) przechowywaną w składzie obiektów lub zwracaną jako rezultat zapytania. Subtelne różnice semantyczne będziemy najczęściej zaniedbywać, przyjmując, że rozróżnienie wynika z kontekstu, w którym taki ciąg znaków się pojawia. Zwrócimy uwagę, że pierwszy string "Kowalski" będzie elementem definiowanego przez nas języka zapytań, zaś drugi - elementem metajęzyka, który służy jako podstawa opisu języka, m.in. tekstu tej książki. Precyzyjne rozróżnienie pomiędzy jednym i drugim może wydawać się przesadą, ale naszym zdaniem brak tego rodzaju rozróżnienia doprowadził do zasadniczych błędów koncepcyjnych i matematycznych w innych podejściach do semantyki języków zapytań. Przyjmiemy także, że wprowadzone poprzednio identyfikatory należące do zbioru I nie mają leksykalnych reprezentantów, czyli nie mogą być zapisane w postaci literałów. Programista lub użytkownik nie ma możliwości użycia w zapytaniu reprezentacji znakowej wewnętrznego identyfikatora w taki sposób, że jej znaczeniem będzie ten wewnętrzny identyfikator. Oczywiście, z jakichś powodów, np. w celu przetestowania programu, będzie mógł skorzystać z funkcji, która wydrukuje identyfikator w postaci ciągu znaków. Takiego ciągu znaków nie będzie jednak można bezpośrednio odwzorować w zapytaniu w odpowiadający mu identyfikator. Jedyną możliwością odwołania się do obiektów znajdujących się w składzie obiektów będzie użycie ich zewnętrznej nazwy należącej do zbioru N. Przyjmiemy, że każdy element zbioru N może być użyty w zapytaniu.
Z syntaktycznego punktu widzenia operatory będą podzielone na unarne i binarne. Operatory będą ponadto podzielone na algebraiczne i niealgebraiczne; podział ten zostanie wyjaśniony nieco dalej.
Przykładowe zapytania zgodne z powyższą składnią są następujące:
Na Rys.40 podsumowaliśmy zdefiniowaną przez nas składnię. Nie jest to ostateczna składnia SBQL - w miarę potrzeb będziemy dodawać dalsze konstrukcje. Zwrócimy uwagę, że wśród algebraicznych operatorów binarnych mogą znaleźć się operatory sumy bagów (È), konkatenacji ciągów elementów oraz iloczynu kartezjańskiego ´. Operatory te są jednak na tyle ważnie, że warto stworzyć dla nich specjalną składnię. Zastosujemy tu składnię ze słowami kluczowymi struct, bag i sequence dla oznaczenia tych operatorów, przy czym będą one n-arne zaś ich argumenty będą oddzielone przecinkami, tj. zapytaniami będą następujące konstrukcje: Przyjmiemy, że w struct( q1, q2, q3, ...) można pominąć słowo kluczowe struct. Konstrukcja struct( q1, q2, q3, ...) oznacza specyficzny "iloczyn kartezjański" bagów, bag(q1, q2, q3, ...) oznacza sumę bagów, zaś sequence(q1, q2, q3, ...) oznacza konkatenację sekwencji. Semantyka tych operatorów jest dość oczywista, ale posiadająca niuansy; zostaną one objaśnione dalej.
|
||
Copyrights © 2006 PJWSTK Materiały zostały opracowane w PJWSTK w projekcie współfinansowanym ze środków EFS. |