66
Datorzinātnes un Informācijas tehnoloģijas fakultāte 3. praktiskais darbs priekšmetā Progresīvās Datu Bāzes „Deduktīvās Datu Bāzes Projektēšana” Viktorija Raizina I DMIO – 2 (ITI) St.apl. 051RDB278

Progresīvās Datu Bā - Web viewRAZHOTAJA_LIGUMS (‘Adidas’,’ Dementieva’)..... Likumu definējums. Struktūra ar galvu un ķermeni, ir likums. Piemēram:

  • Upload
    vomien

  • View
    227

  • Download
    6

Embed Size (px)

Citation preview

Datorzinātnes un Informācijas tehnoloģijas fakultāte

3. praktiskais darbs priekšmetā

Progresīvās Datu Bāzes

„Deduktīvās Datu Bāzes Projektēšana”

Viktorija RaizinaI DMIO – 2 (ITI)

St.apl. 051RDB278

2008.gads

ANOTĀCIJA

Darbā ir aprakstīti deduktīvās bāzes projektēšana un realizēšana ar Oracle 10g Enterprise Edition palīdzību, tā pat arī papildus utilītu izmantošana (SQL*Plus un TOAD FOR ORACLE 9.5 PORTABLE).

Darbā ir dots datu bāzes „Tenisa turnīrs ROLLAND GARROS”” piemērs un tajā ir secīgi aprakstīta datu bāzes projektēšana un realizēšana. Projektēšanas mērķis darbā ir nevis iedziļināšanās tieši izstrādes tehnikā, bet gan tikai datu bāzes darbības aptuvenais darbības definējums. Tā pat secīgi ir aprakstīti paredzamie realizēšanas posmi (paredzamā veidojamā DB struktūra, predikāti, fakti un likumi. Tā pat arī likumu izvades definējuma, izmantojot izveidoto grafisko hierarhisko struktūru). Visi definējumi tika realizēti otrajā darba daļā. Tā pat tika izveidota arī galvenā izvades procedūra, kura darbojas ar definētajiem vairāku līmeņu likumiem, kas atrod ceļu, attiecīgi nodefinētajam likumam, ja procedūrai ir padots tikai sākuma parametrs (jeb sākuma virsotne).

Vizuāli ir parādīti visi realizācijas rezultāti, kā arī ir sniegts plaša piemēru izpēte, izmantojot vairākus pārbaudes veidus.

Darbs izstrādāts izmantojot datoru AMD Athlon 3000+, 1024MB DDR operatīvo atmiņu Windows XP Proffesional vidē.

Darba saturā ir 1 pielikums, 68 attēli, 7 nodaļas, secinājumi, saturs un literatūras avoti. Kopumā darbs ir izklāstīts 53 lappusēs.

2

SATURS

UZDEVUMA NOSTĀDNE............................................................................................................5DEDUKTĪVĀS DATU BĀZES DEFINĒŠANA.....................................................................................61. UZVEDUMA PAKĀRTOTĪBAS IDEJA...............................................................................6

1.1. Problēmas vide................................................................................................................61.2. Hierarhiska uzdevuma definēšana................................................................................7

2. FAKTU UN LIKUMU DEFINĒŠANA...................................................................................82.1. Uzdevuma datu definējumi.............................................................................................82.2. Faktu definēšana.............................................................................................................92.3. Likumu definējums........................................................................................................10

3. GRAFISKAIS LIKUMU ATRISINĀJUMS.........................................................................113.1. Likums „Valsts_ Sponsors”............................................................................................113.2. Likums ”Turnira_Tenisists”..........................................................................................123.3. Likums „Sponsoreta_Valsts”.........................................................................................133.4. Likums „Tenisista_Prece”..............................................................................................14

4. GLABĀŠANAS UN IZGŪŠANAS STRUKTŪRAS...........................................................164.1. Predikāti.........................................................................................................................164.1.1. Glabāšana...................................................................................................................164.1.2. Izgūšana......................................................................................................................164.2. Fakti................................................................................................................................164.2.1. Glabāšana...................................................................................................................164.2.2. Izgūšana......................................................................................................................174.3. Likumi.............................................................................................................................174.3.1. Glabāšana...................................................................................................................174.3.2. Izgūšana......................................................................................................................174.4. Kopējā aina.....................................................................................................................18

DEDUKTĪVĀS DATU BĀZES REALIZĒŠANA.................................................................................195. TABULU IZVEIDE UN DATU IEVADE............................................................................19

5.1. Tabulu izveide................................................................................................................195.1.1. Jaunas darba virsmas izveide.....................................................................................195.1.2. Predikāti......................................................................................................................195.1.3. Fakti............................................................................................................................205.1.4. Likumi.........................................................................................................................205.1.5. Pārbaudes...................................................................................................................215.2. Datu ievade....................................................................................................................235.2.1. Predikāti......................................................................................................................235 . 2 . 2 . Fakti.....................................................................................................................235.2.3. Likumi.........................................................................................................................285.2.4. Pārbaudes...................................................................................................................28

6. LOĢISKĀ IZVEDUMA REALIZĒŠANA...........................................................................326.1. Procedūras predikātu un faktu izgūšanai...................................................................326.1.1. P_Saraksts...................................................................................................................326.1.1.1. Izveide......................................................................................................................326.1.1.2. Pārbaudes un piemēri.............................................................................................336.1.2. F_Saraksts...................................................................................................................346.1.2.1. Izveide......................................................................................................................346.1.2.2. Pārbaudes un piemēri.............................................................................................346.1.3. VAIC.............................................................................................................................36

3

6.1.3.1. Izveide......................................................................................................................366.1.3.2. Pārbaudes un piemēri.............................................................................................366.1.4. Kopējā aina.................................................................................................................386.2. Procedūru pakete..........................................................................................................386.2.1. Izveide.........................................................................................................................386.2.2. Pārbaudes un piemēri................................................................................................396.2.3. Kopējā aina.................................................................................................................40

7. IZVEDUMA PROCEDŪRAS...............................................................................................427.1. Procedūru paketes papildināšana (L2).......................................................................427.2. Pārbaudes un piemēri...................................................................................................447.3. Procedūru paketes papildināšana (L3).......................................................................457.4. Pārbaudes un piemēri...................................................................................................46

SECINĀJUMI...............................................................................................................................49IZMANTOTIE AVOTI.................................................................................................................52PIELIKUMI...................................................................................................................................53

1.pielikums. Uzdevuma struktūra............................................................................................53

4

UZDEVUMA NOSTĀDNE

o Definēt uzdevuma hierarhisko struktūru, attēlojot pakārtotības ideju (vismaz 4 līmeņi);o Definēt faktus;o Definēt likumus (vismaz 4 likumi);o Veikt grafisku definēto likumu un idejas atrisinājumu;o Faktu glabāšanas un izgūšanas iespējas;o Likumu glabāšanas un izgūšanas iespējas;o Veikt loģisko izveduma realizēšanu;o Attēlot loģiskā izveduma darbības rezultātus;o Izdarīt secinājumus.

5

DEDUKTĪVĀS DATU BĀZES DEFINĒŠANA1. UZVEDUMA PAKĀRTOTĪBAS IDEJA

1. Datu bāzes tehnoloģija un loģiskā programmēšana veidojās vienlaicīgi pagājušā gadsimta 70-ajos gados.

2. Datu bāzes tehnoloģijas un loģiskās programmēšanas integrēšanas rezultātā izveidojās jauna tipa sistēmas:

deduktīvās datu bāzes (loģiskās programmēšanas pielietošana datu bāzes datiem, lai veiktu dedukciju);

zināšanu bāzes vadības sistēmas (zināšanu (ne datu) apstrādes vadības sistēmas);datu bāzes ekspert-sistēma ( ekspertu zināšanu izmantošana, lietojot datu bāzes datus).3. Datu bāzes tehnoloģijas un loģiskās programmēšanas integrāciju sekmēja tas, ka

loģiskās programmēšanas valoda PROLOG tika izvēlēta par pamatu Japānas projektam “5-paaudzes skaitļotāju izstrāde”, kurā bija paredzēts iekļaut mākslīgā intelekta metodes jaunākajos skaitļotājos.

Deduktīvas datu bāzes pamatideja1. Datu bāzes pamatuzdevums ir datu glabāšanas un izgūšanas nodrošināšana. To parasti

nodrošina datu bāzes vadības sistēmas. 2. Loģiskajās programmēšanas valodās, piemēram Prolog vai Datalog, tiek nodrošināta

likumu un faktu izmantošana, bet datu glabāšanas un vadības uzdevumi netiek pilnvērtīgi atrisināti.

3. Risinājums varētu būt šo datu vadīšanas un izgūšanas likumu glabāšana lietojumprogrammā, taču arī šeit ir savi mīnusi:

- lietojumprogrammā ierakstītie likumi ir grūti saprotami;- šādu noteikumu iebūvēšana ir dārga, jo ir jāizstrādā sarežģītas lietojumprogrammas,

kuras vēlāk ir grūti modificējamas un vadāmas.4. Deduktīvās datu bāzes glabā ne tikai datus, bet arī datu vadīšanas likumus. Likumi

apstrādā sākumdatus un tiek iegūti jauni, atvasināti dati. Deduktīvā datu bāze ir loģiskās programmēšanas valodas apvienojums ar relāciju datu bāzi. Jēdziens deduktīvā datu bāze sevī ietver spēju izmantot loģisko programmēšanas valodu slēdzienu iegūšanā, balstoties uz datu bāzes datiem.

5. Loģikas izmantošanai datu bāzu sistēmās ir šādas priekšrocības:- loģikai ir labi definēta semantika;- datu iegūšanas likumu izmantošana ļauj aizvietot datu kolekciju ar vienu likumu;- loģikā ir risinājumi arī tādām relāciju datu bāzu problēmām kā tukšas vērtības vai

nedefinēti dati.

1.1. Problēmas vide

Par problēmas vidi savā darbā izvēlējos tenisa kortu ikmēneša organizēšanas un nomāšanas struktūru. Šī tēma man ir diezgan tuva, jo pati esmu savā laikā piestrādājusi kādā no valstij piederošajiem tenisa kortiem un zinu arī to darbības struktūru, kā arī orientējos korta nomāšanas lietās. Pie tam, pati spēlējot tenisu, spēju atšķirt arī spēlētāju līmeni. Veicot darbus DB2, biju izmantojusi līdzīgu problēmas vidi (saistībā ar tenisu – tenisa čempionāts), tāpēc nolēmu atvieglot savu uzdevumu un kārtējo reizi nedaudz pārveidot savu iepriekšējo darbu

6

skices un idejas, lai tās atbilstu darba uzdevuma nostādnei, kas, viennozīmīgi, atvieglo tieši darba radošāko daļu – uzdevuma izdomāšanu.

Tomēr, šī darba izpildei nāksies nedaudz vairāk piestrādāt pie esošajām skicēm, lai varētu realizēt hierarhisku struktūru. Līdz ar to katram tenisistam ir jāreklamē kāda sava sponsora prece. Tā pat ir zināms, ka tenisisti dalās divās čempionāta grupās ATP un WTA, attiecīgi vīriešu un sieviešu pasaules čempionāta tūres.

1.2. Hierarhiska uzdevuma definēšana

Kā jau minēju, tad šajā uzdevumā tiks aplūkots viens no lielākajiem Davis Cup turnīriem, kurš norisinās ik vasaru Francijā – ROLLAND GARROS. Šeit tiks attēlotas valstis, kuras piedalās turnīrā, kā arī katras valsts tenisisti. Protams, būs arī katra tenisista sponsori un arī preces, kuras tenisistam ir jāreklamē (skat. 1.2.1.att.). Labākā kvalitātē un lielākā izmērā uzdevuma pakārtotības idejas attēlu var aplūkot 1.pielikumā.

Var, piemēram, izvirzīt sekojošu dedukcijas uzdevumu: atrast divām dažādām kopīgo ražotāju jeb sponsoru, u.t.t., piemēram, sponsorus „Willson” un „Dunloop” vieno tas, ka tie abi ir noslēguši līgumus ar tenisistiem par viņu firmas raketes reklamēšanu. Vēl arī var izveidot algoritmu, kas atrod ceļu soli pa solim (norādot katru virsotni) no izvēlētās virsotnes līdz sākuma virsotnei, kurai nav priekšteču, u.t.t.

1.2.1.att. Uzdevuma pakārtotības ideja

7

2. FAKTU UN LIKUMU DEFINĒŠANA

2.1. Uzdevuma datu definējumi

Kas tad īsti ir deduktīvās datu bāzes? Deduktīvās datu bāzes ir datu bāzes, kurās bez datiem glabājas arī dažādi likumi, kas attiecināmi uz šiem datiem. Pielietojot dažādas pirmās kārtas loģikas teorijas no šiem liekumiem ir iespējams izveidot jaunus patiesus likumus. Ar deduktīvo datu bāzu palīdzību var risināt kopu un grafu teorijas uzdevumus, kā arī MI teorijas uzdevumus.

Pēc 1984 gada datiem deduktīvās datu bāzes var iedalīt divās apakšklasēs: noteiktajās (definite) nenoteiktajās (indefinite)

Noteiktajās deduktīvajās datu bāzēs datu bāze tiek definēta kā pirmās kārtas loģika teorija (T) kopā ar patiesuma ierobežojumiem. Teorijā T ir šādas trīs aksiomu klases:

problēmas vides ierobežojošā aksioma, unikālo vārdu aksiomas, vienādības aksiomas, pabeigtības aksiomas

elementārie fakti deduktīvie likumi (noteiktas funkciju brīvas klauzulas)

Nenoteiktās deduktīvās datu bāzes atšķiras ar trešo aksiomu klasi, proti, trešā aksiomu klase sastāv no noteiktām vai nenoteiktām funkciju brīvām klauzulām.

Deduktīvās datu bāzes pamatjēdzieni1. Deduktīvā datu bāze sastāv no divām daļām:1) sākumdati jeb fakti (facts). To sauc par paplašināto (extensional) datu bāzi.2) secinājumu iegūšanas likumi (inference rules), kas glabā zināšanas par to, kā var iegūt

no esošajiem faktiem jaunus faktus. Šādu komponentu sauc par papildināto (intensional) datu bāzi.

2. Deduktīvām datu bāzēm ir dažādas metodes, kas nosaka, kā paplašinātā datu bāze sadarbosies ar papildināto datu bāzi. Ir divas pamatmetodes:

1) homogēnā pieeja – tiek izmantota viena iebūvēta sistēma. Piemēram gan fakti, gan slēdzieni tiek glabāti un apstrādāti ar DATALOG vai Prolog;

2) heterogēnā pieeja – relāciju datu bāze tiek izmantota paplašinātai datu bāzei, bet loģiskās programmēšanas sistēma tiek izmantota papildinātai datu bāzei.

3. Homogēnās metodes trūkumi: faktu un likumu attēlošana pēc vienādiem principiem ir maldinoša, jo fakti un

likumi atšķiras kā izmērā, tā arī to vadības principos. Glabājot un apstrādājot tos atsevišķi, var iegūt labāku veiktspēju.

glabājot visus faktus un slēdzienus galvenajā atmiņā tiek ierobežots sistēmas zināšanu bāzes apjoms, kaut arī to daļēji risina virtuālās atmiņas tehnikas.

4. Heterogēnā metode atbalsta divas neatkarīgas apakšsistēmas – loģikas sistēmu un datu bāzu vadības sistēmu. Loģikas sistēmā glabājas noteikumi un tajā tiek izdarīti slēdzieni, bet datu bāzes sistēmā glabājas fakti. Loģikas sistēma nosūta DBVS slēdzienus un atpakaļ saņem risinājumus.

Deduktīvajā datu bāzē glabājas trīs veidu informācija: Dati(data) – mazākie nedalāmie informācijas gabaliņi tādā formā, ka tos var, saglabāt,

apstrādāt un pārsūtīt ar datu bāzes apstrādes funkcijām; Fakti (facts) – lietotāju datu korteži, kuri glabājas lietotāju noteiktās attiecībās, kas saista

dažādus datus kopā;

8

Likumi (rules) – noteikumi, kurus var izmantot lai izvadītu jaunus datus no esošiem faktiem un veidotu datu savstarpēju sasaisti.

Pirmā un otrā veida informācija skaidri raksturo reālās pasaules objektus. Tie ir tiešie dati, kurus lietotājs glabā datu bāzē. Trešā veida informācija kalpo deduktīvās datu bāzes realizēšanai, izpildot vaicājumus un izpildot jauno faktu izvadi, no jau esošiem faktiem. Fakts ir izteiksme, kura apraksta vienu noteiktu daļu vai objektu no apkārtējās pasaules. Tā kā fakts ir izteiksme, tad viņam vērtība ir TRUE. Fakti atšķiras no likumiem ar to, ka likumiem ir vērtība TRUE tikai tad, kad visām likuma mainīgām vērtībām ir vērtība TRUE. Lai glabātu faktus, lietderīgi to glabāšanai izmantot relāciju datu bāzi. Tajā ļoti vienkārši glabāt viena tipa datus, un tos var apstrādāt ar jau izstrādātām, drošām un ātrām metodēm.

2.2. Faktu definēšana

Struktūra ar tukšu ķermeni ir fakts. Faktam nav neviena mainīgā, bet tikai specifiskas vērtības. Tātad, būtu jāveic faktu tabulas izveidi(kurā glabāsies faktu identifikators, predikāta numurs, kurš izmantots fakta izveidē(atsauces lauks uz tabulu PREDIKATI), kā arī fakta atribūtu apraksts objektu kolonās).

Paši fakti būs izsecināti no iepriekš izveidotas uzdevuma hierarhiskās struktūras: TURNIRA_VALSTIS(Turnirs,Valsts); VALSTS_TENISISTS(Valsts,Tenisists); TENISISTA_SPONSORS(Tenisists,Sponsors); REKLAMETA_PRECE(Sponsors,Prece).

Tā pat, kā papildinājums nāks to dažu to pašu predikātu sadalījums, tikai otrādā secībā: TENISISTA_TAUTIBA(Tenisists,Valsts); RAZHOTAJA_LIGUMS(Sponsors,Tenisists).

Tagad katram no tikko definētajiem faktiem mēģināšu parādīt pāris piemērus:

TURNIRA_VALSTIS(Turnirs,Valsts):TURNIRA_VALSTS(‘R_G’,’Krievija’);TURNIRA_VALSTS(‘R_G’,’ASV’);TURNIRA_VALSTS(‘R_G’,’Serbija’).

Šeit valstis tā pat būs vien tikai trīs, jo ar tām pilnībā pietiks uzdevuma realizēšanai.

VALSTS_TENISISTI(Valsts,Tenisists):VALSTS_TENISISTS(‘Krievija’,’Sharapova’);VALSTS_TENISISTS(‘Krievija’,’Davydenko’);VALSTS_TENISISTS(‘Krievija’,’Dementieva’);VALSTS_TENISISTS(‘Krievija’,’Zvonareva’);VALSTS_TENISISTS(‘ASV’,’Roddik’);VALSTS_TENISISTS(‘ASV’,’Willians’);VALSTS_TENISISTS(‘Serbija’,’Djokovic’);VALSTS_TENISISTS(‘Serbija’,’Ivanovich’);VALSTS_TENISISTS(‘Serbija’,’Jankovich’).

Tas arī ir viss. Tālāk jau neizvadīšu visus katra predikāta faktus, jo to skaits jau būs pārāk liels. To mēģināšu parādīt vēlāk, kad veikšu datu ievadi tabulās.

9

TENISISTA_SPONSORS(Tenisists,Sponsors):TENISISTA_SPONSORS(‘Sharapova’,’Nike’);TENISISTA_SPONSORS(‘Sharapova’,’Lacoste’);TENISISTA_SPONSORS(‘Sharapova’,’Fila’);TENISISTA_SPONSORS(‘Davydenko’,’Willson’);TENISISTA_SPONSORS(‘Dementieva’,’Adidas’);TENISISTA_SPONSORS(‘Dementieva’,’Reebok’);TENISISTA_SPONSORS(‘Zvonareva’,’HP’);TENISISTA_SPONSORS(‘Roddik’,’CK’);.....

REKLAMETA_PRECE(Sponsors,Prece):REKLAMETA_PRECE(‘Nike’,’Terpi’);REKLAMETA_PRECE(‘Lacoste’,’Smarzhas’);REKLAMETA_PRECE(‘Lacoste’,’Apavi’);REKLAMETA_PRECE(‘Fila’,’Jakas’);REKLAMETA_PRECE(‘Fila’,’Somas’);REKLAMETA_PRECE(‘Willson’,’Rakete’);REKLAMETA_PRECE(‘Adidas’,’Jakas’);REKLAMETA_PRECE(‘Reebok’,’Terpi’);REKLAMETA_PRECE(‘Reebok’,’Apavi’);.....

TENISISTA_TAUTIBA(Tenisists,Valsts):TENISISTA_TAUTIBA(‘Sharapova’,’Krievija’);TENISISTA_TAUTIBA (‘Davydenko’,’Krievija’);TENISISTA_TAUTIBA (‘Dementieva’,’Krievija’);TENISISTA_TAUTIBA (‘Zvonareva’,’Krievija’);TENISISTA_TAUTIBA (‘Roddik’,’ASV’);TENISISTA_TAUTIBA (‘Williams’,’ASV’)........

RAZHOTAJA_LIGUMS(Sponsors,Tenisists).RAZHOTAJA_LIGUMS(‘Nike’,’ Sharapova’);RAZHOTAJA_LIGUMS (‘Lacoste’,’ Sharapova’);RAZHOTAJA_LIGUMS (‘Fila’,’ Sharapova’);RAZHOTAJA_LIGUMS (‘Willson’,’ Davydenko’);RAZHOTAJA_LIGUMS (‘Adidas’,’ Dementieva’).......

2.3. Likumu definējums

Struktūra ar galvu un ķermeni, ir likums. Piemēram: TURNIRA_TENISISTS(A,B) :- TURNIRA_VALSTS(A,C), VALSTS_TENISISTS(C,B).Šeit arī būs jāveido tabula, kurā glabāsies likuma identifikators, tā nosaukums, pieraksta

veids, un izmantotie predikāti (to identifikatori, atsauces uz tabulu PREDIKATI), no kā ir veidojies likums.

Tagad pamēģināšu definēt vairāku līmeņu likumus, ko vēlāk izmantošu vaicājumos:

10

1) -> likums sniegs informāciju par to, kurš sponsors ir noslēdzis līgumu ar vienas vai otras valsts tenisistiem:

Valsts_sponsors(A,B) :- Valsts_tenisists(A,C),Tenisista_sponsors(C,B)

2) -> likums sniegs informāciju par to, kurai tenisisti piedalās konkrētajā turnīrā: Turnira_tenisists(A,B) :- Turnira_valsts(A,C), Valsts_tenisists(C,B)

3) -> likums sniegs informāciju par to, kuras valsts dalībnieku sponsorē turnīra laikā viena vai otra firma:

Sponsoreta_valsts(A,B) :- Razhotaja_ligums(A,C), Tenisista_tautiba(C,B)

4) -> likums sniegs informāciju par to, kura prece ir jāreklamē vienam vai otram tenisistam turnīra laikā:

Tenisista_prece(A,B) :- Tenisista_sponsors(A,C), Teklameta_prece(C,B)

Domāju, ka ar šiem likumiem pagaidām pietiks, līdz ar to, varu pamēģināt attēlot definētos likumus grafiskā veidā.

3. GRAFISKAIS LIKUMU ATRISINĀJUMS

Izmantojot tikko aprakstītos un definētos likumus, kā arī pirmīt izveidoto struktūru, mēģināsim attēlot katra likuma rezultātus.

3.1. Likums „Valsts_ Sponsors”

Šis likums uzdod meklēšanu no izveidotās struktūras 2 līmeņa līdz pat ceturtajam. Tātad, pamēģināsim noskaidrot, kuru preci reklamē kāds no, piemēram, ASV valsts pārstāvjiem.

Vaicājumam būtu jāizskatās sekojoši:? Valsts_Sponsors(‘ASV’, B)

Mēģināsim atcerēties likumu:Valsts_sponsors(A,B) :- Valsts_tenisists(A,C),Tenisista_sponsors(C,B)Tātad, parametrs „A” mums ir zināms, tas ir „ASV”.Nākošajā solī ir jāmeklē kuri tenisisti pieder valstij „ASV”, tādā veidā atrodot parametru

„B” (skat. 3.1.1.att.).

3.1.1.att. Parametra „B” atrašana

Šeit noskaidrojas, ka zem ASV karoga spēlē Andy Roddik un Serena Williams. Visbeidzot, kad ir atrasts „B” parametrs, mēs meklējam nākošo parametru „C”, tādā veidā noskaidrojot

11

katra tenisista sponsoru un arī iegūstot gala atbildi par to, kuras firmas sponsorē ASV turnīra laikā (skat. 3.1.2.att.).

3.1.2.att. Parametra „C” atrašana

Līdz ar to tagad varam dot atbildi uz vaicājumu:? Valsts_Sponsors(‘ASV’, B)Atbilde CK un Puma

3.2. Likums ”Turnira_Tenisists”

Šis likums uzdod meklēšanu no izveidotās struktūras 1 līmeņa līdz trešajam. Tātad, pamēģināsim noskaidrot, kuri tenisisti piedalās Rolland Garros (R_G) turnīrā.

Vaicājumam būtu jāizskatās sekojoši:? Turnira_tenisists(‘R_G’, B)

Mēģināsim atcerēties likumu:Turnira_tenisists(A,B) :- Turnira_valsts(A,C), Valsts_tenisists(C,B)

Tātad, parametrs „A” mums ir zināms, tas ir „R_G”.Nākošajā solī ir jāmeklē kuras valstis piedalās turnīrā „R_G”, tādā veidā atrodot

parametru „B” (skat. 3.2.1.att.).

3.2.1.att. Parametra „B” atrašana

Šeit noskaidrojas, ka zem Rolland Garros turnīrā piedalās Krievija, ASV un Serbija. Pēc tam, kad ir atrasts „B” parametrs, mēs visbeidzot meklējam pēdējo parametru - „C”, tādā veidā noskaidrojot katrs valsts tenisistus un līdz ar to arī turnīra dalībniekus (skat. 3.2.2.att.).

12

3.2.2.att. Parametra „C” atrašana

Līdz ar to tagad varam dot atbildi uz vaicājumu:? Turnira_tenisists(‘R_G’, B)Atbilde Sharapova, Davydenko, Dementieva, Zvonareva, Roddick, Williams,

Djocovic, Ivanovich un Jankovich

3.3. Likums „Sponsoreta_Valsts”

Šis likums uzdod meklēšanu no izveidotās struktūras 4 līmeņa līdz otrajam. Tātad, pamēģināsim noskaidrot, kuras valsts tenisistu sponsorē, piemēram, firma Reebok.

Vaicājumam būtu jāizskatās sekojoši:? Sponsoreta_Valsts(‘Reebok, B)

Mēģināsim atcerēties likumu:Sponsoreta_valsts(A,B) :- Razhotaja_ligums(A,C), Tenisista_tautiba(C,B)

Tātad, parametrs „A” mums ir zināms, tas ir „Reebok”. Tālāk ir jāmeklē tas, ar kuru no tenisistiem firma REEBOK ir noslēgusi līgumu, tādā veidā

atrodot parametru „B” (skat. 3.3.1.att.).

3.3.1.att. Parametra „B” atrašana

Šeit noskaidrojas, ka firma REEBOK sponsorē tikai vienu tenisistu – Jeļenu Dementievu. Līdz ar to, kad ir atrasts „B” parametrs, mēs meklējam pēdējo parametru „C”, noskaidrojot to, kuras tautības ir šī tenisiste (skat. 3.3.2.att.).

13

3.3.2.att. Tenisistu atrašana

Līdz ar to tagad varam dot atbildi uz vaicājumu:? Sponsoreta_Valsts(‘Reebok, B)Atbilde Krievija

3.4. Likums „Tenisista_Prece”

Šis likums uzdod meklēšanu no izveidotās struktūras 3 līmeņa līdz piektajam. Tātad, pamēģināsim noskaidrot, kuru preci ir jāreklamē, piemēram, Jeļenai Jankovičai, noslēgto līgumu ietvaros.

Vaicājumam būtu jāizskatās sekojoši:? Tenisista_Prece(‘Krievija, B)

Mēģināsim atcerēties likumu:Tenisista_prece(A,B) :- Tenisista_sponsors(A,C), Teklameta_prece(C,B)

Tātad, parametrs „A” mums ir zināms, tas ir „Jankovich”. Tālāk ir jāmeklē kuri tenisisti sponsori ir noslēguši ar viņu līgumu uz preces reklāmu, tādā

veidā atrodot parametru „B” (skat. 3.4.1.att.).

3.4.1.att. Parametra „B” atrašana

14

Šeit noskaidrojas, ka Jankoviča ir noslēgusi līgumu ar tādiem uzņēmumiem kā Everest un Rolex. Tagad, kad ir atrasts „B” parametrs, notiek arī pēdējā meklēšana – parametra „C”, kurš arī noteikt to, kuras preces Jankovičai ir jāreklamē, atbilstoši līgumiem ar Everest un Rolex (skat. 3.4.2.att.).

3.4.2.att. Tenisistu atrašana

Līdz ar to tagad varam dot atbildi uz vaicājumu:? Tenisista_Prece(‘Krievija, B)Atbilde Ūdens un Pulkstenis.

Tagad, kad ir aptuveni definēti fakti, likumi, ir izveidota grafiskā pakārtotības idejas un likumu atrisināšana, var mēģināt sākt definēt to, kādā veidā tiks glabāti fakti un likumi deduktīvajā datu bāzē.

15

4. GLABĀŠANAS UN IZGŪŠANAS STRUKTŪRAS

4.1. Predikāti

4.1.1. Glabāšana

Pirms veikšu faktu glabāšanas struktūras definējumus, sākumā būtu jāizveido predikātu tabula - PREDIKATI, kurā glabāsies:

predikāta identifikācijas numurs – PRED_NR; nosaukums – P_NOS; argumentu skaits – P_ARG; argumentu apraksts – ATR_A un ATR_B.

Šie parametri pēc tam tiks izmantoti kā šabloni pie faktu un likumu izveides. Bet, pirms izveidošu predikātu tabulu, būs jāizveido tips PR_T kā objekts, kurā būs

identifikācijas numurs un atribūts. Šis tips kalpos kā tips predikātu tabulā parametriem argumentu apraksts. Predikātu tabulas paredzamo struktūru var aplūkot 4.1.1.1.attēlā.

4.1.1.1.att. Predikātu tabulas struktūra

4.1.2. Izgūšana

Predikātu izgūšanai, izveidošu procedūru P_SARAKSTS, kas izvadīs izveidotos predikātus atomu sintaksē, kas ir uzskatāmāka salīdzinājumā ar datu tabulu, kurai ir objektu kolonas.

Šajā procedūrā tiks izmantots kursors, lai būtu pieejami dati no predikātu tabulas, kā arī cikls, kurā tiks apstrādāta katra tabulas rinda (katrs rindas lauks tiks piešķirts noteiktam mainīgajam), un attiecīgi arī izvadīta.

4.2. Fakti

4.2.1. Glabāšana

Struktūra ar tukšu ķermeni ir fakts. Faktam nav neviena mainīgā, bet tikai specifiskas vērtības. Tātad, arī šeit būs jāizveido faktu tabula – FAKTI.

Tabulā glabāsies: faktu identifikators – FAKT_NR; predikāta numurs (tas, kurš tiks izmantots fakta izveidē - atsauces lauks uz tabulu

PREDIKATI) – PRED_NR; fakta atribūtu apraksts objektu kolonas – ATR_A, ATR_B.

16

Objektu kolonas tipi būs tādi paši, kā predikātu tabulai, tāpēc izmantošu to pašu PR_T objektu. Faktu tabulas paredzamo struktūru var aplūkot 4.2.1.1.attēlā.

4.2.1.1.att. Faktu tabulas struktūra

4.2.2. Izgūšana

Datu izgūšanai no faktu tabulas, izveidosim procedūru F_SARAKSTS, kas izvadīs datu tabulā ievadītos datus atomu veidolā. Procedūra būs nedaudz līdzīga tai, kura bija izveidota predikātu tabulas datu izgūšanai.

4.3. Likumi

4.3.1. Glabāšana

Struktūra ar galvu un ķermeni, ir likums. Piemēram: TURNIRA_TENISISTS(A,B) :- TURNIRA_VALSTS(A,C), VALSTS_TENISISTS(C,B).

Arī šeit izveidošu tabulu LIKUMI, kurā glabāsies: likuma identifikators – LIK_NR; tā nosaukums – LIK_NOS; pieraksta veids – LIK_TEKSTS; izmantotie predikāti (to identifikatori, atsauces uz tabulu PREDIKATI - no kā

veidojies likums) – L_PRED_A, L_PRED_B.Likumu tabulas paredzamo struktūru var aplūkot 4.3.1.1.attēlā.

4.3.1.1.att. Likumu tabulas struktūra

4.3.2. Izgūšana

Pēc tam, likumu izgūšanai būs jāizveido procedūra, kas izvadīs likumus Horna izteiksmes veidā, kas katrā ziņa ir pārskatāmāka un vieglāk izprotamāka.

Likums VALSTS_PRECE izmanto faktus: Valsts_tenisists, Tenisista_sponsors un Reklameta_prece.

17

Šie fakti, ko izmanto likums, tiks attēloti arī likumu tabulā laukā L_TEKSTS.Bet, šī procedūra tiks izveidota procedūru paketē LIK_OUT, jo katram likumam būs

jāizveido sava procedūra.Pēc tam, kad tiks izveidota pakete, varēs izveidot arī pašu procedūras ķermeni

procedūru paketē, iekļaujot tajā procedūru OUT. Procedūras pirmais parametrs norādīs to, kurš likums tiks izmantots(likuma identifikators), pārējie parametri, savukārt, norādīs likuma vērtības. Pēc tam, kad būs jāveic likumu izvade, katram likumam būs jānorāda savādāki parametri. No jau esošajiem likumiem un pieejamajiem faktiem ir iespējams atvasināt jaunus likumus, kurus attiecīgi arī jāpiereģistrē tabulā likumi. Pavisam kopumā tika izveidoti četri likumi.

4.4. Kopējā aina

Veicot definējumus, katra tabulā bija norādītas atsauces uz vienu vai otru tabulu, taču lietderīgi būtu arī apskatīties kā tas viss izskatītos kopumā (skat. 4.4.1.att.).

4.4.1.att. Izveidojamās datu bāzes struktūra

Tagad, kad ir definēts tas, kas būtu jāizveido, var sākt daru bāzes realizēšanu.

18

DEDUKTĪVĀS DATU BĀZES REALIZĒŠANA5. TABULU IZVEIDE UN DATU IEVADE

5.1. Tabulu izveide

5.1.1. Jaunas darba virsmas izveide

Strādājot pie trešā praktiskā darba, atkal nolēmu izveidot jaunu darba virsmu un jaunu lietotāju, lai, izgūstot metadatus, datu bāzē neattēlotos iepriekš izveidotās tabulas. Tātad, izveidojam lietotāju „LAB3”, ar paroli „vika”, kā arī piešķiram lietotajam visas privilēģijas (skat. 5.1.1.1.att.).

5.1.1.1.att. Jauna lietotāja izveide

Pēc tam izveidojam jaunu darba virsmu DED_DB, ko ievietojam mapē D:\oracle1\product\10.2.0\DED_DB\DED_db.tbs. Pēc tam piešķiram izveidotajai darba videi lietotāju pēc noklusējuma (skat. 5.1.1.2.att.).

5.1.1.2.att. Jaunas darba virsmas izveide

5.1.2. Predikāti

Pirms veikšu faktu glabāšanas struktūras definējumus, sākumā būtu jāizveido predikātu tabula - PREDIKATI, kurā glabāsies predikāta identifikācijas numurs – PRED_NR, nosaukums – P_NOS, argumentu skaits – P_ARG un argumentu apraksts – ATR_A un ATR_B.

Šie parametri pēc tam tiks izmantoti kā šabloni pie faktu un likumu izveides.

19

Bet, pirms izveidošu predikātu tabulu, būs jāizveido tips PR_T kā objekts, kurā būs identifikācijas numurs un atribūts. Šis tips kalpos kā tips predikātu tabulā parametriem argumentu apraksts (skat. 5.1.2.1.att.).

5.1.2.1.att. Objektu tipa PR_T izveide

Tagad var izveidot arī pašu tabulu ar tikko izveidotā objektu tipa izmantošanu (skat. 5.1.2.2.att.).

5.1.2.2.att. Tabulas PREDIKATI izveidošana

5.1.3. Fakti

Struktūra ar tukšu ķermeni ir fakts. Faktam nav neviena mainīgā, bet tikai specifiskas vērtības. Tātad, arī šeit būs jāizveido faktu tabula – FAKTI. Tabulā glabāsies faktu identifikators – FAKT_NR, predikāta numurs (tas, kurš tiks izmantots fakta izveidē - atsauces lauks uz tabulu PREDIKATI) – PRED_NR un fakta atribūtu apraksts objektu kolonas – ATR_A, ATR_B (skat. 5.1.3.1.att.).

Objektu kolonas tipi būs tādi paši, kā predikātu tabulai, tāpēc izmantošu to pašu PR_T objektu.

5.1.3.1.att. Tabulas FAKTI izveidošana

5.1.4. Likumi

Struktūra ar galvu un ķermeni, ir likums. Piemēram: TURNIRA_TENISISTS(A,B) :- TURNIRA_VALSTS(A,C), VALSTS_TENISISTS(C,B).

Arī šeit izveidošu tabulu LIKUMI, kurā glabāsies likuma identifikators – LIK_NR, tā nosaukums – LIK_NOS, pieraksta veids – LIK_TEKSTS un izmantotie predikāti (to identifikatori, atsauces uz tabulu PREDIKATI - no kā veidojies likums) – L_PRED_A, L_PRED_B, L_PRED_C skat. 5.1.4.1.att.).

20

5.1.4.1.att. Tabulas LIKUMI izveidošana

5.1.5. Pārbaudes

Tagad, kad ir izveidotas visas laika sērijas, varam mēģināt ar vaicājuma palīdzību pārbaudīt tabulu esamību datubāzē (skat. 5.1.5.1.att.).

5.1.5.1..att. Tabulu pārbaude datubāzē (1)

Būtu jāpārbauda arī to, vai datu bāzē ir izveidotais tipa PR_T (skat.5.1.5.2.att.).

5.1.5.2.att. Tabulu pārbaude datubāzē (2)

Pārbaudi varam veikt arī ar TOAD FOR ORACLE 9.5 PORTABLE (skat. 5.1.5.3.att.).

5.1.5.3.att. Tabulu pārbaude datubāzē (3)

Ar tās pašas programmatūras palīdzību varam pārbaudīt katras tabulas saturu (skat. 5.1.5.4., 5.1.5.5., 5.1.5.6.att.).

21

5.1.5.4.att. Tabulu pārbaude datubāzē (4) – objektu tabula PREDIKATI

5.1.5.5.att. Tabulu pārbaude datubāzē (5) – objektu tabula FAKTI

5.1.5.6.att. Tabulu pārbaude datubāzē (6) – objektu tabula LIKUMI

Ļoti nozīmīgi būtu arī pārbaudīt tabulu patieso sasaisti datu bāzē, vai tā ir izveidojusies tāda, kādu to biju paredzējusi (skat. 5.1.5.7.att.).

5.1.5.7.att. Tabulu sasaiste datu bāzē

Kā redzam, tad sasaiste patiešām ir tāda, kādu to biju paredzējusi.Tagad ir skaidri redzams, kas ir iekļaut datu bāzē, pēc veiktajām pārbaudēm. Līdz ar to, var

sākt datu ievadi datu bāzē.

22

5.2. Datu ievade

5.2.1. Predikāti

Datu ievadi veikšu ar parasto INSERT INTO funkciju. Datu ievade tabulā PREDIKATI ir apskatāma 5.2.1.1.attēlā.

5.2.1.1.att. Tabulas PREDIKATI aizpildīšana

5.2.2. Fakti

Arī šeit datu ievadi veikšu ar parasto INSERT INTO funkciju. Datu ievade tabulā FAKTI ir attēlota pa soļiem, ievietojot datus ar atsaucēm uz predikāta numuru (skat. 5.2.2.1. – 5.2.2.6.att.).

5.2.2.1.att. Tabulas FAKTI aizpildīšana, predikāts – Turnira_Valsts

23

5.2.2.2.att. Tabulas FAKTI aizpildīšana, predikāts – Valsts_Tenisists

5.2.2.3.att. Tabulas FAKTI aizpildīšana, predikāts – Tenisista_Sponsors

24

5.2.2.4.att. Tabulas FAKTI aizpildīšana, predikāts – Reklameta_Prece

25

5.2.2.5.att. Tabulas FAKTI aizpildīšana, predikāts – Tenisista_tautība

26

5.2.2.6.att. Tabulas FAKTI aizpildīšana, predikāts – Razhotaja_Ligums

27

5.2.3. Likumi

Tabulā glabājas likuma identifikators, tā nosaukums, pieraksta veids, un izmantotie predikāti (to identifikatori, atsauces uz tabulu PREDIKATI)no kā veidojies likums. Tagad ievadīsim likumus tabulā (skat. 5.2.3.1.att.).

5.2.3.1.att. Tabulas LIKUMI aizpildīšana

5.2.4. Pārbaudes

Lai pārbaudītu datu esamību tabulās, izpildīsim parastus vaicājumus, tādā veidā aplūkojot tabulu saturu.

Pirmā tabula ko pārbaudīsim būs tabula PREDIKATI (skat. 5.2.4.1.att.). Šeit mēs pārbaudīsim uzreiz arī vizuālo izskatu tabulai, pieprasot datus arī no objekta.

5.2.4.1.att. Tabulas PREDIKATI dati

28

Tagad varam pārbaudīt arī otro tabulu FAKTI, tā pat kā to darījām ar pirmās tabulas pārbaudi (skat. 5.2.4.2.att.). Šeit neattēlosim visus 55 faktus, bet tikai sākuma daļu, jo visi vakti viena SQL*Plus logā neietilpst.

5.2.4.2.att. Tabulas FAKTI dati

Un kā pēdējo varam pārbaudīt arī tabulas LIKUMI saturu (skat. 5.2.4.3.att.).

29

5.2.4.3.att. Tabulas LIKUMI dati

Visbeidzot, varam aplūkot, kas mums ir izveidojies ar TOAD FOR ORACLE 9.5 PORTABLE programmatūru (skat. 5.2.4.4., 5.2.4.5., 5.2.4.6.att.).

5.2.4.4.att. Tabulas PREDIKATI saturs

30

5.2.4.5.att. Tabulas FAKTI saturs

5.2.4.6.att. Tabulas LIKUMI saturs

Tagad, kad dati ir ievadīti un pārbaudīti, varam sākt veikt dažādas operācijas ar datu bāzi – izveidot procedūras, kas operēs ar faktiem, tādā veidā realizējot loģiskā izveduma realizēšanu, kā arī sniegt dažus piemērus par izveidoto procedūru darbību.

31

6. LOĢISKĀ IZVEDUMA REALIZĒŠANA

Loģiskās programmēšanas valodas PROLOG pamatjēdzieni1. Attīstoties dažādām teorēmu pierādīšanas metodēm, izveidojās loģiskās

programmēšanas valoda PROLOG (PROgramming LOGic). Tās autori bija Robert Kowalski (Edinburga), Maarten van Emden (Edinburga), Alain Colmerauer (Marseļa).

2. Valoda PROLOG ir programmēšanas valoda rakstzīmju tipa datu apstrādei. 3. Loģiskās programmēšanas valoda izmanto sekojošus jēdzienus:

1) atoms – burtu un ciparu simbolu kopa, kas sākas ar mazo burtu: mašīna, grāmata, jānis;

2) konstante – atoms vai skaitlis: jānis, 123;3) mainīgais - burtu un ciparu simbolu kopa, kas sākas ar lielo burtu: X, Y, Main_1

(mainīgais ar apzīmējumu _ norāda uz jebkuru mainīgo);4) funktors – 5) terms – atomi un mainīgie;6) dizjunkts – literāļu kopa, ir trīs tipu dizjunkti: - likums – sastāv no galvas un ķermeņa: māte( X, Y) : - persona( X, , sieviete), vecāki( X, Y).- fakts – sastāv no viena literāļa: vecāki( Rasma, Pēteris).- mērķis – dizjunkts bez galvas daļas, tas ir vaicājums: ? – vecāki( X, Jānis). 7) PROLOG-a mehānisms – izveduma mašīna

Deduktīvo datu bāzu un loģisko programmēšanas sistēmu atšķirībasGalvenokārt tās ir saistītas ar to, ka deduktīvās datu bāzes uzglabā un vada lielus

komplicētu datu apjomus, kamēr loģikas lietojumprogramma atbalsta programmēšanu un tai nav vajadzīgas iebūvētas speciālas tehnikas datu modelēšanai un vadīšanai. Izdala šādas galvenās atšķirības starp abiem sistēmu tipiem:

1. Deduktīva datu bāze parasti glabā vairāk faktus nekā likumus;2. Apgalvojumi deduktīvā datu bāzē dalās kā paplašinātie un papildinātie;3. Deduktīvo datu bāzu valodas, piemēram DATALOG ir bez funkcijām, vai atbalsta

tikai dažas, ļoti specifiskas funkcijas. Loģiskās programmēšanas valodas, tieši pretēji, ir pārblīvētas ar funkcijām;

4. DDB uztur ierobežojumu aprakstu;5. DDB tiek meklēti visi risinājumi, bet loģiskajā programmēšanā tikai viens risinājums

no visiem.

6.1. Procedūras predikātu un faktu izgūšanai

6.1.1. P_Saraksts

6.1.1.1. Izveide

Tagad būs jāizveido procedūra PRED_LIST, kas izvadīs izveidotos predikātus atomu sintaksē, kas ir uzskatāmāka salīdzinājumā ar datu tabulu, kurai ir objektu kolonas (skat. 6.1.1.1.1.att.).

32

6.1.1.1.1.att. Procedūras P_SARAKSTS izveidošana

Šajā procedūrā tiek izmantots kursors, lai būtu pieejami dati no predikātu tabulas, kā arī cikls, kurā tiek apstrādāta katra tabulas rinda(katrs rindas lauks tiek piešķirts noteiktam mainīgajam), un attiecīgi arī izvadīta.

6.1.1.2. Pārbaudes un piemēri

Tagad pamēģināsim apskatīties, ko izvada tikko izveidotā procedūra. Bet sākumā SQL*Plus būtu jāpadod komanda, lai tiktu izvadīti procedūras darbības

rezultāti, savādāk tiks izvadīts tikai ziņojums, ka PL/SQL procedūra ir veiksmīgi izpildīta, bet nebūs redzami nekādi rezultāti (skat. 6.1.1.2.1.att.).

6.1.1.2.1.att. Procedūru darbības rezultātu izvades nosacījuma ievade

Un nu tagad beidzot varam mēģināt apskatīties procedūras darbības rezultātus un apskatīties vai izveidotā procedūra izvada patiešām loģisku rezultātu un mēs varēsim aplūkot visu predikātu sarakstu, pieprasot procedūras izpildi (skat. 6.1.1.2.2.att.).

6.1.1.2.2.att. Procedūras P_SARAKSTS darbības rezultāti

33

Varam redzēt, ka procedūra patiešām strādā korekti un izvada vēlamo rezultātu.

6.1.2. F_Saraksts

6.1.2.1. Izveide

Faktu saraksta aplūkošanai izveidosim gandrīz līdzīgu procedūru, kas arī izvadīs datu tabulā ievadītos datus atomu veidolā (skat. 6.1.2.1.1.att.).

6.1.2.1.1.att. Procedūras F_SARAKSTS izveidošana

6.1.2.2. Pārbaudes un piemēri

Arī tagad varam mēģināt apskatīties procedūras darbības rezultātus un apskatīties vai izveidotā procedūra izvada patiešām loģisku rezultātu un mēs varēsim aplūkot visu faktu sarakstu, pieprasot procedūras izpildi (skat. 6.1.2.2.1.att.).

34

6.1.2.2.1.att. Procedūras F_SARAKSTS darbības rezultāti

Varam redzēt, ka procedūra darbojas pareizi un loģiski. Protams, neattēloju visus ievadītos faktus, jo saraksts ir diezgan liels (69 ieraksti), kas neietilpst vienā ekrānā.

35

6.1.3. VAIC

6.1.3.1. Izveide

Loģiskajā programmēšanā vaicājums tiek sasniegts, izmantojot loģisko secinājumu ķēdes, kas izmanto likumus un faktisko informāciju tam, lai pierādītu apgalvojuma patiesību vai nepatiesību. Datu bāzu sistēmās vaicājums tiek apstrādāts, lai spētu izgūt no lielā glabājamo datu apjoma piemērotāko informāciju.

Savā darbā realizēšu vaicājumus tikai priekš faktiem, jo izveidotajiem likumiem pēc būtības šie vaicājumi būtu līdzīgi (un rezultāti identiski) tikai mainītos procedūras parametru skaits. Darba tālākajā gaitā izveidošu procedūru ar kuras palīdzību realizēšu deduktīvos vaicājumus (skat. 6.1.3.1.1.att.).

6.1.3.1.1.att. Procedūras VAIC izveidošana

Procedūrā tika izmantots viens kursors, kurā tika ielādēti dati no tabulas FAKTI, un kā jau minēju - deduktīvais vaicājums izvada rezultātus par nākamo koka līmeni, tādējādi procedūrai ir viens parametrs, kas ir specifiska koka virsotne, kādā noteiktā slānī, un deduktīvā vaicājuma rezultātā tiek izvadītas šīs koka virsotnes pēcteči.

6.1.3.2. Pārbaudes un piemēri

Tagad veiksim dažus deduktīvo vaicājumu izpildes piemērus. Šim nolūkam mums būs jāpadod SQL*Plus komanda par procedūras izpildi, un arī jāpadod procedūrai viens parametrs – virsotne, kuras pēcteči tiks meklēti. Bez tam, tie var būt vairāki, kā arī tēmēti uz koka leju un augšu (atkarībā no predikāta).

Mēģināsim secīgi izvadīt piemērus par katru struktūras līmeni.Sāksim ar koka 3 līmeni, atrodot pēctečus tenisistam Endijam Roddikam (skat.

6.1.3.2.1.att.).

36

6.1.3.2.1.att. Visu Roddika sponsoru izvade

Tagad pāriesim pie koka ceturtā līmeņa un mēģināsim izvadīt visus Lacoste firmas preces (virzoties uz koka apakšu, kā arī visus tenisistus, ar kuriem Lacoste ir noslēgusi līgumu (atkarībā no predikātiem (skat. 6.1.3.2.2.att.).

6.1.3.2.2.att. Visu Lacoste preču un līgumtenisistu izvade

Pāriesim arī pie otrā līmeņa, izvadot visus Krievijas valsts tenisistus (skat. 6.1.3.2.3.att.).

6.1.3.2.3.att. Visu Krievijas tenisistu izvade

Pamēģināsim arī sākt ar pirmo līmeni un atrast tās valstis, kuras piedalās Rolland Garros turnīrā (skat. 6.1.3.2.4.att.).

6.1.3.2.4.att. Visu turnīra dalībvalstu izvade

37

6.1.4. Kopējā aina

Ar programmas TOAD FOR ORACLE 9.5 ir iespējams aplūkot arī izveidotās procedūras izvēloties no izkrītošā saraksta procedūras. Šeit ir iespējams aplūkot to sarakstu un arī procedūras tekstu, izmantojamās tabulas u.tml (skat. 6.1.4.1.att.).

6.1.4.1.att. Visu procedūru esamība datu bāzē

6.2. Procedūru pakete

6.2.1. Izveide

Tagad izveidošu procedūru, kas izvadīs likumus Horna izteiksmes veidā, kas katrā ziņa ir pārskatāmāka un vieglāk izprotama. Likums VALSTS_SPONSORS izmanto faktus VALSTS_TENISISTS un TENISISTA_SPONSORS, kas arī redzams likumu tabulā laukā L_TEKSTS (likuma pieraksts). Šī procedūra tiks izveidota procedūru paketē, jo savādāk katram likumam būs jāizveido sava procedūra (skat. 6.2.1.1.att.).

6.2.1.1.att. Procedūru paketes LIK_OUT izveide

Tagad izveidošu arī pašas procedūras ķermeni procedūru paketē. Procedūras pirmais parametrs norādīs to, kurš likums tiks izmantots (likuma identifikators), pārējie parametri, savukārt, norādīs likuma vērtības (skat. 6.2.1.2.att.).

38

6.2.1.1.att. Procedūru paketes LIK_OUT ķermeņa izveide

6.2.2. Pārbaudes un piemēri

Tagad veiksim procedūras izpildi. Šeit mēs padosim likuma numuru, uz kuru atsaucamies, pirmo un otro parametru. Procedūrai būtu jāizvada ceļš no pirmā līdz otrajam parametram.

Sāksim, piemēram, ar pašu pirmo likumu, noskaidrojot ceļu likumam VALSTS_SPONSORS no virsotnes „Krievija” līdz virsotnei „Nike”. Šeit, procedūras darbības rezultātā, mums būtu jāierauga arī starpposms – tenisists, kurš spēlē par Krieviju un ir noslēdzis līgumu ar firmu Nike (skat. 6.2.2.1.att.).

39

6.2.2.1.att. Likuma VALSTS_SPONSORS izpilde

Kā redzams, tad starpposmā ir redzams, ka Tenisists, kurš spēlē par Krieviju un ir noslēdzis līgumu ar firmu Nike ir – Marija Šarapova.

Kā otro pārbaudīsim likumu TURNIRA_TENISISTS, padodot parametrus R_G (turnīrs) un tenisistu – Zvonareva. Starpposmā būtu jāierauga arī valsts, par kuru spēlē tenisiste (skat. 6.2.2.2.att.).

6.2.2.2.att. Likuma TURNIRA_TENISISTS izpilde

Izvades rezultātā redzam, ka Tenisiste Zvonareva, kura piedalās Rolland Garros turnīrā, spēlē zem Krievijas karoga.

Līdz ar to varam secināt, ka procedūras darbība ir pareiza un loģiska. Bet šeit ir viens procedūras trūkums – ja mēs nezinām parametru, līdz kuram ir jāmeklē

ceļā, tad šīs procedūras darbība nav pareiza. Tātad tā būs nedaudz jāpārveido turpmākajā darba gaitā.

6.2.3. Kopējā aina

Tagad, atkal ar TOAD FOR ORACLE 9.5 palīdzību aplūkosim izveidotās procedūru paketes saturu, izvēloties izkrītošajā logā pakešu sarakstu (skat. 6.2.3.1.att.).

40

6.2.3.1.att. Procedūru paketes saturs

Varam skaidri redzēt, ka mums pagaidām ir tikai viena procedūru pakete, kura sastām no procedūras OUT. Šai procedūrai ir padoti parametri – likums (likuma numurs, pie kura griežas), p_a (sākuma virsotne) un p_b (beigu virsotne).

Tā pat varam redzēt, ka procedūras ietvaros ir deklarēti vairāki mainīgie – fb_b, pr_a, pr_b, lik_nos, pred_a_nos un pred_b_nos. Loga apakšā varam redzēt ka procedūras statuss ir VALID, kas nozīmē, ka procedūra strādā pareizi.

41

7. IZVEDUMA PROCEDŪRAS

7.1. Procedūru paketes papildināšana (L2)

Kā jau minēju, tad procedūra būs nedaudz jāpārveido, lai varētu izgūt datus par likumiem, nezinot beigu parametru. Šim nolūkam izveidojam jaunu procedūru paketi (skat. 7.1.1.att.).

7.1.1.att. Jaunas procedūru paketes izveide (l2)

Tagad izveidosim līdzīgu procedūru paketi, kāda bija iepriekš, tikai noņemsim beigu parametru, kuru mēs procedūrai nepadosim. Šim nolūkam būs jādeklarē jaunais mainīgais. Procedūras gaitā jaunais mainīgais pārņems fakta atribūta B vērtību, ja fakta A vērtība būs vienāda ar iepriekšējā fakta atribūta B vērtību, kur atribūts A bija procedūrai padotais parametrs. Tā pat papildināsim procedūras ķermeni ar atbildes izvadīšanu, jeb likuma beigu parametru (skat. 7.1.2.att.).

42

7.1.2.att. Jaunas procedūru paketes ķermeņa izveide

Tagad, procedūrai būtu jādarbojas tā, kā mēs to esam iecerējuši, t.i – padodot tikai likuma numuru un pirmo parametru, procedūrai būtu jādod atbilde par likuma ietvaros atrasto beigu parametru, tādā veidā sniedzot atbildi uz vaicājumu.

43

7.2. Pārbaudes un piemēri

Lai pārbaudītu jauno procedūru paketi, griezīsimies pie trešā likuma, mēģinot noskaidrot Versache firmas sponsorēto valsti. Tātad, šeit mēs padosim tikai likuma numuru pie kura griezīsimies un pirmo parametru – Versache. To, kuru valsti sponsorē firma, mums būtu jāredz atbildes laukā. Protams, ka starpposmā būtu jāierauga arī tenisists, kurš spēlē par šo valsti un ir noslēdzis līgumu ar šo firmu, jo šo faktu izmantošana ir izmantojamā likuma priekšnosacījums (skat. 7.2.1.att.).

7.2.1.att. Trešā likuma darbība

IR! Tagad mēs skaidri redzam to, ja pēc viena padotā parametra procedūra ir atradusi meklējamo valsti un arī izvadījusi to Atbildes veidā!

Pamēģināsim pārbaudīt arī, pieņemsim, 4 likumu TENISISTS_PRECE, padodot vērtību Davydenko – tenisistu, kura reklamēto preci vēlamies noskaidrot (skat. 7.2.2.att.).

7.2.2.att. Ceturtā likuma darbība

Arī IR! Redzam, ka arī šeit procedūra ir atradusi meklējamo preci – Raketi un to izvadījusi atbildes veidā.

Pamēģināsim paeksperimentēt vēl un, griežoties pie pirmā likuma – atrast sponsoru, kurš sponsorē kādu no ASV valsts tenisistiem (skat. 7.2.3.att.).

44

7.2.3.att. Pirmā likuma darbība

Rezultāts netiek izvadīts! Tas pats notiek ar 2 likumu (skat. 7.2.4.att.).

7.2.4.att. Otrā likuma darbība

Mēs neiegūstam rezultātu! Par iemeslu tam ir tas, ka atbildes ir vairākas! Ja apskatās mūsu izveidotajā hierarhiskajā struktūrā, tad redzam, ka par ASV spēlē 2 tenisisti un katram no viņiem ir viens sponsors – tātad atbildes ir divas.

Tas pats ar otro likumu, kur turnīrā piedalās veseli 9 tenisisti, līdz ar to atbildes arī ir 9!Šim nolūkam atkal būs jāveic procedūru paketes labošana (jeb jaunas izveidošana), kurā

būs jāiekļauj kursors ar ciklu, kurš izvadīs atbildes, kamēr tās atrod.

7.3. Procedūru paketes papildināšana (L3)

Atkal izveidosim jaunu procedūru paketi, lai tajā mēģinātu iekļaut kursoru ar ciklu (skat. 7.3.1.att.).

7.3.1.att. Jaunas procedūru paketes izveide (l3)

Tagad atkal izveidosim jaunas procedūras ķermeni, kurā būs jāiekļauj kursors ar ciklu, kurš izvadīs atbildes, kamēr tās ir atrodamas.

Izveides process ir līdzīgs iepriekšējam procedūru paketes ķermeņa izveidei, kā arī procedūru izveidei, kad veidojām predikātu un faktu saraksta aplūkošanu. Tikai tagad tas viss būs jāsavieno viena veselumā (skat. 7.3.2.att.).

45

7.3.2.att. Jaunas procedūru paketes ķermeņa izveide (l3)

Tagad, vajadzētu būt tā, ka, ja padod procedūrai likuma numuru un vienu parametru, izsaucot likumu, kur mēs zinām, ka būs vairākas atbildes, vajadzētu attēloties vairākiem rezultātiem.

7.4. Pārbaudes un piemēri

Tagad pamēģināsim pārbaudīt vai viss strādā tā kā tam vajadzētu strādāt. Pārbaudīsim to, kas šobrīd visvairāk interesē - pirmo likumu, kuram būtu jāizvada vairākas atbildes, ja padodam parametru „ASV” (skat. 7.4.1.att.).

46

7.4.1.att. Pirmā likuma darbība

IR! Tik tiešām tiek izvadītas abas divas atbildes! Pārbaudīsim arī otro likumu, kuram ir 9 atbildes, ja padodam turnīra nosaukumu (skat. 7.4.2.att.).

7.4.2.att. Otrā likuma darbība

47

Arī šeit tiek izvadītas visas atbildes.Būtu lietderīgi pārbaudīt to, vai jaunizveidotā procedūru pakete strādās arī ar 3 un 4

likumu, ar kuriem strādāja iepriekšējā procedūra (skat. 7.4.3., 7.4.4.att.).

7.4.3.att. Trešā likuma darbība

7.4.4.att. Ceturtā likuma darbība

Tagad varam skaidri redzēt, ka beidzot ir izveidota funkcija, kura strādā pareizi ar visiem likumiem un izvada loģiskas un pareizas atbildes, pat tad, ja tās ir vairākas. Līdz ar to var droši teikt, ka uzdevuma nostādne ir pilnībā realizēta.

48

SECINĀJUMI

Izstrādātajā darbā ir sniegs piemērs par Tenisa turnīra Rolland Garros organizāciju, dalībvalstīm, tenisistiem, sponsoriem, kuri noslēguši līgumus ar tenisistiem un preces, kuras tenisistiem ir jāreklamē turnīra ietvaros, pildot līguma saistības ar sponsoru.

Trešajā praktiskajā darbā ir realizēta glabātuve, jeb datu bāze, priekš faktiem, predikātiem un arī likumiem, kuri atsaucas uz šiem faktiem un predikātiem. Tā pat tika izveidotas arī procedūras, kas izvada minētās struktūras attiecīgajā formātā, kā arī procedūras, kuras veic svarīgāko uzdevuma daļu – veic loģiskā izveduma izvadi, padodot procedūrai tikai likumu, pie kura griežas un pirmo parametru, jeb sākuma virsotni.

Varu droši apgalvot, ka risināmais uzdevums bija grūtākais šajā priekšmetā. Līdzīgi kā pie iepriekšējā darba realizācijas ļoti palīdzēja tas, ka ar PL/SQL nācās saskarties jau iepriekšējā gadā, tādējādi, kursoru, ciklu, IF komandas u.tml. konstrukciju pielietošana veidojamajās procedūrās jau bija aptuveni skaidras. Tomēr, neskatoties uz to, bija arī kļūdas, kuras nevarēju atrisināt un ar „show error” palīdzību, kad tika izvadīts ziņojums, ka procedūra ir izveidota ar kompilācijas kļūdām, nevarēja tomēr īsti izprast kļūdas cēloni. Līdz ar to, arī šajā darbā nācās atteikties no vairākām idejām par procedūru veidošanu.

Sākumā vēlētos apstāties pie realizēšanas daļas grūtībām un sasniegumiem. Viennozīmīgi ir tas, ka loģisku procedūru izveidošana ne tikai aizņem lielāko darba daļu, bet ir arī svarīgākais darba posms. Tā piemēram, soli pa solim veidojot nelielas procedūras datu izvadei, izveidoju procedūru kura atrod likumā definēto ceļu, norādot tikai sākuma virsotni. Piemēram, ja likums izskatās sekojoši: Valsts_Sponsors(A,B) :- Valsts_Tenisists(A,C), Tenisista_Sponsors(C,B), tad, izveidotajā procedūrā, uzdodot to, ka tas ir pirmais likums un ka valsts, kuras sponsoru mēs vēlamies uzzināt ir, piemēram, ASV, tad pēdējā izveidotā procedūra arī izvadīs šo likuma ceļu, iekļaujot tajā nepieciešamos datus un attēlos parametru B kā Atbildi.

Tomēr, šīs procedūras izveides procesā bija arī savas grūtības. Sākumā izveidoju procedūru, kura atrod ceļu, ja padots gan sākuma, gan beigu parametru. Pēc tam šo procedūru pārveidoju tā, ka padod tikai vienu parametru un tā atrod ceļu un izvada atbildi. Bet! Tā neizvadīja atbildi gadījumos, ja atbildes ir vairākas, piemēram, ja ASV valsti sponsorē 2 sponsori tenisa turnīra laikā. Nākošais solis bija pamēģināt iekļaut ciklu un kursoru, kā to darīju sīkās citās procedūrās. Tas bija ārkārtīgi ilgi un sarežģīti. Visu laiku procedūra vai nu kompilējās ar kļūdām, vai nu vienkārši izvadīja milzumlielu kļūdu sarakstu un galu galā tā arī nestrādāja. Tomēr, aiz lielas neatlaidības es panācu savu un procedūra strādā arī ar tādiem likumiem, kuros ir vairākas atbildes! Līdz ar to varu dot subjektīvu vērtējumu savam darbam – savu es panācu un uzdevuma nostādne tika realizēta pilnībā.

Iespējams, ka varēju izveidot lielāku līmeņu vaicājumu, jeb likumos iekļaujot vairākus faktus. Bet iepriekšminēto iemeslu dēļ, tā kā ar milzīgām grūtībām tiku cauri tam, kad likumā ir tikai divi fakti, nolēmu, ka tad, ja iekļaušu vēl kādu, es vispār nebūšu spējīga atrisināt šo problēmu. Vismaz tuvākajā laikā nē! Protams, ka varēja ieviest arī rekursīvo procedūru, vai arī

49

tam, lai panāktu maksimālu ātrdarbību rekursīvās procedūras un funkcijas varētu pārrakstīt iteratīvajos analogos. Bet, tā kā šobrīd, mācību semestra beigās, ir jāraksta daudz kursa darbu, daudz citu praktisko un laboratorijas darbu, tad kavēties vēl pāris nedēļas pie vienas procedūras izveides es neriskēju. Galu galā taču darbs ir padarīts, uzdevuma nostādne ir realizēta, jo galējā procedūra izvada vairāku līmeņu likuma loģisko atrisinājumu.

Varētu vēl piebilst, ka kādā brīdi man radās problēma, ka procedūra izpildās, bet neko neizvada. Es ilgi nevarēju saprast kāds tam ir iemesls, līdz atradu iemeslu internetā – SQL*Plus ir jāpadod komanda „set serveroutput on”, kas ieslēgs servera izvadspēju. Tiklīdz tas bija izdarīts, tad uzreiz procedūras sāka izvadīt savus rezultātus.

Ķeršos arī pie darba projektēšanas aspekta. Kopumā projektēšanas daļa bija kaut arī tā svarīgākā un laikietilpīgākā darba daļa, tomēr arī diezgan viegla. Bet, protams, varu arī droši apgalvot to, ka projektēt datu bāzi un realizēt to ir divas atsevišķas lietas. Ja projektēšanā viss šķita vienkārši un pats par sevi saprotams, tad tajā brīdī, kad kaut kas bija jārealizē – uzreiz radās kaut kādas problēmas, visbiežāk saistītas ar nepareizu prasību definēšanu. Vislabāk būtu, ja projektēšanu un plānošanu izpildītu paralēli, uzreiz pārliecinoties, ka definējums strādās un būs pareizs, vai arī lai uzreiz varētu izlabot kļūdas.

Tā kā tēmu izdomāt man grūtības nesagādāja, jo jau kuru reizi mans darbs ir saistīts ar tenisu, tad šeit sastapos tikai ar vienu problēmu. Tā bija sekojoša – hierarhijas izdomāšana. Tomēr pasēžot pie tā kādu laiku, ienāca prātā, ka tenisisti taču tiek sponsorēti, līdz ar to uzdevuma hierarhiskā pakārtotības ideja tapa diezgan ātri. Izejot no tā, arī predikātu, faktu un likumu izdomāšana nebija grūta.

Nākošajā solī, kad domāju pie glabāšanas struktūrām, nolēmu tabulas sasaistīt, lai nesanāktu tā kā iepriekšējā darbā, kad biju vienkārši aizmirsusi to izdarīt nesaprotama iemesla pēc. Līdz ar to tas ļoti atviegloja manu darbu, kad plānoju izgūšanas stratēģiju. Vismaz atviegloja daudz vairāk, nekā tas bija iepriekšējā darbā, kad nezināju pie kā pieķerties un ar ko sākt savas aizmāršības dēļ (kaut arī uzdevums arī bija atrisināts pilnībā, neskatoties ne uz ko).

Protams, man ļoti patīk, ka ir jāveido tā saucamās grafiskās analoģijas. Tā, piemēram, izveidojot savu hierarhisko uzdevuma struktūru, es to izdrukāju, un turēju visu laiku sev uz galda priekšā. Tādā veidā es zināju kam un kur jābūt izvadītam, kā izskatīsies atbilde, kā arī kur un kādi dati ir jāievada. Šīs darba punkts bieži vien nāk kā palīdzība, jo tad, kad šķiet, ka procedūra it kā strādā pareizi un labi un rezultāti tiek izvadīti, tad pēkšņi, apskatoties grafiskajā analoģijā, ieraugi, ka ir jābūt citiem rezultātiem. Līdz ar to, tas nozīmē, ka realizēšanas procesā ir ieklīdusi kāda nepamanīta kļūda, tātad kaut kas nav pareizi. Arī man tā ir gadījies, taču visas šāda veida problēmas arī ir tikušas atrisinātas.

Tomēr kopumā darbs bija samērā laikietilpīgs, taču visas uzdevuma nostādnē definētās prasības tika veiksmīgi izpildītas, kaut arī bija nepieciešami daudzi jo daudzi resursi no interneta, kas palīdzēja atrisināt vairākas kļūdas un deva skaidrojumus par to, ka tādu funkciju vai procedūru, ko vēlos realizēt nav iespējams iepriekšminēto iemeslu dēļ. Darba izpildīšanas laikā bija interesanti izprast visus soļus, strādājot ar deduktīvo datu bāzi no pašas problēmas vides definēšanas un projektēšanas brīža, līdz pat realizēšanai, datu ievadei un, galvenais, pārbaudei

50

pēc grafiskās hierarhiskās pakārtotības idejas, kas laikam arī bija vispatīkamākais moments – redzēt to, ka iegūtie rezultāti izveidojas tādi kādiem tiem ir jābūt. Jebkurā gadījumā – paldies par iespēju iepazīties ar šāda veida datu bāzu veidošanu, jo tā IR nākotne, un, iespējams, ne tik tāla. Un kuram tad nav patīkami būt ja ne kompetentam kādā nākotnes jautājumā, tad vismaz saprotošam.

Lai izveidotu labu un lielu deduktīvo datu bāzi, bieži vien nepietiek tikai un vienīgi ar zināšanām par konkrēto datubāzu vadības sistēmām. Ir nepieciešamas arī zināšanas citās nozarēs, piemēram, tādās kā mākslīgais intelekts, matemātika u.t.t. Līdz ar to deduktīvo datubāzu veidotājiem jābūt ar plaša spektra speciālistiem, kaut gan mūsdienās speciālisti nereti vien tiek sagatavoti tikai vienā jomā, tādējādi deduktīvo datubāzu veidošanai bezmaz vai jāveido izstrādātāju komandas, kas sastāvēs no speciālistiem, kur katrs atbildēs par savu konkrētu jomu.

Deduktīvās datubāzes pašas par sevi noteikti ir virziens, kurā virzīsies nākotnes datubāzes vadības sistēmas attīstības ceļš, jo šādas sistēmas apvieno sevī datubāzes un mākslīgā intelekta tehnoloģijas, kas aizvien vairāk un vairāk tuvojas viena otrai. Nākotnē būs redzams tas, vai abas šīs tehnoloģijas kādreiz pilnībā savienosies, tādējādi dodot iespēju radīt datubāzes, kuras operēs ar datiem kā saprātīga būtne, kā arī, iespējams, nodrošinās arī attiecīgu datu aizsardzību vai arī sniegs tamlīdzīgas plašas iespējas.

51

IZMANTOTIE AVOTI

Teksta materiāli

Latviski:

1. Prof. Eiduks, Lekciju konspekts mācību priekšmetā “Progresīvas datu bāzes”, 2008./09. m.g.2. Grudspeņķis, Lekciju konspekts pācību priekšmetā „Mākslīgā inteklekta pamati”,

2007./08.m.g.

Krieviski

3. Базы данных, Проектирование, реализация и сопровождение. Теория и практика / Под ред. Т. Конноли, К. Бегг, А. Страчан. – М., изд. дом Вильямс, 2000.-1111с.

4. Использование Oracle8™/8i™. Специальное издание /Вильям Дж. Пейдж и др. – М., изд. дом Вильямс, 2000.-1022с.

5. Чери С., Готлаб Г., Танка Л., “Логическое программирование и базы данных.” – М.: Мир, 1992. – 352 с.

6. В. В. Корнеев, А. Ф. Гарев, С. В. Васютин, В. В. Райх, “Базы данных. Интеллектуальная обработка информации.” – М.: “Нолидж”, 2000. – с., ил.

Angliski

7. Oracle SQL Reference, Oracle Corporation, 20008. Oracle Press. Oracle 9i - The Complete Reference9. Oracle 8i The Complete Reference - McGraw Hill10. G. Kzernan, C. de Mauzdrevzlle, E. Sunon, Making Deductive Database a Practical

Technology: a step forwardInterneta resursi

11. http://www.oracleutilities.com12. http://www.mpi-sb.mpg.de/~baumgart/logik- 13. http://www.postgresql.org/docs/current/static/sql-createoperator.html14. http://www.psoug.org/reference/cast.html15. http://www.firststeps.ru/sql/oracle/r.php?9416. http://www.ss64.com/ora/index.html17. http://infolab.usc.edu/csci585/Spring2006/Docs/B14255_01.pdf18. http://www.springerlink.com/index/86743m6017757366.pdf19. http://users.ox.ac.uk/~dhrice/elements/Week%205%20%20Handout.pdf20. http://portal.acm.org/citation.cfm?id=214597.21519021. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.28.684622. http://myddas.ncc.up.pt/papers/tsoares_iclp_2006.ps23. http://www.cs.northwestern.edu/academics/courses/325/exercises/ddr-exs.html24. http://www.cs.rutgers.edu/~uli/cs515/fall07/lectures/lec9.pdf

52

PIELIKUMI1.pielikums. Uzdevuma struktūra

53