selykielen suunnittelu ja toteutus Samu Viita
selykielen suunnittelu ja toteutus Samu Viita
selykielen suunnittelu ja toteutus Samu Viita
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
20kossa oleva joukko sisältää yhden oppilaan kaikkien kurssien oh<strong>ja</strong>a<strong>ja</strong>t.Kysely voidaan ilmaista seuraavasti:insts_sets = student.ext.apply(id->courses).apply((id.apply(id->instructor));Insts_sets edustaa esimerkissä joukoista koostuvaa joukkoa, johon vastaus palautetaan.Kysely kuvaa ensin joukon student-luokan olioidentiteettejä joukoksijoukko<strong>ja</strong>. Nämä sisältävät olioidentiteetin, joka viittaa kursseihin, joita oppilaatovat opiskelleet. Seuraavassa askeleessa kysely korvaa jokaisen identiteetin sisäkkäisistäjoukoista olioidentiteetillä, joka viittaa tietyn kurssin oh<strong>ja</strong>a<strong>ja</strong>an. Tämänkaltainenkysely on niin mutkikas, että kyselyn suoritta<strong>ja</strong>lla täytyy ohjelmointitaidonlisäksi olla tarkempaa ymmärrystä sisäkkäisten funktioiden soveltamisesta.Apply_at -operaatio on apply:n laajennus. Apply-operaatiota on laajennettuuudella parametrilla, jonka tehtävänä on toimia komponentin valitsi<strong>ja</strong>na.Tätä operaatiota ehdotetaan ratkaisuksi sisäkkäisten rakenteiden, eli kompleksistenobjektien käsittelyongelmaan kyselykielissä. Operaatio on muotoa apply_at(p,f),jossa apply-operaatiota on laajennettu parametrillä p. Se osoittaa argumenttinaolevan kompleksisen rakenteen komponenttipolun, josta haluttukomponentti löydetään. Komponentille suoritetaan parametrin f määräämäoperaatio. Näin siis komposiittina olevasta objektista löydetään haluttu komponentti.Komponentti voi olla välillinen tai välitön komponentti operaationargumentille.Näiden QAL-ky<strong>selykielen</strong> perusprimitiivien avulla voidaan tarkastellamonipuolisempaa esimerkkikyselyä, jonka Savnik kollegoineen esittelevät. Kyselysuodattaa sisäkkäiset komponentit department-argumentista. Komponenttiidentifioidaan attribuutilla staff. Saatu joukko, jota Savnik kollegoineen kutsuusuodatetuksi joukoksi olioidentiteettejä, sisältää viittauksen työntekijöihin, jotkaovat vanhempia kuin 45 vuotta. Kyselyn tulokselle muodostetaan ensin rakenneseuraavasti:struct {[ department_name: string, head: employee, staff: {employee} ]}depts;Luotuun depts –nimiseen rakenteeseen sijoitetaan siis kyselyn tulos. On siishuomionarvoista, että käyttäjän tulee tietää kyselyn tuloksen rakenne QAL:ssä.Kysely itsessään ilmaistaan seuraavasti: