Rdf-baasi ülesande nõuded: erinevus redaktsioonide vahel
Resümee puudub |
Resümee puudub |
||
| (ei näidata sama kasutaja 18 vahepealset redaktsiooni) | |||
| 1. rida: | 1. rida: | ||
''Vaata kindlasti lisaks seletust [[omadus-väärtus (ehk rdf) andmebaasidest]] ja [[rdf-baasi ülesande soovitusi ja nõuandeid | soovitusi ja nõuandeid ]] | ''Vaata kindlasti lisaks seletust [[omadus-väärtus (ehk rdf) andmebaasidest]] ja [[rdf-baasi ülesande soovitusi ja nõuandeid | soovitusi ja nõuandeid ]] | ||
'''Kokkuvõtlikult:''' loodav programm käivitatakse käsurealt, andes talle ette meie oma lihtsas päringukeeles | '''Kokkuvõtlikult:''' loodav programm käivitatakse käsurealt, andes talle ette meie oma lihtsas päringukeeles (palju lihtsam, kui SQL) lause konkreetse | ||
otsingu tegemiseks rdf failidest. Programm leiab seejärel lause tulemuse (kasutades samas kataloogis olevaid | |||
csv-faile tabelitena) ja trükib selle välja. | csv-faile tabelitena) ja trükib selle välja. | ||
NB! Ära unusta lugemast ka [[rdf-baasi lisaülesanne | rdf-baasi lisaülesannet]] | |||
== Failid, kus andmed hoitakse == | == Failid, kus andmed hoitakse == | ||
Sinu programm peab andmefailidena kasutama sellessamas kataloogis, kus programmi käivitad, olevaid faile. | |||
Seega ei ole faile vaja anda täispathiga, piisab nimest. Failid on lihtsalt tekstifailid, formaadiga CSV (comma separated values, | |||
sellisteks saab salvestada näiteks Exceli faile), ning nad sisaldavad rdf-andmeid, neljas tulbas, täpselt selles järjekorras | sellisteks saab salvestada näiteks Exceli faile), ning nad sisaldavad rdf-andmeid, neljas tulbas, täpselt selles järjekorras | ||
ja tüübinimedega (uri,string,integer) nagu on seletatud jutus [[omadus-väärtus (ehk rdf) andmebaasidest]]. Päiserida failil | ja tüübinimedega (uri,string,integer) nagu on seletatud jutus [[omadus-väärtus (ehk rdf) andmebaasidest]]. Päiserida failil | ||
ei ole: esimene rida on kohe rdf-info rida. | ei ole: esimene rida on kohe rdf-info rida. Tühikud enne ja pärast koma tuleb töötlusel elimineerida: rida | ||
<pre> | |||
200 , nimi, Arvo Meister ,string | |||
</pre> | |||
on sisuliselt ekvivalentne reaga | |||
<pre> | |||
200,nimi,Arvo Meister,string | |||
</pre> | |||
Esimese näitefailina (andmed.csv) võid kasuda jutus [[omadus-väärtus (ehk rdf) andmebaasidest]] | |||
selgitatud sisu: | |||
<pre> | |||
1,nimi,Arvo,string | |||
2,nimi,Jaan,string | |||
1,vanus,18,integer | |||
2,vanus,20,integer | |||
1,pikkus,185,integer | |||
2,isikukood,38410122641,string | |||
1,amet,3,uri | |||
1,amet,4,uri | |||
2,amet,5,uri | |||
3,nimi,ehitaja,string | |||
4,nimi,valvur,string | |||
5,nimi,valvur,string | |||
3,palk,15000,integer | |||
4,palk,6000,integer | |||
5,palk,2000,integer | |||
1,omab,7,uri | |||
2,omab,10,uri | |||
7,tyyp,auto,string | |||
7,mark,ford | |||
7,hind,200000,integer | |||
10,tyyp,maja,string | |||
10,hind,2000000,integer | |||
1,omab,autod.csv#2,uri | |||
2,omab,autod.csv#1,uri | |||
</pre> | |||
Teise näitefailina (autod.csv) võid kasutada järgmist sisu: | |||
<pre> | |||
1,tyyp,auto,string | |||
2,tyyp,auto,string | |||
1,mark,opel,string | |||
2,mark,cadillac,string | |||
1,hind,100000,integer | |||
2,hind,500000,integer | |||
</pre> | |||
Arusaadavalt peab sinu programm <b>suutma töötada mistahes rdf-failidega ülalpool kirjeldatud kujul</b>, mitte ainult siintoodud kahe näitefailiga. Kindlasti tee katseks ise teistsuguseid | |||
faile ja eksperimenteeri nendega! | |||
NB! | |||
* | * Selline komaga eraldatud andmete esitamise formaat on väga harilik: seda nimetatakse CSV (comma separated values) ja te saate MS Exceli tabeleid selliselt kettale salvestada (Save as -> vali CSV formaat) ja ka lugeda. | ||
* | * Eesti settingute korral kasutab Excel CSV formaadi salvestamise korral koma asemel semikoolonit ; (põhjus: komaga numbrid Eesti settingutes on komaga, kuid normaalsetes settingutes on komaga numbrid punktiga) | ||
* | * Kui mõni string Exceli tabelis sisaldab koma, siis paneb Excel CSV-formaadis salvestamisel selle ümber erandina jutumärgid. | ||
* Kui mõni string Exceli tabelis sisaldab ise jutumärki, siis asendab Excel CSV-formaadis salvestamisel selle topelt-jutumärgiga. | |||
* | |||
Meie oma praktikumitöös eeldame lihtsuse mõttes, et stringides komasid ja jutumärke ei ole. | |||
Sellega pääseme äsjakirjeldatud eranditest, st olukorrast, kus vahel stringidel jutumärgid | |||
ümber ja stringi sisemised jutumärgid on asendatud topelt-jutumärgiga. | |||
== Mida programm peab suutma teha == | |||
Programm peab suutma lahendada kahte erinevat ülesannet: | |||
* Arvutada kokku ja trükkida välja etteantud isiku koguvara, kasutades seejuures soovi korral ühte lisatingimust (mis tüüpi/omadusega vara kokku liidame) | |||
* Leida etteantud andmete hulgast kõige rikkam isik, kasutades jällegi lisatingimust (mis tüüpi/omadusega vara kokku liidame). | |||
Oletame, et panime programmi nimeks myrdf. | |||
Selleks, et seda sisulist ülesannet täita, peab programm myrdf konkreetselt tegema/sisaldama järgmist: | |||
=== Programm peab vastu võtma, aru saama ja täitma käsureal antud päringuid (neli varianti): === | |||
ja | |||
myrdf "omabsumma andmed.csv where id=xx" | |||
myrdf "omabsumma andmed.csv where id=xx and omadus=vaartus" | |||
myrdf "kesomabmax andmed.csv" | |||
myrdf "kesomabmax andmed.csv where omadus=vaartus" | |||
Seejuures võib <tt>andmed.csv</tt> asemele kirjutada mistahes failinime, mis selles kataloogis on, | |||
<tt>xx</tt> asemele mistahes objekti identifikaatori (esimese tulba liige), <tt>omadus</tt> asemele | |||
mistahes omatava asja omaduse (näiteks tyyp,mark vms) ja <tt>tyybivaartus</tt> asemele mistahes | |||
stringi. | |||
Tekstiga <tt>omabsumma</tt> algav käsk peab summeerima etteantud isiku (tegelikult suvalise objekti) | |||
vara (kasutades selleks <b>omab</b> seost ning omatava objekti <b>hind</b> omadust andmefailis!), | |||
millel võib lisaks olla olemas etteantud omaduse etteantud väärtus, ja selle välja trükkima. Näiteks, kasutades meie eeltoodud | |||
andmefaili, saame järgmised tulemused: | |||
myrdf "omabsumma andmed.csv where id=1" trükib <b>700000</b> | |||
myrdf "omabsumma andmed.csv where id=2" trükib <b>2100000</b> | |||
myrdf "omabsumma andmed.csv where id=3" trükib <b>0</b> | |||
myrdf "omabsumma andmed.csv where id=2 and tyyp=maja" trükib <b>2000000</b> | |||
myrdf "omabsumma andmed.csv where id=2 and tyyp=auto" trükib <b>100000</b> | |||
myrdf "omabsumma andmed.csv where id=1 and tyyp=traktor" trükib <b>0</b> | |||
myrdf "omabsumma andmed.csv where id=1 and mark=cadillac" trükib <b>500000</b> | |||
Tekstiga <tt>kesomabmax</tt> algav käsk peab leidma objekti, kelle vara (kasutades sedasama <b>omab</b> seost ning omatava objekti <b>hind</b> seost andmefailis!), | |||
on kõige suurem, ja selle objekti identifikaatori (esimese rea sisu) välja trükkima. Kui käsule on antud lisatingimus, | |||
siis tuleb varade summeerimisel kasutada ainult selle tingimusega klappivat väärtust. Jällegi, kasutades meie eeltoodud | |||
andmefaili, saame järgmised tulemused: | |||
myrdf "kesomabmax andmed.csv" trükib <b>2</b> | |||
myrdf "kesomabmax andmed.csv" where tyyp=auto trükib <b>1</b> | |||
myrdf "kesomabmax andmed.csv" where mark=cadillac trükib <b>1</b> | |||
myrdf "kesomabmax andmed.csv" where mark=opel trükib <b>2</b> | |||
myrdf "kesomabmax andmed.csv" where tyyp=traktor trükib <b>null</b> | |||
NB! Tingimuseks on alati ainult võrdus, mingeid väiksem/suurem/vms tingimusi ei ole vaja realiseerida. Samuti piisab üheainsa tingimuse | |||
realiseerimisest (ehk, sinu programm ei pea aru saama käskudest nagu "omabsumma andmed.csv where id=1 and tyyp=auto and mark=cadillac" ) | |||
=== Programm peab sisaldama kasulikku teeki (st hulka funktsioone), mida saaks kasutada teised programmid (umbes nagu Ecki TextIO klassi): === | |||
* Funktsiooni <b>String rdf_omabsumma(String failinimi, String id, String omadus, String vaartus)</b>, mis annab tulemuseks otsitava stringi, täpselt | |||
analoogiliselt eelkirjeldatuga. Juhul, kui argument <b>omadus</b> on kas <tt>null</tt> või tühi string <tt>""</tt>, summeeritakse üle kõigi | |||
omatavate objektide (st tingimust ei arvestata). | |||
* Funktsiooni <b>String rdf_kesomabmax(String failinimi, String omadus, String vaartus)</b>, mis annab tulemuseks otsitava stringi, täpselt | |||
analoogiliselt eelkirjeldatuga. Juhul, kui argument <b>omadus</b> on kas <tt>null</tt> või tühi string <tt>""</tt>, summeeritakse üle kõigi | |||
omatavate objektide (st tingimust ei arvestata). | |||
st | |||
== Vigade töötlus == | == Vigade töötlus == | ||
| 274. rida: | 150. rida: | ||
ei pea kasutama täpselt sellist vigade | ei pea kasutama täpselt sellist vigade | ||
"kataloogi" ja veateateid): | "kataloogi" ja veateateid): | ||
* päringu süntaks on vale | * päringu süntaks on vale | ||
* päringus nõutud faili ei leitud | * päringus nõutud faili ei leitud | ||
* päringus nõutud faili ei saa avada | * päringus nõutud faili ei saa avada | ||
* faili ridades on | * faili ridades on vale tulpade arv | ||
* faili | |||
== Soovitusi ja ideid programmeerimiseks == | |||
Kõige olulisem on soovitus töö järjekorra kohta: | |||
* Programmeeri kõigepealt valmis faili massiivi lugemise funktsioon (tingimata tee selleks eraldi funktsioon!), katseta, et käiks ok. | |||
* Seejärel programmeeri valmis <b>String rdf_omabsumma(String failinimi, String id, String omadus, String vaartus)</b>,alustades lihtsamast juhust: tingimusi pole, uri-dega midagi ei viidata jne. Kui see lihtne variant käib, lisa uri-dega tegutsemine ja lõpuks tingimused. | |||
* Seejärel programmeeri käsurea töötlus, mis lõpuks kutsub välja varem tehtud funktsiooni rdf_omabsumma. | |||
* Nüüd tee valmis funktsioon <b>String rdf_kesomabmax(String failinimi, String omadus, String vaartus)</b>, mis jällegi kasutab varem tehtud funktsiooni rdf_omabsumma. | |||
* Lõpuks tee valmis käsurea-töötlus kesomabmax jaoks, kasutades vastuse leidmiseks muidugi funktsiooni rdf_kesomabmax | |||
Detailsemalt loe eraldi [[rdf-baasi ülesande soovitusi ja nõuandeid | soovitusi ja nõuandeid ]] selle ülesande jaoks. | |||
Viimane redaktsioon: 18. oktoober 2006, kell 12:01
Vaata kindlasti lisaks seletust omadus-väärtus (ehk rdf) andmebaasidest ja soovitusi ja nõuandeid
Kokkuvõtlikult: loodav programm käivitatakse käsurealt, andes talle ette meie oma lihtsas päringukeeles (palju lihtsam, kui SQL) lause konkreetse otsingu tegemiseks rdf failidest. Programm leiab seejärel lause tulemuse (kasutades samas kataloogis olevaid csv-faile tabelitena) ja trükib selle välja.
NB! Ära unusta lugemast ka rdf-baasi lisaülesannet
Failid, kus andmed hoitakse
Sinu programm peab andmefailidena kasutama sellessamas kataloogis, kus programmi käivitad, olevaid faile. Seega ei ole faile vaja anda täispathiga, piisab nimest. Failid on lihtsalt tekstifailid, formaadiga CSV (comma separated values, sellisteks saab salvestada näiteks Exceli faile), ning nad sisaldavad rdf-andmeid, neljas tulbas, täpselt selles järjekorras ja tüübinimedega (uri,string,integer) nagu on seletatud jutus omadus-väärtus (ehk rdf) andmebaasidest. Päiserida failil ei ole: esimene rida on kohe rdf-info rida. Tühikud enne ja pärast koma tuleb töötlusel elimineerida: rida
200 , nimi, Arvo Meister ,string
on sisuliselt ekvivalentne reaga
200,nimi,Arvo Meister,string
Esimese näitefailina (andmed.csv) võid kasuda jutus omadus-väärtus (ehk rdf) andmebaasidest selgitatud sisu:
1,nimi,Arvo,string 2,nimi,Jaan,string 1,vanus,18,integer 2,vanus,20,integer 1,pikkus,185,integer 2,isikukood,38410122641,string 1,amet,3,uri 1,amet,4,uri 2,amet,5,uri 3,nimi,ehitaja,string 4,nimi,valvur,string 5,nimi,valvur,string 3,palk,15000,integer 4,palk,6000,integer 5,palk,2000,integer 1,omab,7,uri 2,omab,10,uri 7,tyyp,auto,string 7,mark,ford 7,hind,200000,integer 10,tyyp,maja,string 10,hind,2000000,integer 1,omab,autod.csv#2,uri 2,omab,autod.csv#1,uri
Teise näitefailina (autod.csv) võid kasutada järgmist sisu:
1,tyyp,auto,string 2,tyyp,auto,string 1,mark,opel,string 2,mark,cadillac,string 1,hind,100000,integer 2,hind,500000,integer
Arusaadavalt peab sinu programm suutma töötada mistahes rdf-failidega ülalpool kirjeldatud kujul, mitte ainult siintoodud kahe näitefailiga. Kindlasti tee katseks ise teistsuguseid faile ja eksperimenteeri nendega!
NB!
- Selline komaga eraldatud andmete esitamise formaat on väga harilik: seda nimetatakse CSV (comma separated values) ja te saate MS Exceli tabeleid selliselt kettale salvestada (Save as -> vali CSV formaat) ja ka lugeda.
- Eesti settingute korral kasutab Excel CSV formaadi salvestamise korral koma asemel semikoolonit ; (põhjus: komaga numbrid Eesti settingutes on komaga, kuid normaalsetes settingutes on komaga numbrid punktiga)
- Kui mõni string Exceli tabelis sisaldab koma, siis paneb Excel CSV-formaadis salvestamisel selle ümber erandina jutumärgid.
- Kui mõni string Exceli tabelis sisaldab ise jutumärki, siis asendab Excel CSV-formaadis salvestamisel selle topelt-jutumärgiga.
Meie oma praktikumitöös eeldame lihtsuse mõttes, et stringides komasid ja jutumärke ei ole. Sellega pääseme äsjakirjeldatud eranditest, st olukorrast, kus vahel stringidel jutumärgid ümber ja stringi sisemised jutumärgid on asendatud topelt-jutumärgiga.
Mida programm peab suutma teha
Programm peab suutma lahendada kahte erinevat ülesannet:
- Arvutada kokku ja trükkida välja etteantud isiku koguvara, kasutades seejuures soovi korral ühte lisatingimust (mis tüüpi/omadusega vara kokku liidame)
- Leida etteantud andmete hulgast kõige rikkam isik, kasutades jällegi lisatingimust (mis tüüpi/omadusega vara kokku liidame).
Oletame, et panime programmi nimeks myrdf. Selleks, et seda sisulist ülesannet täita, peab programm myrdf konkreetselt tegema/sisaldama järgmist:
Programm peab vastu võtma, aru saama ja täitma käsureal antud päringuid (neli varianti):
myrdf "omabsumma andmed.csv where id=xx"
myrdf "omabsumma andmed.csv where id=xx and omadus=vaartus"
myrdf "kesomabmax andmed.csv"
myrdf "kesomabmax andmed.csv where omadus=vaartus"
Seejuures võib andmed.csv asemele kirjutada mistahes failinime, mis selles kataloogis on, xx asemele mistahes objekti identifikaatori (esimese tulba liige), omadus asemele mistahes omatava asja omaduse (näiteks tyyp,mark vms) ja tyybivaartus asemele mistahes stringi.
Tekstiga omabsumma algav käsk peab summeerima etteantud isiku (tegelikult suvalise objekti) vara (kasutades selleks omab seost ning omatava objekti hind omadust andmefailis!), millel võib lisaks olla olemas etteantud omaduse etteantud väärtus, ja selle välja trükkima. Näiteks, kasutades meie eeltoodud andmefaili, saame järgmised tulemused:
myrdf "omabsumma andmed.csv where id=1" trükib 700000 myrdf "omabsumma andmed.csv where id=2" trükib 2100000 myrdf "omabsumma andmed.csv where id=3" trükib 0 myrdf "omabsumma andmed.csv where id=2 and tyyp=maja" trükib 2000000 myrdf "omabsumma andmed.csv where id=2 and tyyp=auto" trükib 100000 myrdf "omabsumma andmed.csv where id=1 and tyyp=traktor" trükib 0 myrdf "omabsumma andmed.csv where id=1 and mark=cadillac" trükib 500000
Tekstiga kesomabmax algav käsk peab leidma objekti, kelle vara (kasutades sedasama omab seost ning omatava objekti hind seost andmefailis!),
on kõige suurem, ja selle objekti identifikaatori (esimese rea sisu) välja trükkima. Kui käsule on antud lisatingimus,
siis tuleb varade summeerimisel kasutada ainult selle tingimusega klappivat väärtust. Jällegi, kasutades meie eeltoodud
andmefaili, saame järgmised tulemused:
myrdf "kesomabmax andmed.csv" trükib 2 myrdf "kesomabmax andmed.csv" where tyyp=auto trükib 1 myrdf "kesomabmax andmed.csv" where mark=cadillac trükib 1 myrdf "kesomabmax andmed.csv" where mark=opel trükib 2 myrdf "kesomabmax andmed.csv" where tyyp=traktor trükib null
NB! Tingimuseks on alati ainult võrdus, mingeid väiksem/suurem/vms tingimusi ei ole vaja realiseerida. Samuti piisab üheainsa tingimuse realiseerimisest (ehk, sinu programm ei pea aru saama käskudest nagu "omabsumma andmed.csv where id=1 and tyyp=auto and mark=cadillac" )
Programm peab sisaldama kasulikku teeki (st hulka funktsioone), mida saaks kasutada teised programmid (umbes nagu Ecki TextIO klassi):
- Funktsiooni String rdf_omabsumma(String failinimi, String id, String omadus, String vaartus), mis annab tulemuseks otsitava stringi, täpselt
analoogiliselt eelkirjeldatuga. Juhul, kui argument omadus on kas null või tühi string "", summeeritakse üle kõigi omatavate objektide (st tingimust ei arvestata).
- Funktsiooni String rdf_kesomabmax(String failinimi, String omadus, String vaartus), mis annab tulemuseks otsitava stringi, täpselt
analoogiliselt eelkirjeldatuga. Juhul, kui argument omadus on kas null või tühi string "", summeeritakse üle kõigi omatavate objektide (st tingimust ei arvestata).
Vigade töötlus
Mistahes vigade ilmnemisel ei tohi programm nö kokku kukkuda või anda Java enda, süsteemset veateadet, millest kasutaja aru ei saa.
Vead tuleb kinni püüda (kas if-dega kontrollides või try ... catch-i kasutades) ning anda kasutajale arusaadav veateade.
Millised on vead, mis võivad juhtuda (näited: ei pea kasutama täpselt sellist vigade "kataloogi" ja veateateid):
- päringu süntaks on vale
- päringus nõutud faili ei leitud
- päringus nõutud faili ei saa avada
- faili ridades on vale tulpade arv
Soovitusi ja ideid programmeerimiseks
Kõige olulisem on soovitus töö järjekorra kohta:
- Programmeeri kõigepealt valmis faili massiivi lugemise funktsioon (tingimata tee selleks eraldi funktsioon!), katseta, et käiks ok.
- Seejärel programmeeri valmis String rdf_omabsumma(String failinimi, String id, String omadus, String vaartus),alustades lihtsamast juhust: tingimusi pole, uri-dega midagi ei viidata jne. Kui see lihtne variant käib, lisa uri-dega tegutsemine ja lõpuks tingimused.
- Seejärel programmeeri käsurea töötlus, mis lõpuks kutsub välja varem tehtud funktsiooni rdf_omabsumma.
- Nüüd tee valmis funktsioon String rdf_kesomabmax(String failinimi, String omadus, String vaartus), mis jällegi kasutab varem tehtud funktsiooni rdf_omabsumma.
- Lõpuks tee valmis käsurea-töötlus kesomabmax jaoks, kasutades vastuse leidmiseks muidugi funktsiooni rdf_kesomabmax
Detailsemalt loe eraldi soovitusi ja nõuandeid selle ülesande jaoks.