Post on 30-Jan-2021
Sveučilǐste J.J. Strossmayera u Osijeku
Odjel za matematiku
Magdalena Čurić (Mikulić)
Matematička logika u semantičkom webu
Diplomski rad
Osijek, 2011.
Sveučilǐste J.J. Strossmayera u Osijeku
Odjel za matematiku
Diplomski nastavnički studij matematike i informatike
Magdalena Čurić (Mikulić)
Matematička logika u semantičkom webu
Diplomski rad
Mentor: Prof. dr. sc. Mario Essert
Osijek, 2011.
Sadržaj
1. Uvod 1
2. Semantički web 2
2.1. Uvod u semantički web . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.2. Primjeri nadogradnje web 2.0 . . . . . . . . . . . . . . . . . . . . . . . 5
3. TEHNOLOGIJA SEMANTIČKOG WEBA 6
4. RDF 7
4.1. Načini prikaza izjave . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4.2. RDF baziran na XML-u . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.3. RDF Shema (RDFS) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4.3.1. Sintaksa koja je potrebna za pisanje RDFS-e . . . . . . . . . . . 19
4.3.2. Primjer RDFS-a . . . . . . . . . . . . . . . . . . . . . . . . . . 21
5. MATEMATIČKA LOGIKA U SEMANTIČKOM WEBU 22
5.1. Primjeri monotonih pravila: Obiteljske veze . . . . . . . . . . . . . . . 23
5.2. Sintaksa monotonih pravila . . . . . . . . . . . . . . . . . . . . . . . . 24
5.3. Opisno logički programi (Description Logic Programs (DLP)) . . . . . 26
5.3.1. Primjeri prikaza u Horn logici . . . . . . . . . . . . . . . . . . . 27
5.4. Semantička web pravila (SemanticWeb Rules Language (SWRL)) . . . 28
5.5. Nemonotona pravila . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.5.1. Sintaksa ponǐstavajućih pravila . . . . . . . . . . . . . . . . . . 29
5.5.2. Primjer ponǐstavajućih pravila - Posredovanje trgovine(Brokered
Trade) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.5.3. Formalizacija Tomislavovih zahtjeva . . . . . . . . . . . . . . . . 30
5.6. RuleML -Jezik za označavanje pravila . . . . . . . . . . . . . . . . . . . 34
6. MODELIRANJE PODATAKA 37
6.1. Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7. SAŽETAK 54
8. Summary 54
9. LITERATURA 55
10.ŽIVOTOPIS 56
1
1. Uvod
Iz dana u dan tempo čovjekova života postaje sve brži i brži. Ljudi se sve vǐse vode
činjenicom kako je vrijeme novac. Žele svoje vrijeme iskoristiti što bolje mogu i što kva-
litetnije. Organiziraju svoje dane do posljednje sekunde. Sav taj posao i organizacija
su trenutno ne zamislivi bez računala. Stoga je nužno razvijati što bolju tehnologiju,
koja može pratiti tempo današnjeg života i pružiti čovjeku maksimalnu pomoć.
Većina današnjih korisnika ovisi o računalu, internetu i pretraživačima. Opseg infor-
macija koje se pružaju na internetu rastu ”munjevitom” brzinom koje su utjecale na
promjenu današnjeg weba i pretraživaća. Programeri su morali osmisliti što kvalitetniji
pristup informacijama, time brže pretrage i bolju dostupnost informacija i podataka.
Tako se stvorila ideja da se kreira semantički web.
Cilj Semantičkog Web-a je kreiranje takvih standarda i tehnologija koje će
pomoći stroju da ”razumije” informaciju. U dosadašnjem Web-u povezivani su bili
URI dokumenti, a zahvaljujući Semantičkom Web-u pruženi su koncepti dokumenata,
ljudi i veze izmedu njih i dokumenta.
U prvom poglavlju diplomskog rada dan je uvod u semantički web. Kroz primjer
pretraživanja izneseni su problemi koji nastaju, a time i navedeni razlozi zbog kojih se
javlja potreba kreiranja semantičkog weba. Navedeno je i nekoliko primjera gdje se već
sada može vidjeti napredak weba i njegov utjecaj na dosadašnji web.
U drugom poglavlju dan je pregled tehnologije semantičkog weba, sama grada
semantičkog weba i što se krije u njemu.
U trećem poglavlju detaljno je obraden RDF ili Resource Description Fra-
mework. Prikazana je grada i pravila pisanja rdf dokumenta. Radi lakšeg razumjevanja
svako pravilo ili pojam prate pomno odabrani primjeri. Unutar ovog poglavlja defini-
rati će se po prvi puta pojam ”trojke” koji je nužan za daljnji rad.
Četvrto poglavlje i najvažnije poglavlje je matematička logika koja se skriva u
semantičkom webu. Prikazana je podjela na monotona i nemonotana pravila. De-
taljno je opisana njihova sintaksa ,pretvaranje izjava(iskaza) u logičke zapise i načini
zaključivanja. Na kraju tog poglavlja dan je primjer kroz koji se najbolje vidi način
zaključivanja i rad matematičke logike. Osim toga, na kraju su navedeni mogući načini
zapisa iskaza i pravila u Datalog RuleML i SWRL jeziku.
Posljednje poglavlje potkrijepljuje rad. Ono je zamǐsljeno da prikaže različite
mogućnosti modeliranja podataka, te da kroz njihove mane prikaže korisnost zapisa
pomoću grafa i trojki. U poglavlju je dan program koji je detaljno objašnjen. On služi
kako bi kreirao stablo od danih trojki i ispisivao trojke koje se nalaze u stablu.
2
2. Semantički web
2.1. Uvod u semantički web
Nekada se napredak čovječanstva mjerio razinom pismenošću ljudi, tj. koliko ljudi
zna čitati, pisati i aktivno koristiti te vještine. Od tada do sada se čovječanstvo uveliko
promijenilo i svakim danom mjenja se sve većom brzinom. Postalo je normalno da ljudi
znaju čitati i pisati, to vǐse i nije velika novost. Stoga, je nastala potreba za novim
mjerilom napretka. Tu ulogu preuzela je brojka koja nam govori koliko ljudi posjeduje
informatičku pismenost, jer život je jednostavno postao nezamisliv bez računala i in-
terneta.O tome govori sama činjenica da od oko 4 437 460 ljudi u hrvatskoj njih gotovo
1, 3 milijuna ljudi koristi internet za pretraživanje informacija.
Svako dijete koje polazi u školu mora proći minimalno informatičko obrazovanje
unutar kojeg mora naučiti osnove korǐstenja računala i interneta. Posebna pažnja se
pridaje pretraživanju, jer se ono oslanja na pretraživanje pomoću riječi.Malo napred-
nije učenike, koji na dodatnoj nastavi uče programirati web stranice, uče da obavezno
upisuju ključne riječi pomoću kojih će ih tražilice pronaći.
Učitelji u današnjim osnovnim i srednjim školama stalno vježbaju s učenicima i svako
malo ih podsjećaju kako da odaberu ispravnu kombinaciju riječi za njihovo pitanje
koje pretražuju. Cilj im je pri tome dobiti što manje nepotrebnih stranica, a što vǐse
materijala koje će potkrijepiti njihov odgovor.
Najčešće korǐsteni pretraživaći informacija na internetu su ”Yahoo” i ” Google”,
koji su bazirani na ključnim riječima. Što znači da će korisnik dobiti tražene informa-
cije upisivanjem odredene kombinacije riječi u tražilice.
Svi su barem jednom koristili neku od gore navedenih tražilica i susreli sa problemom
takvog pretraživanja. Nakon što su upisali odabrane riječi dobili su sumu linkova koji
su potencijalni odgovori na pitanje.
Tražilica radi na sljedećem principu, a to je da uzima riječi koja joj je ponudena i
pretražuje internet. Ponuditi će kao odgovor sve moguće linkove koji u sebi sadrže tu
kombinaciju riječi. Nakon što pregleda sve koji sadrže kombinaciju, kao moguće rješenje
ponuditi će i dokumente (web stranice), koji u sebi sadrže nekoliko od ponudenih riječi
ili samo jednu riječ od onih koje su navedene. Kada napokon pokaže ispis svih mogučih
linkova , sljedeći posao je pretraživanje link po link u nadi da će se što prije naići na
odgovor. Svi će, pa čak i oni s malom informatičkom pismenošću, zaključiti da je to
dugotrajan proces i da zahtjeva veliku aktivnost korisnika.
3
Trenutnom upotrebom ovih alata javljaju sljedeći problemi:
• Visok opoziv s niskom preciznošću.Ovo je vrlo česta pojava prilikom pretraživanja. Dobiven je veliki povrat infor-
macija koje mogu biti , ali ne moraju biti, odgovor na upit pretrage.
• Niski ili nikakav opoziv.Nešto manje zastupljeniji problem u pretraživanju. Može se dogoditi da na upit
koji je postaviljen ne dobijete nikakav odgovor ili odgovor koji ni u kojem slučaju
ne odgovara upitu.
• Rezultati su visoko osjetljivi na rječnik(vokabular).Ponekada riječ koja se pretražuj može imati vǐse značenja. Vǐseznačnost se može
odnositi i na nacionalne jezike i na pojedini jezik. Na primjer, promatra li se pro-
blem na nacionalnoj razini,pri upisu riječi ”pile” (životinja) dobiti će se rezultati
o životinji, ali i podatci o ”hrpama” (eng. pile = hrpa).
Isti problem se može pojaviti i unutar hrvatskog jezika. Kada bi se u tražilicu
upisala riječ ”Led” dobiti će se rezultat o ledu-smrznutoj tekućini i o led diodi-
poluvodičkom elementu.
• rezultati su pojedinačne web stranice
Svi ovi problemi nastaju ne samo zbog samog pretraživanja, nego i zbog toga što
količina informacija raste eksponencijalnom brzinom. Alati koji ih obraduju vǐse nisu
dovoljno dobri i ne mogu se nositi s količinom podataka. Osim toga, problem je i u
tome što informacije koje se nalaze na webu nisu jasne stroju (računalu), te ih on ne
može interpretirati, niti ponuditi kvalitetnu informaciju korisniku.
Navedenim problemima bavio se Tim Berners-Lee1,kojemu se pripisuje izum World
Wide Web-a. U prosincu 2004. nakon što je prešao na novi posao Tim se počinje ba-
viti novim projektom. Njegov projekt bio je semnatički web. On je semantički web
zamislio kao nastavak (nadogradnju) na trenutni web, koji u sebi sadrži spoj odredenih
standarda i tehnologija koje će omogućiti da stroj ”razumije” informacije, da ih može
apstrahirati i povezivati. Zamisao je da se informacije automatiziraju i integriraju u
ponovnu upotrebu za različite aplikacije, a ne samo za prikazivanje, kao što je bilo do
sada.
Znanstvenici su ustanovili da korisnici stalno dodaju informacije i podatke na in-
ternet, bilo to nekakakav dokument ili jednostavno označavanje nekakve osobe na in-
ternetu.
1Sir Timothy John ”Tim” Berners-Lee, poznat još pod imenom ”TimBL”. Britanski je inžinjer iračunalni znanstvenik. Profesor je na MIT-u. Izumio je WWW uz pomoć Robert Cailliau i mladogstudenta sa CERN-a
4
Sam izumitelj Tim Berners-Lee objasnio je da samim odlaskom na neku od svojih
društvenih stranica i prihvaćanjem neke osobe iz svijeta kao prijatelja dodajete podatak
na internet i stvarate odredenu vezu,te na taj način gradite mrežu informacija. Sve in-
formacije povezane su odredenim vezama i granaju se munjevitom brzinom. Računalo
kao stroj ne shvaća nikakvo značenje tih veza, niti informacija.On dokumente shvaća u
kojem su formatu, je li riječ podebljana ili podcrtana. Znači računalo sve to obraduje
kroz niz nula i jedinica, ali ne razumije njihovo značenje kao što ih razumije čovjek
dok čita. Uvodenjem semantičkog weba zamisao je da se dodaju dodatne informacije
o samom značenju promatranih podataka.
Pogledajmo na slici 1. kako izgleda web 2.0 (a))sada, a kako to treba izgledati u web
3.0 (b)) .
Slika 1: Primjer rada semantičkog weba
Iz slike jasno vidimo da web 2.0 sadrži mnoštvo informacija (knjiga,pjesma,osoba,članak)
koje su medusobno povezane vezama, no o samoj vezi i nekom dubljem značenju ne
znamo baš nǐsta. Stoga je u web 3.0 to bolje rješeno. Svaka veza ima svoje značenje.
Zbog toga dobivamo vǐse informacija o konkretnoj informaciji u pravokutniku. Prije
bismo morali pretražiti svaku informaciju za sebe, a onda na osnovu pojedinih infor-
macija donjeti zaključke i povazati u jednu gotovu cjelinu.
5
Sada je to puno jednostavnije, kao što je to vidljivo u primjeru za odredenu osobu.
O toj osobi, automatski zbog informacija na vezama, dobivamo podatak da je ona
pročitala knjigu koja počinje sa člankom, koji je ona napisala. Osim toga, vidljivo je
da ta osoba voli odredenu pjesmu o kojoj je ona pisala u članku, a u knjizi se nalazi
referenca na tu pjesmu. U kratkom vremenu pronašli smo mnoštvo informacija koje
bismo prije morali sami pretražiti, pročitati i zaključiti.
Ako imamo dovoljno takvih veza, one će stvoriti objašnjenja, a objašnjenja su najbitnija
jer ona tvore sadržaj (koncept). Recimo da odaberemo neku riječ, veze će nas povezati
s drugom riječi, a objašnjenja koja se nalaze oko riječi na tim vezama dati će nam
značenje te riječi. Ovaj proces je vrlo jednostavan i lako shvatljiv čovjekovom mozgu.
Zahvaljujući ovakvom postupku web2.0 će dobiti novi izgled i izgledati će ovako:
Slika 2: web2.0 ⇒ web3.0
2.2. Primjeri nadogradnje web 2.0
Iako se semantički web još razvija i prilagodava mi već sada možemo vidjeti nje-
gov djelomični utjecaj. Aktivnim korisnicima interneta je jasno vidljiv napredak , ali
najbolji primjeri se već mogu vidjeti :
• u upravljanju znanjem
• u poduzetnǐstvu korisnik/potrošač (elektronička trgovina)
• Business-to-Business Eletronic Comerce
• wikis
Ali isto tako već sada možemo zamisliti i zaključiti kuda vodi razvoj interneta.
6
3. TEHNOLOGIJA SEMANTIČKOG WEBA
Arhitektura (grada) semantičkog weba je slojevita. Razvoj semantičkog weba se odvija
u koracima, svaki korak gradi sloj na vrhu drugoga.
U izgradnji jednog sloja semantičkog weba na vrhu drugoga slijede se dva principa:
1. Kompatibilnost prema dolje
Ovo pravilo označava da agenti moraju imati mogućnost koristiti i interpretirati
bez obzira ako su informacije u nižim slojevima.
2. Djelomična razumljivost prema gore
Agenti trebaju biti potpuno svjesni slojevitosti, tj. mora postojati mogućnost
uzimanja barem djelomične informacije iz vǐsih slojeva. Nije strogo definirano da
svi alati moraju osigurat ovu funkcionalnost.
Slika 3: Grada semantičkog weba
Svaki sloj ima svoju posebnu zadaću, pa tako i URI i Unicode služe da omoguće
korǐstenje internacionalnog skupa znakova (character seta). XML sloj pomaže pri kre-
iranju strukture web dokumenata koja je spremljena u XML dokumente. Osim toga je
vrlo važan jer je prikladan za slanje putem weba.
RDF i RDFS imaju jednako važnu ulogu u ”kolaču”, jer pomoću njih kreiraju izjave
o subjektima i definiraju rječnici.Ontološki sloj podržava evoluciju rječnika, takoder
može definirati relacije izmedu različitih koncepata.
Logični sloj se koristi kako bi se obogatio ontološki jezik i dozvolio pisanje odredenog
primjenjivog znanja. Sloj dokaza uključuje proces zaključivanja kao i predstavljanje
dokaza u web jeziku i provjere dokaza. Konačni i zadnji sloj je sloj vjerodostojnosti.
7
Njegova uloga je da pruži informaciju kojom će reći treba li se vjerovati danom
dokazu (proof) ili ne.
Web će doseći njegov potpuni potencijal kada korisnici budu imali povjerenje u njegovo
djelovanje (sigurnost) i vjerodostojnost dostavljene informacije.
4. RDF
Dolazak semantičkog weba zahtjeva uvodenje promjena, kako bi mogao korektno
funkcionirati. Sam XML vǐse ne zadovoljava sve potrebe, te se javljaju odredeni pro-
blemi, jer računalo od XML-a ne dobiva podatke o samom značenju informacije. Po-
gledajmo na jednostavnom primjeru:
Neka je dana izjava:
Predavači su podklasa od akademskih članova.
Izjava u sebi ima skriveno značenje, tj. važno je obratiti pažnju na dio izjave ”pod-
klasa od”. Nije na aplikaciji, koja pretražuje, da zna i razumije to skriveno značenje.
Prilikom obrade informacije RDF softveri moraju poštivati skrivena značenja.Na taj
način kreira se model odredene domene.
1 2 Ivan Mikul ic 3
Ana Perkovic4 5 Margareta Horz ic6
Primjer 1.: Primjer XML dokumenta
Kada bi željeli napraviti upit kojim tražimo ispis akademskih članova, kao odgovor
dobili bi samo osobu s imenom ”Ivan Mikulić”,̌sto je s XML gledǐsta točno.
Čovjek, za razliku od računala, razumije izjavu da su predavači podklasa akademskih
članova, te će on na zadani upit navesti: ”Ivan Mikulić, Ana Perković i Margareta
Horžić”, zato jer razumije semantiku informacije.
Ovakav tip informacije treba upotrebu odredene domene koja se ne može prikazati u
XML ili RDF, ali je tipična informacija koja se zapisuje u RDF Shemi. RDFS (RDF
Shema čini informacije semantički dostupne računalu).
RDF je model podataka, čija gradivna jedinica je ”trojka” ( subjekt - predikat -
objekt), nazvana još izjava (iskaz).Subjekt je pojam koji promatramo, o kojem ras-
pravljamo. Ono može biti nekakav autor, knjiga,izdavač, mjesto, ... Kako bismo ra-
zumjeli subjekt u izjavi potreban je predikat.Predikat ima ulogu da objasni kakva je
veza izmedu subjekta i objekta, na primjer: ”je napisao”, ”ima godina”,... Sam objekt
može ponovno biti subjekt ili
8
literal. Odnosno,objekt može imati funkciju subjekta, ako i sama ponovno gradi
trojku, tj. činiti će novu izjavu, a funkciju literala imati će onda kada se na tu vrijed-
nost ne nadovezuje nikakva nova izjava.
Domena RDF-a je neovisna, te sam korisnik definira terminologiju u shema jeziku
zvanom RDF shema. Unutar RDF sheme definiran je rječnik koji se koristi u RDF
modelu podataka,zatim svojstva i vrijednosti subjekta, te veze medu subjektima.
Zahvaljujući RDF shemi prethodni primjer vǐse neće biti problem, jer će ona informa-
cije učiniti strojno pristupačnim.
4.1. Načini prikaza izjave
Postoje tri različita načina prikaza izjave i to:
• baziranu na trojkama
• baziranu na grafu
• baziranu na XML-u
Prvi prikaz baziran na trojkama je najjednostavniji način.Trojka sadrži subjekt,predikat
i objekt koji tvore takozvanu logičku formulu P(x,y). Operacija je binarna i predikat
P pridružuje subjekt x objektu y. Pogledajmo na primjeru kako to uistinu izgleda:
Iskaz:
m David Billingotn je vlasnik web stranice http://www.cit.gu.edu.au/ db
Subjekt = http://www.cit.gu.edu.au/ db
Predikat = je vlasnik
Objekt = David Billingotn
Trojka:
(http://www.cit.gu.edu.au/ db,http://www.mydomain.org/vlasnik-
Stranice,]DavidBillington)
Kao što se može vidjeti dana je izjava zapisana kao trojka, a pri tome su korǐsteni
URI-si.
Drugi prikaz je baziran na usmjerenom grafu. Svaki čvor i veza sadrže vrijednosti,
koje tvore trojke. Dobra strana ovog prikaza je u tome što je graf usmjeren, tj. strelice
(koje označavaju vezu, tj. predikat) pokazuju od subjekta prema objektu. U ovom
slučaju najbolje se može vidjeti kada objekt može biti novi subjekt, a kada je ono
samo literal.
9
PRIMJER2. : Prikaz baziran na usmjerenom grafu
1. (http://www.cit.gu.edu.au/ db,http://www.mydomain.org/vlasnik-Stranice,]DavidBillington)
2. (]DavidBillington,http://www.mydomain.org/telefon,”3875507”)
3. (]DavidBillington,http://www.mydomain.org/korisnik,http://www.cit.gu.edu.au/ arock/defeasible/Defeasible.cgi)
4. (http://www.cit.gu.edu.au/ arock/defeasible/Defeasible.cgi,http://www.mydomain.org/vlasnik-Stranice, “Andrew Rock”)
Slika 4: Usmjereni graf
Iz navedenog primjera jasno se može vidjeti kako je objekt iz prve izjave postao
subjekt u drugoj i trećoj izjavi. Ti objekti postali su novi subjekt u novoj trojci.
Takvim povezivanjem stvaramo koncept, koji čovjeku daje jasnu poruku o odredenom
subjektu.
Podaci u grafovima i dalje nisu prihvatljivi računalu. Stoga se uvodi i treći prikaz
trojki, a on je baziran na XML-u. Unutar XML dokumenta zapisuju se trojke pomoću
tagova < rdf : RDF > i < rdf : Description >, gdje je < rdf : Description >
smješten unutar < rdf : RDF > taga. Pomoću < rdf : Description > tvorimo izjave
o subjektu, koji se identificira na tri različita načina i to:
1. s atributom about - daje referencu na postojeći subjekt
2. s atributom ID - stvara novi subjekt
3. bez imena - stvara se anonimni subjekt
U sljedećem poglavlju primjerima će se prikazati odredena pravila pisanja RDF doku-
menata.Uvidjeti će se korisnosti ovog zapisa i njegove mane, te kako ih izbjeći.
10
4.2. RDF baziran na XML-u
Prikaz trojki koji je baziran na XML-u prihvatljiv je računalu, jer sadrži vǐse infor-
macija i veza o podacima, zbog kojih računalo ”razumije” informacije. Prikaz je nešto
složeniji za čovjeka i potrebna su odredena osnovna znanja za rad s njime.
RDF dokument koji je pisan u XML-u mora sadržavati odredene elemente,a svaki
od tih elemenata ima svoje značenje i svoju svrhu. Glavni elemenat je rdf:RDF ele-
menat, s kojim započinje svaki RDF dokumenat pisan u XML-u .On sadrži jedan ili
vǐse opisa, koji se tvore zahvaljujući < rdf : Description > tagu. Opisima će se tvoriti
željene izjave o odredenom subjektu, a samim time tvoriti će se veze i podatci pomoću
kojih će računalo ”razumjeti” informaciju.
Pogledajmo primjer rdf dokumenta u kojemu je kreirana domena predavača i pri-
padnih kolegija na studiju.
Primjer:
1 2 < !DOCTYPE rdf:RDF [< !ENTITY xsd ” h t t p : //www. w3 . org /2001/XMLSchema#”>]>3 6
7
8 Ivan Mikulić 9 Docent
10 11
12 13 Doris Debel jak14 Docent 15 3416 17
18
19 Nina Nikić 20 Pro f e so r 21 22
23 24 Kombinatorna i d i sk r e tna matematika
25 Ivan Mikulić 26 27
28 29 Kompleksna a n a l i z a
30 Ivan Mikulić31 32
33
34 S lo Ĺ ľ eno s t a lgor i tama
11
35 Doris Debel jak 36 37
38
39 Uvod u raÄŤunarstvo
40 Nina Nikić 41
Primjer 3.:Domena predavača i pripadnih kolegija
U primjeru se može vidjeti da je definiran RDF dokument u kojem postoje opisi pomoću
kojih su stvorene izjave o profesorima, docentima i predmetima. Ako se malo bolje pro-
motri primjer uvidjeti će se da odredene potrebne veze medu profesorima i kolegijima
nisu definirane. Izmedu profesora i predmeta kojeg taj profesor predaje ne postoji
formalna (direktna) veza koja ih povezuje, već samo navedeno ime, ali ne i nekakav
ID-i, JMBG ili OIB. Ovakav postupak nije korektan jer se može dogoditi da postoje
dvije osobe s istim imenom, ali obije osobe ne moraju predavati isti predmet i što je
najvažnije neće imati isti ID-i. Stoga se uvodi rdf:about kako bi se ovakav problem iz-
bjegao. Zahvaljujući ovom atributu može se pri definiranju kolegija stvoriti poveznica
na profesora koji predaje taj kolegij i obratno.
Primjer:
1 2 < !DOCTYPE rdf:RDF [< !ENTITY xsd ” h t t p : //www. w3 . org /2001/XMLSchema#”>]>3 6
7
8 9 Kombinatorna i d i sk r e tna matematika
10 11 12
13 14 Ivan Mikul ic 15 Docent 16
Primjer 4. : Stvaranje poveznica
Ovako napisan RDF dokument biti će korektan, ali se mogu unijeti još neke promjene
u odredenim okolnostima.Na primjer, ako je subjekt već definiran, umijesto atributa
rdf:about koristiti će se atribut ID-i, ali uz pomoć simbola ”]” koji se mora nalaziti
ispred broja 949352 koji predstavlja vrijednost rdf:resource atributa.
12
Na taj način smo direktno povezali profesora s kolegijom. Prilikom pretraživanja ne
bi trebalo postojati problem, jer bilo da se pretražuje po kolegijima ili po predavačima
trebali bi dobiti isti odgovor, zbog veze koja je postavljena. Isto tako, ne bi trebao
postojati niti problem kada bi postojale dvije osobe s istim imenom, jer veza točno
jasno govori koja od dviju osoba predaje odredeni kolegij.
Osim navedenih mogućnosti, definiranja subjekta i stvaranja opisa, koji su nave-
deni, postoje i gnježdeni opisi. Ovisno o potrebi opise možemo definirati uz pomoć
drugih opisa i to tako da unutar jednog opisa definiramo još jedan opis, koji pomaže
pri definiranju prvog opisa. To se naziva ugnježdeni opisi. Ovakav postupak je gotovo
sličan dosadašnjim primjerima. Ugnježdeni opisi se od prvih razlikuju po tome što
se odredeni opis, koji je dosada bio povezan preko atributa, smješta unutar definicije
opisa:
Primjer:
1 2 3
4 < !DOCTYPE rdf:RDF [< !ENTITY xsd ” h t t p : //www. w3 . org /2001/XMLSchema#”>]>5 8
9 10 Kombinatorna i d i sk r e tna matematika11 12 13 Ivan Mikul ic14 docent15 16 17
Primjer 5: Ugnježdeni opis
Definiranje jednog opisa unutar drugog neće pretstavljati problem ako neki drugi
kolegij zatreba ovaj opis, jer se na njega i dalje može povezati upotrebom različitih
atributa.
13
U svim dosadašnjim primjerima opisuju se dvije kategorije, i to: kolegiji i predavači.
Unutar koda u primjerima rdf dokumenata nigdje ne postoji podatak koji će računalu
dati informaciju o kojoj kategoriji je riječ, stoga je potrebno i to na neki način dekla-
rirati. Ovo je moguće učiniti pomoću elementa rdf:type:
Primjer:
1 2 < !DOCTYPE rdf:RDF [< !ENTITY xsd ” h t t p : //www. w3 . org /2001/XMLSchema#”>]>3 6
7
8 9
10 Kombinatorna i d i sk r e tna matematika
11 12 13
14
15 16 Ivan Mikul ic 17 Docent 18
Primjer 6: Korǐstenje rdf:type
Kao što se iz primjera jasno može vidjeti da je unutar svakog opisa korǐsten rdf:type
pomoću kojeg je definirano na koju se kategoriju opis odnosi, a pomoću rdf:resource
smo postavili vrijednost kolegija ili predavača.
Osim navedenih mogućnosti i pravila pisanja rdf dokumenta postoji i mogućnost
skraćivanja sintakse, ali se pri takvom postupku potrebno držati sljedećih pravila:
1. Element predikat koji je sadržan u čvoru dijete sa elementima opisa mogu se
zamjeniti XML atributima, kao u XML dokumentu.
2. Za elemente opisa koji u sebi sadrže element ”type ” može se iskoristiti ime dano
u rdf:type i smjestiti umjesto rdf:Description-a.
14
Slijedećim primjerom će se demonstrirati prethodno navedena dva pravila.
Primjer:
1 < !−− Primjer k o j i skracujemo: −−>2 3 4 Kombinatorna i d i sk r e tna matematika5 6 7
8 < !−− prema prvom p r a v i l u za un i : imeKo l eg i j a v r i j e d n o s t elementa p r e l a z i uv r i j e d n o s t a t r i bu ta kao u XML−u: −−>
9
10 12 13 14 15
16 < !−− zatim prema drugom p r a v i l u −−>17 < !−− Nakon s to se pr imjen i drugo p r a v i l o dobivamo s k r a c e n i o b l i k
prethodno gore navedenog pr imjera −−>18
19 21 22
Primjer 7.: Demonstracija pravila
Prilikom kreiranja RDF dokumenata dogoditi će se da je potrebno definirati vǐse re-
sursa, a ne samo jedan. Na primjer, treba se definirati skupina kolegija koje predaje
jedan profesor. Kod ovog tipa problema koristiti će se elementi s malo neobičnim ime-
nom, a to su kontejner elementi. Oni služe za obuhvaćanje vǐse od jednog atributa ili
resursa. Postoje tri vrste ovog elementa:
• rdf:Bagrdf:Bag elemenat koristiti će se za opisivanje liste vrijednosti koje ne moraju biti
u nekakvom posebnom poretku niti redoslijedu. U ovakvom slučaju možgu se
imati duple vrijednosti.
Primjer ovakvog tipa je popis članova fakulteta koji ne moraju biti poredani
prema nekakvom pravilu ili popis kolegija koje predaje odredeni profesor.
15
Primjer:
1 2 < !DOCTYPE rdf:RDF [< !ENTITY xsd ” h t t p : //www. w3 . org /2001/XMLSchema#”>]>3 5 6 9
10 11 12 13 14 15 16 17
Primjer 8. : Bag element
• rdf:SeqOvaj elemenat koristiti će se kada je potrebno opisati uredenu listu vrijednosti.
Kod ovog tipa se takoder mogu dogoditi vǐsestruke pojave. Tipični primjeri
ovakvog kontejner elementa su vrijednosti koje trebaju biti poslagane po abecedi,
ili nekakve dnevne točke reda ili popis akademskih članova po abecedi,...
Primjer:
1 2 < !DOCTYPE rdf:RDF [< !ENTITY xsd ” h t t p : //www. w3 . org /2001/XMLSchema#”>]>3 5 6 8 9
10 < r d f : l i r d f : r e s o u r c e=”949352”/>11 < r d f : l i r d f : r e s o u r c e=”949318”/>12 13 14 15 16
Primjer 9.: Seg element
16
• rdf:Altrdf:alt elemenat potpuno je drugačiji od prethodna dva. Koristi se za opisivanje
alternativnih vrijednosti. Ovaj elemenat je koristan u slučajevima kada se želi
korisniku pružiti mogućnost odabira jedne od vrijednosti. Primjer ovog tipa
susresti će se kada je potrebno ponuditi nekoliko jezika za prijevod nekog teksta,
ili ako se nudi izbor izmedu zemalja koje treba posjetiti, ili izbor kolegija koje
student može slušati,...
Primjer:
1
2 3 < !DOCTYPE rdf:RDF [< !ENTITY xsd ” h t t p : //www. w3 . org /2001/XMLSchema#”>]>4 6
7 9
10 11 < r d f : l i r d f : r e s o u r c e=”949352”/>12 < r d f : l i r d f : r e s o u r c e=”949318”/>13 14 15 < !−− kao s to se moze p r i m j e t i t i da se umjesto r d f : 1 i r d f : −2 mogu
zamjen i t i oznakom r d f : l i −−>16 17
Primjer 10.: Alt element
Za razumjevanje računala nužno je da svi podaci u RDF dokumentu budu povezani.
Stoga je potrebno i kontejner elemente povezati, jer i onu u sebi sadrže važne informa-
cije, koje se mogu nalaziti u upitu pretraživanja. Kontejneri kao i dosadašnji elementi
mogu imati ID-i te na taj način biti povezani:
Primjer:
1 3 4 5 < r d f : l i r d f : r e s o u r c e=”949352”/>6 < r d f : l i r d f : r e s o u r c e=”949318”/>7 8 9
10
Primjer 11.: Povezivanje kontejnera
17
Kontejner može imati puno članova,ne postoje ograničenja koja odreduje koliko ih
može imati. Ne postoji sintaksa kojom se odreduje broj članova u kontejnerima. Stoga
se uvodi nova forma pod nazivom: ”kolekcija”. Kolekcija je forma koja sadrži odredenu
grupu članova, koji su u grafu reprezentirani kao lista.Unutar grafa imali bismo oko
jednog kolegija listu profesora koji ga predaju. Kada bi se ta lista zapisivala u RDF-u
zapis bi zahtjevao dug i zamršen proces, u tom slučaju kolekcija će omogućiti da se
ovaj proces skrati do minimuma, na sljedeći način:
Primjer:
1 2 3 4 5 6 7
Primjer 11: Zapis pomoću kolekcije
U gornjem primjeru definiran je subjekt kolegij, koji se nalazi pod ID-em ”CIT2112”.
Zatim se želi definirati strogo odredeni profesori koji predaju taj predmet i to se
čini pomoću kolekcije, kao što je i vidljivo u primjeru. Kolekcija se definira pomoću
rdf:parseType=”Collection”, a unutar nje se pomoću opisa definiraju profesori kao su-
bjekti.
U svim dosadašnjim primjerima kreirani su subjekti bili povezivani s drugim su-
bjektima. Tvorene su izjave na različite načine.Sljedeći korak biti će kreirati klase i
instance, jer još uvijek računalo ne shvaća da je predavač akademski član. Ono još ne
dobiva informacije o tom podatku, iako su koristeći RDF bili kreirani opisi resursima
koristeći vlastiti rječnik, ali pri tome nismo kreirali domenu niti samu semantiku do-
mene.To ćemo moći u RDF Schemi (RDFS).zahvaljujući RDFS problem da je nešto
”podklasa” nečega biti će rješen stvoranjem klasi i instanci. Na osnovu klasa moći će
se razvrstati navedeni subjekti i na taj način stvoriti informacije da je nešto podklasa
nečega, na primjer da je svaki predavač akademski član.
4.3. RDF Shema (RDFS)
Koristeći RDF Shemu (RDFS) kreirati će se domena (nečeg na čemu se radi, npr.
domena predavača i kolegija studija) i pridati će joj semantiku. Kako bi se to moglo
učiniti nužno je kreirati klase i instance. Instance su pojedini elementi neke klase. Na
primjer predavač je instanca klase akademski članovi. Povezivanje instance sa klasom
činiti će se pomoču rdf:type.Prethodno je pokazano u proučavanju RDF-a, da su se
stvarale veze sa klasama predavači i kolegiji. Kada bi bilo potrebno proširivati neku
od klasa, neće se morati sve mjenjati niti narušavati prethodno načinjenu klasu.
18
Dovoljno je da se instanca poveže sa njenom klasom i na taj način se pridodaje toj
klasi.
Klase će morati imati odredena ograničenja. Pomoću ograničenja definirati će se
mogući raspon neke klase, a samim time stvarati će se odredena semantika. Ovo će se
šrikazati na konkretnom primjeru.
Primjer 12.:
Kombinatorna i diskretna matematika se podučava sa Teorijom brojeva.
Rečenica iz primjera nema smisla pa se mora napraviti restrikcija na vrijednost predi-
kata. U matematičkom smislu ograničiti će se skup predikata. Isti problem se može
dogoditi i sa skupom subjekata, na primjer:
Predavaonicu P32 podučava Ivan Mikulić
Svakom čovjeku će biti jasno da ova rečenica ne valja, no to ne vrijedi i za računalo
stoga je nužno postaviti restrikciju (ograničenje) na skup subjekata. Sa restrikcijama
na predikat i na subjekt stvoriti će se domena predikata.
Odrediti će se da predikatu ”podučava” mogu biti pridruženi točno odredeni subjekti
i da taj predikat ima svoja ograničenja pri pridruživanju. Na takav način stvarati će
se jasne i korektne izjave, a samim time stvoriti će se odredena semantika.
Nakon što su kreirane klase potrebno je i stvoriti odredene veze medu klasama te na
taj način kreirati će se hijerarhija medu klasama. Jer pomoću takvog poretka moći će
se odrediti da su klase predavači, docenti i asistenti podklase klase akademski članovi
i tako dalje.
Hijerarhija nije samo medu klasama nego i medu predikatima. Tako će se moći
odrediti da je predikat ”predavati” podklasa od predikata ”uključuje”.
Sve dosada objašnjeno prikazati će se na primjeru:
Primjer 13.:
Kombinatornu i diskretnu matematiku predaje Ivan Mikulić.
Iz slike 5. je jasno vidljivo da je kolegij Kombinatorna i Diskretna matematika u klasi
kolegiji, a Ivan Mikulić u klasi Izvanredni profesor, što je podklasa od akademskih
članova. Predikat ”predaje” je ograničen na domenu kolegija i akademskih članova.
19
Slika 5: Hijerarhija i ograničenja
4.3.1. Sintaksa koja je potrebna za pisanje RDFS-e
Temeljne klase:
rdfs:Resource klasa svih subjekatardfs:Class klasa svih klasardfs:Literal klasa svih objekatardfs:Property klasa svih predikatardfs:Statement klasa svih ostvarenih izjava
Temeljna svojstva za definiranje odnosa :
rdfs:Type povezuje instancu sa klasomrdfs:subClassOf povezuje klasu sa jednom od nadklasomrdfs:subPropertyOf povezuje predikat sa jednim nadpredikatom
Temeljna svojstva za ograničavanje predikata
rdfs:domain odreduje domenu predikata Prdfs:range odreduje ograničenje predikata P
20
Korisna svojstva za stvaranje izjava
rdf : subject kreiranje subjektardf:predicate kreiranje predikata Prdf:object kreiranje objektardf : Bag kreiranje Bag klaserdf:Seq kreiranje Seq klaserdf:Alt kreiranje klase alternativardfs:Container kreiranje superklase svih kontejnera, uključujući i prethodna tri
Korisna svojstva :
U nekim situacijama dogoditi će se da su poneki subjekti kreirani, definirani i opisani
negdje na webu. Stoga će biti potrebno na neki način kreirati vezu do tih subjekata.
To ćemo moći zahvaljujući sljedećim svojstvima:
rdfs : seeAlso povezuje subjekt sa drugim subjektom koji ga objašnjavardf:isDefinedBy podsvojstvo od rdfs : seeAlso, povezuje subjekt sa mjestom gdje je definiran.rdfs:comment komentarirdfs : label čitateljeva oznaka subjekta
21
4.3.2. Primjer RDFS-a
1 2 5 6 7 Klasa predavaca
8 Svi predavaÄŤi su akademski ÄŤlanovi .9
10 11 12 13
14 Klasa akademskih ÄŤlanovi .15 16 17 18 19 Klasa c lanova o s o b l j a20 21 22 Klasa k o l e g i j a23 24 25
26 Povezuje j ed ino k o l e g i j e sa predavaÄŤima27 28 29 30 31 32
33 OdreÄ‘uje domenu ( ” k o l e g i j ” ) i raspon ( ” predavac ” )
34 i z super s v o j s t v a ( nadsvo j s tva ) ” ukljuÄŤuje ”35
36 37 38 39
40 To j e s v o j s t v o ÄŤlanova o s o b l j a
41 i s a d r Ĺ ľ i l i t e r a l e za v r i j e d n o s t .42 43 44 45 46
Primjer 14: Zapis u RDFS
22
5. MATEMATIČKA LOGIKA U SEMANTIČKOM
WEBU
Logika je disciplina koja proučava načela zaključivanja.
Sastoji se od :
• formalnog jezika - pomoču kojeg izražavamo znanje
• dobro definirane semantike - definiranje značenja rečenice bez operacionalizacijeznanja
• pravila zaključivanja - automatizirano zaključivanje na osnovu danog zanja
Primjer 15: Primjer zaključivanja
Pretpostavimo da znamo sa su svi profesori članovi fakulteta,
a svi članovi fakulteta su članovi osoblja i da je Ivan profesor.
Gornja rečenica u predikatnoj logici je zapisana na sljedeći način:
prof(X) → fakultet(X)fakultet(X) → osoblje(X)
prof(Ivan)
Iz čega se zaključuje sljedeće:
fakultet(Ivan)
osoblje(Ivan)
prof(X) → osoblje(X)
Na osnovu danih pretpostavki izveden je zaključak da su svi profesori ujedno i članovi
osoblja, što prije zaključka nije bilo poznato.
Zahvaljujući ovakvom načinu zaključivanja mogu se otkriti neočekivane veze i nedos-
ljednosti. Osim za zaključivanje,logiku mogu koristiti i inteligentni agenti za stvaranje
odredenih odluka i odabira odredenih akcija.
Unutar predikatne logike prikazati će se posebni slučajevi, monotona i nemonotona
pravila.
23
5.1. Primjeri monotonih pravila: Obiteljske veze
Prvo je potrebno kreirati bazu činjenica o odnosima u familiji, kao što su otac,
majka, muško i žensko. Zahvaljujući ovim osnovnim obiteljskim vezama mogu se kre-
irati i ostali složeniji odnosi.
Pretpostaviti će se da su u bazi definirani odnosi na sljedeći način:
Slika 6: Odnosi u bazi
Pomoću odnosa definiranih u bazi i odredenih pravila mogu se dalje kreirati odnosi
kao što je na primjer roditelj,brat,sestra, ujak, baka,predak,...
Primjer 16: Veza roditelj
roditelj je ili otac ili majka
majka(X,Y)→ roditelj(X,Y)Otac(X,Y) → roditelj(X,Y)
Primjer 17: Veza brat
Brat je muška osoba koja djeli roditelja sa drugom osobom
muško(X),roditelj(P,X),roditelj(P,Y),neisti(X,Y)→ brat(X,Y)
Ovaj odnos je nešto složeniji od prethodnih odnosa. Osim toga, on zahtjeva korǐstenje
predikata ”ne isti”, koji označava nejednakost. Na sličan način se definira veza sestra,
koja se od brata razlikuje u tome što je to ženska osoba.
Zahvaljujući definiranju veze brat, vrlo jednostavno se definira veza ujak, jer je on
osoba koja je brat jednog od roditelja.
Primjer 18: Veza ujak
Ujak je brat od roditelja
brat(X,P),roditelj(P,Y) → ujak(X,Y)
Na sličan način definiraju se i ostali članovi familije, tj. odnosi članova u familiji.
Pri stvaranju daljnjih odnosa koriste se prethodno definirani odnosi, kao što se može
vidjeti pri definiranju odnosa ujak. Odredeni odnosi biti će za nijansu složeniji od
drugih odnosa, ali to ne znači da se ne mogu definirati.
24
5.2. Sintaksa monotonih pravila
Kod pisanja monotonih pravila potrebno je poznavati i razlikovati sama pravila
(kako izgledaju, od čega se sastoje, kako se označavaju), formulu pravila, činjenice,
logičke programe i ciljeve.
vjeranKupac(x),god(X)> 60 → popust(X)
Svako pravilo izgradeno je od pojedinih djelova:
varijable - nositelji vrijednosti - varijabla X
konstante - nositelji fiksnih vrijednosti - vrijednost 60
predikati - povezuje subjekt sa objektom - predikat vjeranKupac
funkcijski simboli - vraćaju vrijednost za odredeni argument - argument god
Pravilo ima svoju formu : B1,B2,B3,...,Bn → A, koja je izgradena od tzv. ato-marnih formula (A,B1,...,Bn). A je glava pravila, dok su pojedine atomarne for-
mule B1, B2,...,Bn premise pravila. Skup premisa (B1, B2,...,Bn) čine tjelo pravila.
Zarezi u tjelu pravila predstavljaju konjukcije medu premisama, pa stoga se pravilo
čita na sljedeći način:
Ako su B1 i B2 i ... i Bn istiniti, onda je i A istinit.
Pravilo se označava sa malim slovom r (rule = eng. pravilo).
Konkretan primjer pravila zahtjeva dva uvjeta za ostvarenje popusta, i to: da su
vjerni kupci i da imaju preko 60 god. Ne postoji nikakva premisa unutar pravila koja
tvrdi da medu kupcima postoji odredeni kupac, koji ili ima pravo ili nema pravo na
drugačiji popust medu svim kupcima te trgovine. Iz čega zaključujemo da ovo pravilo
vrijedi za sve kupce koji zadovoljavaju uvjet. Stoga se pravilo može zapisati kao formula
koja glasi ovako:
pl(r): ∀ X1, ...Xk ((B1 ∧ B2∧...∧ Bn )→ A),
gdje su X1, X2,...,Xk varijable, koje se pojavljuju u A,B1,...,Bni pl(r) predstavlja oznaku za formulu pravila
Činjenica je atomarna formula koja u sebi precizira odredenu varijablu. Na primjer:
” vjeranKupac(a77) ”, što predstavlja odredenog kupca s Id-om = a77 , koji je odan.
Logički program je trenutno jedan od složenijih pojmova. On predstavlja konačan skup
činjenica i pravila. Objašnjava logičko prevodenje pl(P), što je skup svih izrečenih pre-
dikatno logičkih interpretacija pravila i činjenica koje se nalaze u P.
Za razumjevanje sintakse potrebno je razumijeti i ”ciljeve”. Ciljevi su upiti G postav-
ljeni logičkom programu P.
25
Cilj ima sljedeću formu: B1,...,Bn →.
Kod ciljeva promatramo dva slučaja i to :
1. n= 0
2. n6= 0
Kod prvog slučaja će se dogoditi prazan cilj, upita upućenog programu nema. Dok kod
drugog slučaja se cilj interpretira u predikatnoj logici.
Njegova interpretacija je oblika:
∀ X1...∀Xk (¬ B1 ∨ ...,∨ ¬Bn )
Zatim se provjerava postoji li vrijednost za koju je p istinit. Istinitost se provjerava
pomoću matematičke metode ”dokaz kontradikcijom” . Postupak je sljedeći:
Pretpostavimo da znamo p(a)
i imamo cilj p(X)→
Postupak dokazivanja se provodi na sljedeći način. Cilj negiramo, što znači da ne pos-
toji element sa svojstvom p. Budući da u pretpostavci je dana i formula p(a),koja daje
do znanja da postoji ”a” koji ima traženo svojstvo. Što znači da negacija nije istinita,
jer smo došli do kontradikcije. Time je dokaz završen i dobivena je istinitost cilja.
Za odgovaranje na upite koristiti će se interpretacija pravila,činjenica i upita, te
dobro poznate semantike predikatne logike.
Ako je dan program P i upit : B1,B2,B3,...,Bn → sa varijablama X1, X2,...,Xk , odgo-vor će biti pozitivan onda i samo onda ako vrijedi :
pl(P)|= ∃ X1...∃ Xk (B1 ∧ ...∧ Bn )ili ekvivalento:
pl(P)∪ ¬ ∃ X1...¬∃ Xk (B1 ∧ ...∧ Bn)je kontradiktorno.
Budući da komponente logičkog jezika mogu sadržavati bilo koje značenje, uvodimo
”model” A, kojemu se pridružuje točno odredeno zančenje.Kada je formula istinita u
modelu A zapisuje se kao A |= ϕ Formula ϕ slijedi iz skupa M (skupa formula),ϕ jeistinit u svakom modelu A u kojem je M istinit.
26
Primjer 19: Dokazivanje istinitosti
Pretpostavimo da je P program
i da su dani:
p(a)
p(X)→ q(X)upit: q(X)→
q(a) slijedi iz formule pl(P).
Zatim, ∃Xq(X) koji slijedi iz pl(P), takav da je pl(P)⋃¬∃Xq(X) kontradiktorno.
U ovom slučaju odgovor je pozitivan.
Kada bi sadržavali q(b)→ upit, odgovor bi bio negativan jer q(b) ne slijedi iz pl(P).
U svim dosadašnjim primjerima i promatranjima odgovori su ili bili pozitivni (da) ili
negativni(ne).Ponekada takav odgovor neće odgovarati i neće biti zadovoljavajući. U
takvim situacijama raditi će se prihvatljive zamjene.
Na primjer dana je činjenica p(a) i upit p(X)→. Odgovor bi bio ” DA” , ali nijezadovoljavajući.
Najbolje objašnjenje ovakvog problema je kao da vas netko pita ”Znate li koliko je sati?”
Vi pogledate na sat i odgovorite ”DA!”, u smislu da znate koliko je sati, ali ne odgovorite
koje je vrijeme. Pod tim se smatra da je odgovor točan, ali ne i zadovoljavajuć. U
ovakvim situacijama odgovor bi bio prihvatljiva zamjena X/a.
Konstanta a iz prethodnog primjera se naziva ”osnovni svjedok” (ground witness).
5.3. Opisno logički programi (Description Logic Programs (DLP))
Deskriptivna logika i Horn logika su ortogonalne, tj. ni jedna nije podskup od druge,
već se promatraju kao ispreplitanje obiju logika. U ovom slučaju križanje horn logike
sa OWL se naziva Opisno logički programi (DPL).
Postoje odredene prednosti DPL-a:
• modelar sam odlučuje koju od dviju logika želi koristiti. On ih prilagodava sebii svojem iskustvu.
• Kada se pogleda sa strane implementacije pružaju se dvije mogućnonsti: koristitideduktivna pravila ili logička zaključivanja. Ovisno o potrebi implementacije
odabire se jedno.
• Prethodno iskustvo pokazuje da korǐstenjem OWL-a postojeća ontologija nemaveliku potrebu korǐstenja konstruktora van DLP-a.
U nastavku ovog teksta prikazati će se pojedine konstruktore RDF Sheme i OWL-a,
Boolean operatore, koji mogu biti prikazani u Horn logici, ali isto tako prikazati će se
i problemi kada se neće moći izraziti.
27
5.3.1. Primjeri prikaza u Horn logici
Primjer 20: Prikaz RDF trojke kao činjenicu
RDF trojka (a,P,b) može se prikazati kao činjenica P(a,b)
Primjer 21: Prikaz instance
Instanca koja je deklarirana u formi type(a,C) i označava da je a
instanca klase C biti će prikazana kao činjenica C(a)
Primjer 22: Prikaz C podklasa od D
Vrlo je jednostavno prikazati da je C podklasa od D
C→D
Primjer 23: C je domena svojstva P
P(X,Y)→ C
Primjer 24: Prikaz sameClassAs(C,D)
Ovaj se prikaz rastavlja na dva pravila:
C(X)→ D(X)D(X) →C(X)Slično će vrijediti i za samePropertyAs.
Primjer 25: Prikaz tranzitivnosti
P(X,Y),P(Y,Z)→ P(X,Z)
Primjer 26: Presjek klase C1 i C2 su podklasa od D
C1(X) ,C2(X) → D(X)
Primjer 27: C je podklasa presjeka D1 i D2
C(X) → D1(X)C(X) → D2(X)
Primjer 28:Unija C1 i C2 su podklasa od D
C1(X) → D(X)C2(X) → D(X)
Prikaz da je C podklasa unije D1(X) i D2(X) je ne moguće jer zahtjeva disjunkciju
glave pravila, što nije moguće u Horn logici.
Problem će nastati i kada bi bilo potrebno zapisati owl izjavu: someValuesFrom(P,D)subClassOfC.
Takoder se ni ograničenja ni komplementi klase ne mogu izraziti pomoću Hornerove
logike.
28
5.4. Semantička web pravila (SemanticWeb Rules Language(SWRL))
Semantička web pravila su kombinacija OWL DL-a sa Horn logikom, koja su pisana u
Datalog RuleML-u.
Oblik ovog pravila je :
B1,B2,B3,...,Bn → A1,A2,A3,...,An,
gdje zarezi predstavljaju konjukciju na obje strane
A1,A2,A3,...,An,B1,B2,B3,...,Bn predstavljaju jedan od mogućih oblika: C(x), isto-
Kao(X,Y) ili razlicitOd(X,Y), gdje je C OWL opis, P je OWL predikat, a x,y su
Datalog varijable.
Ako u glavi pravila imamo vǐse od jednog atoma, pravilo možemo transformirati u vǐse
pravila koji u glavi pravila imaju samo jedan atom.Kompleksnost SWRL je u tome što
se OWL izrazi (npr.restrikcije),mogu pojaviti u glavi ili tjelu pravila .
SWRL je bolji pristup od DLP, jer DLP koristi vrlo konzervativan pristup,pokušavajući
iskoristiti prednosti oba jezika. Dok SWRL koristi maksimalni pristup i ujedinjuje nji-
hovu ekspresivnost. Kod SWRL-a je pravi izazov pronaći njegov podjezik koji će
pronaći ravnotežu izmedu ekspresivne moći i računalne obradivosti.
Kandidat za podjezik je OWL DL ekstenzija sa DL-sigurnim pravilima koji zahtjevaju
da se u svakoj varijabli mora pojaviti ne opisni logički atom u tjelu pravila.
5.5. Nemonotona pravila
Kod monotonih pravila vrijedilo je sljedeće, pravilo je dokazano , ako smo jednom
dokazali premise pravila. Pravilo je tada postalo primjenjivo i glava pravila se izvo-
dila kao zaključak. Kod nemonotonih pravila je sve drugačije. Pravilo se ne može
primjenjivati iako su sve premise poznate, jer moramo uzeti u obzir i suprotnu stranu
rasudivanja. Takva pravilase zovu ”ponǐstavajuća” (defeasible) pravila, zato što se
mogu ponǐstiti drugim pravilima. Kako bi se pravila mogla razlikovati koriste se stre-
lice drugačijeg oblika: p(x)⇒. Tako je jasnije kada se govori o monotonim, a kada oponǐstavajućim pravilima.
Kod ovog tipa pravila mogu se dogoditi sukobi činjenica: q(a) i ¬q(a). Jasno je daće se ova dva pravila medusobno blokirati, stoga se ovaj problem rješava postavljanjem
prioriteta medu pravilima. Jedno od pravila bit će jače od drugog pravila.
29
Postoji nekoliko principa pomoću kojih odredujemo prioritete pravilima, neki od
njih su:
• Subjekt jednog pravila može biti pouzdaniji od subjekta drugog pravila ili jed-nostavno može imati vǐsi autoritet.
• Jedno pravilo može imati prednost pred drugim jer je novije.
• Pravilo može imati prednost pred drugim jer je specifičniji. A specifični slučajevisu jači od općih slučajeva.
Prioritete medu pravilima označavamo oznakom: ”>”(r1>r2). Ova oznaka nema
nikakvih uvjeta koje pravila moraju ispunjavati. Jedini uvjet koji je bitan i nezaobila-
zan da pravila ne mogu biti ciklilčka.
5.5.1. Sintaksa ponǐstavajućih pravila
Ponǐstavajuća pravila imaju sljedeću formu:
r:L1,...,Ln ⇒ L,gdje r predstavlja oznaku za skup premisa L1,...,Ln ,
L označava glavu pravila.
Premise L1,...,Ln su pozitivne ili negativni literali (atomarne formule). U pravilu se ne
pojavljuju funkcijski simboli.
Radi lakšeg korǐstenja glava pravila se označava glava(r), a tjelo se označava tjelo(r).
Ponǐstavajući logički program je trojka (F,R,>), gdje je F - skup činjenica, R- Skup
ponǐstavajućih pravila i aciklička binarna relacija na R.
30
5.5.2. Primjer ponǐstavajućih pravila - Posredovanje trgovine(BrokeredTrade)
Primjer prikazuje korǐstenje pravila u elektornskim aplikacijama. Ovdje postoje tri
osobe: broker, najmodavac i podstanar. Brokerova dužnost je da zadovolji i najmo-
davca i podstanara.
Primjer 29: Najam stana
Tomislav traži stan najmanje veličine 45m2 s barem 2 spavaće sobe. Ako
je na trećem ili još višem katu zgrada mora imati lift. Ujedno i kućni
ljubimci moraju biti dopušteni.
Tomislav je spreman platiti 2000 kn za apartman od 45m2 smještenih u
centru grada ili 1500 kn za isti stan u predgradu. Osim toga, voljan
je platiti dodatnih 50 kn po kvadratnom metru većeg stana i 20 kn po
kvadratnom metru vrta.
Nije u mogućnosti platiti više od 4000 kn. Ako mu se ponudi da bira,
izabrati će najjeftiniju soluciju. Njegov sekundarni prioritet je
prisustvo vrta, a njegov najniži prioritet je dodatan prostor.
5.5.3. Formalizacija Tomislavovih zahtjeva
Slika 7: Zahtjevi
31
Nakon što su definirani predikati mogu se kreirati pravila.
Prvo pravilo:
r1 :⇒ prihvatljivo(X)Svaki stan ima prioritet.
Y pretstavlja neprihvaćanje Tomislavovih uvjeta.
r2: spavace(X,Y),Y 4000 ⇒ ¬ prihvatljivo(X)
Pravila r2-r6 su iznimke prema pravilu r1, stoga vrijedi sljedeće=
r2 > r1, r3 > r1,r4 > r1,r5 > r1,r6 > r1
Sljedeći zadatak je postaviti pravilo za izračun cijene i izračunati cijenu stana:
r7 : velicina(X,Y),Y ≥ 45,vrt(X,Z),centar(X) ⇒ ponuda(X, 2000 + 20Z + 50(Y -45))r8 : velicina(X, Y ), Y ≥45, vrt(X,Z),¬ centar(X) ⇒ ponuda(X, 1500 + 20Z + 50(Y -45))
Stan je prihvatljiv ako je iznos koji će Tomislav platiti manji od cijene koju odredi
najmodavac.
r9 : ponuda(X,Y), cijena(X,Z), Y < Z ⇒ ¬ prihvatljivo(X)r9 > r1 - pravilo 9 je jace od pravila jedan.
Sljedeće što je potrebno uvidjeti jest koji su apartmani dostupni i koja su njihova
svojstva. Svojstva apartmana imaju važnu ulogu u odabiru stana . Oni moraju zado-
voljavati uvijete(pravila) koje je ponudio Tomislav, kako bi ga on iznajmio. Sve će biti
jasnije iz primjera.
Primjer 30: svojstva dostupnog apartmana
Neka je dan apartman s oznakom a1 njegova svojstva su:
spavace(a1,1)
velicina(a1,50)
centar(a1)
kat(a1)
¬ kat(a1)ljubimci(a1)
vrt(a1,0)
cijena(a1,2000)
32
Slika 8: Dostupni stanovi
Iz čega je jasno vidljivo da stan pod oznakom a1 ima jednu spavaću sobu, veličine je
50 m2. Nalazi se u centru grada, nema lift i dozvoljeno je imati kućnog ljubimca, ali
nema vrt. Cijena mu je 2000 kn.
U sljedećoj tablici biti će prikazani svi dostupni stanovi sa svojim svojstvima.
U tablici su pohranjeni svi stanovi koji su dostupni na tržǐstu,ali neće svi zadovo-
ljavati uvjete koje je postavio Tomislav, a samo jedan ili ni jedan će Tomislav odabrati.
Ovakve tablice se pohranjuju u relacijskoj bazi podataka ili u postavkama semantičkog
weba u RDF sustavu.
Nakon što su podaci iz tablice dostupnih stanova i Tomislavovih zahtjeva usporedeni
dobiveni su rezultati:
Slika 9: Rezultati usporedenih podataka
33
Iz Tablice (slika 8) je vidljivo kako od svih sedam stanova uvjete i devet pravila koji
su kreirani na osnovu uvjeta zadovoljavaju stanovi s oznakama: a3,a5 i a7.
Sljedeći zadatak je odabrati od navedena tri stana konačni stan koji će Tomislav unaj-
miti. Pri odabiru će pomoći Tomislavovi kriteriji, a to su redom : cijena, veličina vrta
i veličina stana, pri čemu najveći prioritet ima cijena.
Uvjeti su zapisani su u matematičkoj logici na sljedeći način:
r10: prihvatljiv(X) ⇒ najjeftiniji(X)
Ovo pravilo označava da će Tomislav odabrati onaj stan koji je najjeftiniji i kao takav
ima prioritet pred drugim stanovima.
r11: prihvatljiv(X),cijena(X,Z),prihvatljiv(Y),cijena(Y,W),WZ ⇒ ¬najvećiVrt(X)
Ovo pravilo izmedu a3 i a5 odabire samo a5 jer a3 nema vrt, tj. njegova velicina je 0.
Stoga sljedećim pravilom Tomislav iznajmljuje stan.
r14:najvećiVrt(X) ⇒ iznajmljen(X)
Iz navedene selekcije je jasno da će Tomislav unajmiti stan sa oznakom a5, jer vǐse
nema niti jedan stan s kojim bi nastavili daljnju selekciju. Kada bi se pri selekciji
pravilom r13 dogodilo da ima vǐse stanova s većim vrtom kao što je to bilo kod pravila
r11. Tada bi Tomislav odabrao onaj stan koji je veći kvadraturom. Stoga je i za takve
slučajeve potrebno definirati pravilo koje ćemo označiti s r15 pravilo, a ono će osigurati
ispravan i konačan odabir.
r15:najvećiVrt(X),velicina(X,Z),najvećiVrt(Y),velicina(Y,W), W>Z ⇒ ¬ iznajmljen(X)
Kada se selekcija u primjeru ne bi zaustavila kod r13 pravila i da pravilo r14 nije
označilo stan s oznakom a5 kao stan koji treba unajmiti,onda bi ovo pravilo završilo
selekciju odabirom većeg stana.
34
5.6. RuleML -Jezik za označavanje pravila
Sama vizija semantičkog weba zahtjeva mogućnost da se znanje može zapisati u formi
pravila koja je dostupna računalu. U ovom poglavlju dati će se kratki pregled kodiranja
monotonih pravila u XML-u.
Postupak označavanja i kodiranja na webu raditi će se prema RuleML standardu.
RuleML nije jedan jezik nego skup označavajućih (markup) jezika. Oni odgovaraju
različitim vrstama pravila jezika.
Jezgra RuleML-a je Datalog, čija funkcija ne uključuje Horn logiku. Pisanje pravila
pomoću Datalog RuleMl-a je jednostavno. U sljedećoj tablici prikazan je ključni rječnik
Datalog RuleML-a, te konkretan primjer korǐstenja tog rječnika.
Slika 10: RuleML rječnik
Primjer 31: pisanja pravila upotrebom RuleML-a
PRAVILO=
”Kupac ima popust na proizvod u iznosu od 7,5 posto ako je kupac član i ako je pro-
izvod luksuzan. ”
Sintaksa ovog pravila izgleda ovako:
B1,B2 → A
35
To jest:
Ako je kupac član i ako je proizvod luksuzan → kupac ima popust na proizvod 7.5posto.
Gdje je A glava pravila, a B1 i B2 su atomske formule ili atomi koji čine tjelo, a pove-
zani su konjukcijom.
Važno je znati raspoznati unutar pravila što je glava, a što tijelo. Zatim što čini
atom i što su predikat i varijabla unutar atoma. Zahvaljujući tom saznanju pisanje
pravila u RuleML-u je sasvim jednostavno.
1 2 3 4 popust5 kupac6 pro izvod7 7 .5 posto8 9
10 11 12 13 c lan14 kupac15 16 17 luksuzan18 produkt19 20 21 22
Primjer 38. :Pisanje pravila u RuleML-u
Na osnovu rječnika i prethodnog poznavanja XML-a jasno je vidljiv zapis pravila, nje-
gova glava i tjelo, te pojedini elementi koji su definirani unutar njih.
Proširenje RuleML-a je SWRL- Semantička web pravila. Za primjer kodiranja mono-
tonog pravila pomoću SWRL-a koristiti će se prethodno prikazan primjer veze ujak.
Primjer 39.: Veza ujak
brat(X,Y),djeteOd(Z,Y) → ujak(X,Z)
U XML sintaksi pomoću SWRL-a ova veza ima sljedeći zapis:
36
1 2 3 4 X5 Z6 7 8 9
10
11 X12 Y13 14 15 Z16 Y17 18 19 20
Primjer 39. : Kodiranja monotonog pravila pomoću SWRL-a
37
6. MODELIRANJE PODATAKA
Postoji mnogo načina za modeliranje podataka, neki od njih su jako dobro istraženi i ra-
zvijeni. Ima dosta načina na koje se može raditi s podacima, stoga je važno imati ih sve
u vidu i znati odabrati baš onaj koji u tom trenutku najbolje odgovara. U ovom po-
glavlju dan je pregled odredenih metoda,na osnovu kojih će se uvidjeti odredene mane
i dobre strane integracije podataka. Prva i dobro poznata metoda je tablična metoda.
Tablični podaci su podaci koji su pohranjeni u tablicama, kao što su na primjer Excelove
tablice ili na primjer HTML tablice. Podatkovne tablice su dobre jer su jednostavne za
čitanje i manipuliranje. Jednostavan primjer tablice može se vidjeti na slijedećoj slici :
Ovako spremljeni podaci očigledno imaju svoja neka ograničenja, kao na primjer pos-
Slika 11: primjer tablice
ljednji stupac ”Otvoreno” na prethodnoj slici.Iz slike je vidljivo da je prikazana samo
lista dana kada taj restoran radi. Ako je potrebno dodati radno vrijeme, ili nekakvo spe-
cijalno radno vrijeme, npr. kasno navečer ili nedjeljom, tada nastaje problem.Takav
nedostatak se može izbjeći upisivanjem potrebnih podataka u zagrade pored radnih
dana. Ali takav trik neće biti kvalitetan, jer će se njegovi nedostatci uočiti već kod
pretraživanja. Na primjer, odredeni program pretražuje u tablici podatak:”Koji res-
toran radi petkom kasno navečer ?“ Program ne može znati da se u stupcu ”otvoreno”
nalaze dvije kategorije podataka i da se medu njima nalazi odgovor na njegov upit.
Osim tog navedenog problema postoji i nešto složeniji, a to je ako su ponudene dvije ta-
blice paralelno. Tablicu, koja sadržava popis svih restorana sa svim potrebnim poda-
cima i tablicu, koja sadrži informacije o restoranima koje su preporučili bivši gosti ili
prijatelji. Sada kada bi trebali napraviti upit da pronade restoran koji je blizu odredenog
mjesta i da su ga ujedno predložili gosti i prijatelji, upit nimalo ne bi bio jednosta-
van za pretraživanje, jer bi program morao pregledati obadvije tablice.
38
Stoga je ovaj model dosta krut, limitiran i često ga se ne može promijeniti.
Zbog ovakvih situacija javlja se potreba za relacijskim podacima. Relacijske baze po-
dataka su vrlo brzi i moćni alati za spremanje većeg seta podataka, gdje je mo-
del podataka lako razumljiv i jednostavan za korǐstenje. Takve baze podataka pove-
zuju različite tablice na standardizirani način. Ovako zapisani podaci o restoranu pri-
kazani na puno korisniji i fleksibilniji način, te neće nastajati problem pri kreiranju
složenijih upita.
Kod ovakog modela podataka nastaje problem pri nadogradivanju baze ili povezivanju
dvaju baza podataka. Takav tip problema je na primjer nadogradnja već postojeće
baze podataka nekih restorana sa još jednom bazom podataka koja sadrži poneke od
tih restorana, ali u funkciji bara. Jednostavnije objašnjeno poneki restoran osim što
poslužuje hranu poslužuje i pića. Ali su informacije o pićima spremljene u zasebnoj
bazi podataka.
Sada se postavlja slijedeće pitanje:”Kako nadograditi tablicu tako da podržava po-
datke i o novim barovima i o restoranima?“ Najjednostavniji način bio bi linkova-
njem , te na taj način ne bi bilo potrebno mijenjati cijelu strukturu tablice. Ali to
ne bi u potpunosti riješilo sve nedostatke. Prvi nedostatci su postojanje duple adrese.
Adresa bi bila upisana uz restoran zbog prve baze i uz bar u drugoj bazi, a radi se
o istom mjestu. Osim toga, nastao bi problem prilikom pretraživanja hrane i pića.
Tako se i ovaj model nije pokazao kao najbolje rješenje, pa se zbog toga uvode Venue
tablice, koja ima odvojene tipove”bar“ i
”restoran“, kao na slici :
Slika 12: Primjer Venue tablice
39
Ovaj model podataka bi možda bio učinkovito rješenje, ali zahtjeva puno pro-
mjena, kao što su transformiranje podatka u novi model. Postupak zahtjeva promi-
jenu upita i kodove koji su pisani u ovisnosti o prethodnoj strukturi baze, te ako je
kreirana web stranica na osnovu te baze podataka.Potrebno je smisliti kako da se
sve promijeni, a da se pritome ne dira kode stranice.
S ovim modelom mogu se kreirati i složene sheme podataka, kao što su CRM sheme.
Kako bi kreirali što fleksibilniji model koji se može nositi s promjenama u venue tablice
uvodi opcija ”Ključ/vrijednost ” , s kojom se učinkovito može povećavati i mjenjati
shema, ovisno o potrebama.Jednostavno se može dodati novo polje u tablicu i nova svoj-
stva koja se odnose na bilo koji od postojećih objekata.
Ovaj tip Ključ/vrijednost i nije nǐsta novo, te ga koristi puno ljudi. No ovakav način pri-
kaza ne smatra se dobrom idejom, jer izvedba baze podataka jako pati i gubi se puno na nor-
malizaciji zbog uvodenja parova ključ/vrijednost.
Jedan od kvalitetnijih modela podataka je usmjereni graf. Usmjereni graf je struktura
podataka koja se sastoje od čvorova i usmjerenih strelica. U čvorovima su spremljeni
podaci, a strelice objašnjavaju veze izmedu čvorova. Uz usmjerene grafove potrebne
su, već spomenute, trojke.
Slika 13: Primjer trojke
Subjekt , predikat i objekt čine jednu trojku. Objekt – se dijeli na:
1. Entitet
2. Literal
Objekt se dijeli u dvije skupine jer ga se može povezati u novu trojku. Stoga on može
biti literalna vrijednost, ne povezuje se s nijednom trojkom, a ako ga se povezuje s
novom trojkom onda postaje entitet.
Osim objekta povezati se u novu trojku može i subjekt. Na primjer u prethodnom
primjeru se to može najbolje vidjeti.Ridley Scott osim što je režirao Blade Runner-a
mogao je i glumiti u nekom filmu.Potrebno je napraviti novu trojku, koja glasi Ridley
Scot glumio je u slučaju pelikan.
40
Dok objekt u gornjoj rečenici može postati subjekt, kao npr. Blade runner izlazi
1.prosinca. 2009. Stvorena je nova trojka u kojoj je objekt iz prethodne trojke postao
subjekt ( entitet) u novoj trojci.
Povezivanjem vǐse ovakvih trojki dobivamo usmjereni graf (slika 13.).
U čvorovima se nalaze vrijednosti subjekta i objekta dane trojke , a strelice usmjeruju
Slika 14: Usmjereni graf
od sub prema objektu i objašnjavaju vezu izmedu tih čvorova, a veza je predikat dane
rečenice.
Sve ovo može se primjeniti na modele venue tablica ( slika 14.).
Iz slike je jasno da ima restoran koji se zove Delli Llama, te da poslužuje Deli kuhi-
Slika 15: Primjer Venue tablice i pripadnog usmjerenog grafa
nju i da je jeftin. Isto tako se iz slike vidi da se nalazi u North Beachu u San Francisc-u .
41
Sljedeći zadatka je isprogramirati trojke u python programu. U programu je defi-
nirana klasa SimpleGraph u kojoj se nalaze sve funkcije potrebne za rad s trojkama.
Na samom početku, nalazi se funkcija koja pravi 3 indexa i to spo, pos i osp. Index
sadrži različite permutacije svake trojke. Točnije spo predstavlja poredak sub,pred i
obj. Svaki index je konstruiran od riječnika koji u sebi ima riječnike, a ti riječnici
sadrže setove (skupove).
import csv
c l a s s SimpleGraph :de f i n i t ( s e l f ) :
s e l f . spo = {}s e l f . pos = {}s e l f . osp = {}
Primjer 40. : Definiranje klase SimpleGraph
• Uvode se csv moduli jer će kasnije biti potrebani za pokretanje i snimanjeKreiara se klasa SimpleGraph i u njoj funkcija koja stvara 3 indeksa.
de f add ( s e l f , ( sub , pred , obj ) ) :
s e l f . addToIndex ( s e l f . spo , sub , pred , obj )s e l f . addToIndex ( s e l f . pos , pred , obj , sub )s e l f . addToIndex ( s e l f . osp , obj , sub , pred )
Primjer 41. : Definiranje funkcije add
• definira se funkcija add koja permutira poredak sub, pred i obj da odgovaraporetku svakog indeksa.
de f addToIndex ( s e l f , index , a , b , c ) :
i f a not in index : index [ a ] = {b : s e t ( [ c ] ) }e l s e :
i f b not in index [ a ] : index [ a ] [ b ] = s e t ( [ c ] )e l s e : index [ a ] [ b ] . add ( c )
Primjer 42. : Definiranje funkcije addToIndex
• ovom funkcijom dodaje trojku u odredeni indeks tako da stvara rječnike i se-tove.Ide redom i provjerava nalazi li se ”a” u indeksu, ako nije stavi ga.Ako je,
gledamo je li ”b” u indeksu , ako nije stavi ga, ako je doda ”c”
42
de f remove ( s e l f , ( sub , pred , obj ) ) :
t r i p l e s = l i s t ( s e l f . t r i p l e s ( ( sub , pred , obj ) ) )f o r ( delSub , delPred , delObj ) in t r i p l e s :
s e l f . removeFromIndex ( s e l f . spo , delSub , delPred , delObj )s e l f . removeFromIndex ( s e l f . pos , delPred , delObj , delSub )s e l f . removeFromIndex ( s e l f . osp , delObj , delSub , delPred )
Primjer 43. : Definiranje funkcije remove
• Brǐse uzorak trojke iz grafa, ali s time da u ovoj funkciji, ona još gleda i svenjegove permutacije. Ali za to mu je potrebna slijedeća funkcija.
de f removeFromIndex ( s e l f , index , a , b , c ) :
t ry :bs = index [ a ]c s e t = bs [ b ]c s e t . remove ( c )i f l en ( c s e t ) == 0 : de l bs [ b ]i f l en ( bs ) == 0 : de l index [ a ]
except KeyError :pass
Primjer 44. : Definiranje funkcije removeFromIndex
• Ovom funkcijom brǐse se trojka iz indeksa, ali isto tako i ako postoji trojke kojenisu poveznane. Takoder, i ako je čvor prazan. Iznimka postoji u slučaju da
nedostaje ključ , tj da se dogodilo ne pravilno brisanje.
de f t r i p l e s ( s e l f , ( sub , pred , obj ) ) :
t ry :i f sub != None :
i f pred != None :
i f obj != None :i f obj in s e l f . spo [ sub ] [ pred ] : y i e l d ( sub , pred ,
obj )
e l s e :f o r retObj in s e l f . spo [ sub ] [ pred ] : y i e l d ( sub ,
pred , retObj )e l s e :
i f obj != None :f o r retPred in s e l f . osp [ obj ] [ sub ] : y i e l d ( sub ,
retPred , obj )
e l s e :f o r retPred , ob jSet in s e l f . spo [ sub ] . i tems ( ) :
43
f o r retObj in objSet :y i e l d ( sub , retPred , retObj )
e l s e :i f pred != None :
i f obj != None :f o r retSub in s e l f . pos [ pred ] [ obj ] :
y i e l d ( retSub , pred , obj )
e l s e :f o r retObj , subSet in s e l f . pos [ pred ] . i tems ( ) :
f o r retSub in subSet :y i e l d ( retSub , pred , retObj )
e l s e :
i f obj != None :f o r retSub , predSet in s e l f . osp [ obj ] . i tems ( ) :
f o r retPred in predSet :y i e l d ( retSub , retPred , obj )
e l s e :f o r retSub , predSet in s e l f . spo . i tems ( ) :
f o r retPred , ob jSet in predSet . i tems ( ) :f o r retObj in objSet :
y i e l d ( retSub , retPred , retObj )
except KeyError :pass
de f va lue ( s e l f , sub=None , pred=None , obj=None ) :f o r retSub , retPred , retObj in s e l f . t r i p l e s ( ( sub , pred , obj ) ) :
i f sub i s None : re turn retSubi f pred i s None : re turn retPredi f obj i s None : re turn retObjbreak
return None
Primjer 45. : Definiranje funkcije triples
• Funkcija uzima subjekt, predikat i objekt i provjerava koje sve trojke postojes tom kombinacojm. Kao rezultat vraća sve trojke koje odgovaraju. Ako je
jedan od članova (sub, pred ili objekt) postavljen na None onda se taj elemenat
uzima kao ”joker”, tj. nije definirano striktno koja rijč mora mora biti, nego se
jednostavno uzima za treću riječ ona koja slijedi u kombinaciji sa dvije prethodne.
Ovaj postupak biti će jednostavniji i jasniji nakon što se na kraju programa
dodaju trojke u graf i nakon što se zatraži ispis svih trojki koje imaju npr. sub
–none-pred, tada će se najbolje vidjeti što znaći joker .
44
de f load ( s e l f , f i l ename ) :f = open ( f i l ename , ” rb” )reader = csv . r eader ( f )f o r sub , pred , obj in reader :
sub = unicode ( sub , ”UTF−8” )pred = unicode ( pred , ”UTF−8” )obj = unicode ( obj , ”UTF−8” )s e l f . add ( ( sub , pred , obj ) )
f . c l o s e ( )
de f save ( s e l f , f i l ename ) :f = open ( f i l ename , ”wb” )w r i t e r = csv . w r i t e r ( f )f o r sub , pred , obj in s e l f . t r i p l e s ( ( None , None , None ) ) :
w r i t e r . writerow ( [ sub . encode ( ”UTF−8” ) , pred . encode ( ”UTF−8” ) ,obj . encode ( ”UTF−8” ) ] )
f . c l o s e ( )
Primjer 46. : Definiranje funkcije load i save
• definirana je funkcija kojom se pokrene odredeni dokument i iz njega isčitajupodatci.
de f query ( s e l f , c l a u s e s ) :b ind ings=None
f o r c l a u s e in c l a u s e s :bpos={}qc =[ ]
f o r x , pos in z ip ( c lause , range (3 ) ) :i f x . s t a r t s w i t h ( ’ ? ’ ) :
qc . append (None )bpos [ x [ 1 : ] ] = pos
e l s e :qc . append ( x )
rows=l i s t ( s e l f . t r i p l e s ( ( qc [ 0 ] , qc [ 1 ] , qc [ 2 ] ) ) )
i f b ind ings==None :b ind ings =[ ]f o r row in rows :
b inding={}f o r var , pos in bpos . i tems ( ) :
b inding [ var ]=row [ pos ]
b ind ings . append ( binding )
45
e l s e :newb =[ ]f o r b inding in b ind ings :
f o r row in rows :val idmatch=Truetempbinding=binding . copy ( )f o r var , pos in bpos . i tems ( ) :
i f var in tempbinding :i f tempbinding [ var ] != row [ pos ] :
val idmatch=Falsee l s e :
tempbinding [ var ]=row [ pos ]i f val idmatch : newb . append ( tempbinding )
b ind ings=newbreturn b ind ings
de f a p p l y i n f e r e n c e ( s e l f , r u l e ) :q u e r i e s=r u l e . g e t q u e r i e s ( )
b ind ings =[ ]
f o r query in q u e r i e s :b ind ings+=s e l f . query ( query )
f o r b in b ind ings :
n e w t r i p l e s=r u l e . maket r ip l e s (b)
f o r t r i p l e in n e w t r i p l e s :s e l f . add ( t r i p l e )
Primjer 47. : Definiranje funkcije query
• Funkcija query uzima član po član iz upita provjerava koji od članova počinje s’?’. Pamti mjesto na kojem se nalazi varijabla. Umjesto varijable u trojci funkcija
stavlja ’None’ , zatim pomoću prije definirane funkcije triples program izbacuje
sve trojke koje odgovaraju početnom uzorku. Nakon što ispǐse sve trojke koje
odgovaraju danom upitu provjerava koje se trojke podudaraju, pa ih povezuje
kako bi dobili konačno riješenje. Postupak je slijedeći : uzme prvu trojku i njezinu
varijablu i usporeduje sa slijedećim trojkama. Taj proces radi sve dok ne potroši
sve varijable i ne prode kroz sve potencijalne trojke. Rezultat postupka su one
trojke koje zadovoljavaju sve uvjete.
46
i f name == ” main ” :g = SimpleGraph ( )g . add ( ( ” b lade runner ” , ”name” , ”Blade Runner” ) )g . add ( ( ” b lade runner ” , ” r e l e a s e d a t e ” , ”June 25 , 1982” ) )g . add ( ( ” b lade runner ” , ” d i r e c t ed by ” , ” Ridley Scott ” ) )
Primjer 48. : Dodavanja trojki u graf
• ovdje prvo dodaje trojke i stvara graf. Nakon što je graf kreiran mogu se postavitiupiti na osnovu kojih se dobiva ispis trojki kao odgovor.
Kriran je graf i on sadrži sljedeće trojke:
• ”blade−runner”, ”name”, ”Blade Runner”
• ”blade−runner”, ”release−date”, ”June 25, 1982”
• ”blade−runner””, ”directed−by”, ”Ridley Scott”
A graf izgleda ovako:
Ispis svih trojki iz grafa učiniti će se tako da se upǐse sljedeća naredba:
Slika 16: izgled novog usmjeenog grafa
print list(g.triples((None, None, None)
Program će proći kroz cijeli graf i ispisati sve trojke koje postoje jer on None tretira
kao”Joker“ . U ovom slučaju postoji samo jedan subjekt:” blade runner” pa uzima
njega. Potom promatra sve predikate koje ima i ispisuje ih sve jer ih tretira kao joker.
Sa ”None” nije striktno odredeno koji predikat mora uzeti, nego na taj način uzima
sve predikate koji su vezani za taj subjekt. Isto to vrijedi i za objekte. Kao rezultat u
ispisu će se pronaći sve trojke koje su unesene.
enditemize
47
[ ( ’ b lade runner ’ , ’ r e l e a s e d a t e ’ , ’ June 25 , 1982 ’ ) ,( ’ b lade runner ’ , ’name ’ , ’ Blade Runner ’ ) ,
( ’ b lade runner ’ , ’ d i r e c t ed by ’ , ’ Ridley Scott ’ ) ]
Primjer 49. : Ispis trojki
6.1. Program
U ovom poglavlju biti će dan pregled koda programa i primjeri ispisa trojki i postav-
ljanje konkretnih upita korǐstenjem već gotovih podataka.
import csv
c l a s s SimpleGraph :de f i n i t ( s e l f ) :
s e l f . spo = {}s e l f . pos = {}s e l f . osp = {}
de f add ( s e l f , ( sub , pred , obj ) ) :
s e l f . addToIndex ( s e l f . spo , sub , pred , obj )s e l f . addToIndex ( s e l f . pos , pred , obj , sub )s e l f . addToIndex ( s e l f . osp , obj , sub , pred )
de f addToIndex ( s e l f , index , a , b , c ) :
i f a not in index : index [ a ] = {b : s e t ( [ c ] ) }e l s e :
i f b not in index [ a ] : index [ a ] [ b ] = s e t ( [ c ] )e l s e : index [ a ] [ b ] . add ( c )
de f remove ( s e l f , ( sub , pred , obj ) ) :
t r i p l e s = l i s t ( s e l f . t r i p l e s ( ( sub , pred , obj ) ) )f o r ( delSub , delPred , delObj ) in t r i p l e s :
s e l f . removeFromIndex ( s e l f . spo , delSub , delPred , delObj )s e l f . removeFromIndex ( s e l f . pos , delPred , delObj , delSub )s e l f . removeFromIndex ( s e l f . osp , delObj , delSub , delPred )
de f removeFromIndex ( s e l f , index , a , b , c ) :
t ry :bs = index [ a ]c s e t = bs [ b ]c s e t . remove ( c )i f l en ( c s e t ) == 0 : de l bs [ b ]i f l en ( bs ) == 0 : de l index [ a ]
except KeyError :pass
de f t r i p l e s ( s e l f , ( sub , pred , obj ) ) :
48
t ry :i f sub != None :
i f pred != None :
i f obj != None :i f obj in s e l f . spo [ sub ] [ pred ] : y i e l d ( sub , pred ,
obj )
e l s e :f o r retObj in s e l f . spo [ sub ] [ pred ] : y i e l d ( sub ,
pred , retObj )e l s e :
i f obj != None :f o r retPred in s e l f . osp [ obj ] [ sub ] : y i e l d ( sub ,
retPred , obj )
e l s e :f o r retPred , ob jSet in s e l f . spo [ sub ] . i tems ( ) :
f o r retObj in objSet :y i e l d ( sub , retPred , retObj )
e l s e :i f pred != None :
i f obj != None :f o r retSub in s e l f . pos [ pred ] [ obj ] :
y i e l d ( retSub , pred , obj )
e l s e :f o r retObj , subSet in s e l f . pos [ pred ] . i tems ( ) :
f o r retSub in subSet :y i e l d ( retSub , pred , retObj )
e l s e :
i f obj != None :f o r retSub , predSet in s e l f . osp [ obj ] . i tems ( ) :
f o r retPred in predSet :y i e l d ( retSub , retPred , obj )
e l s e :f o r retSub , predSet in s e l f . spo . i tems ( ) :
f o r retPred , ob jSet in predSet . i tems ( ) :f o r retObj in objSet :
y i e l d ( retSub , retPred , retObj )
except KeyError :pass
de f va lue ( s e l f , sub=None , pred=None , obj=None ) :f o r retSub , retPred , retObj in s e l f . t r i p l e s ( ( sub , pred , obj ) ) :
i f sub i s None : re turn retSubi f pred i s None : re turn retPredi f obj i s None : re turn retObjbreak
return None
49
de f load ( s e l f , f i l ename ) :f = open ( f i l ename , ” rb” )reader = csv . r eader ( f )f o r sub , pred , obj in reader :
sub = unicode ( sub , ”UTF−8” )pred = unicode ( pred , ”UTF−8” )obj = unicode ( obj , ”UTF−8” )s e l f . add ( ( sub , pred , obj ) )
f . c l o s e ( )
de f save ( s e l f , f i l ename ) :f = open ( f i l ename , ”wb” )w r i t e r = csv . w r i t e r ( f )f o r sub , pred , obj in s e l f . t r i p l e s ( ( None , None , None ) ) :
w r i t e r . writerow ( [ sub . encode ( ”UTF−8” ) , pred . encode ( ”UTF−8” ) ,obj . encode ( ”UTF−8” ) ] )
f . c l o s e ( )
i f name == ” main ” :g = SimpleGraph ( )g . add ( ( ” b lade runner ” , ”name” , ”Blade Runner” ) )g . add ( ( ” b lade runner ” , ”name” , ”Blade Runner” ) )g . add ( ( ” b lade runner ” , ” r e l e a s e d a t e ” , ”June 25 , 1982” ) )g . add ( ( ” b lade runner ” , ” d i r e c t ed by ” , ” Ridley Scott ” ) )
p r i n t l i s t ( g . t r i p l e s ( ( None , None , None ) ) )p r i n t l i s t ( g . t r i p l e s ( ( ” b lade runner ” , None , None ) ) )p r i n t l i s t ( g . t r i p l e s ( ( ” b lade runner ” , ”name” , None ) ) )p r i n t l i s t ( g . t r i p l e s ( ( ” b lade runner ” , ”name” , ”Blade Runner” ) ) )p r i n t l i s t ( g . t r i p l e s ( ( ” b lade runner ” , None , ”Blade Runner” ) ) )p r i n t l i s t ( g . t r i p l e s ( ( None , ”name” , ”Blade Runner” ) ) )p r i n t l i s t ( g . t r i p l e s ( ( None , None , ”Blade Runner” ) ) )
p r i n t l i s t ( g . t r i p l e s ( ( ” foo ” , ”name” , ”Blade Runner” ) ) )p r i n t l i s t ( g . t r i p l e s ( ( ” b lade runner ” , ” foo ” , ”Blade Runner” ) ) )p r i n t l i s t ( g . t r i p l e s ( ( ” b lade runner ” , ”name” , ” foo ” ) ) )
Primjer 50. : Program
U nastavku ovog rada biti će navedeni različiti načini postavljanja upita za ispis trojki
koje se nalaze u grafu:
1. print list(g.triples((”blade−runner”, None, None)))
U ovom slučaju ponoviti će se sve kao u prethodnom primjeru u 6.poglavlju, jer
ovdje predikat i objekt tretira kao joker. Pa onda pregleda sve predikate i sve
objekte koji su vezani za navedeni subjekt.
[ ( ’ b lade runner ’ , ’ r e l e a s e d a t e ’ , ’ June 25 , 1982 ’ ) , ( ’ b lade runner ’ ,’name ’ , ’ Blade Runner ’ ) , ( ’ b lade runner ’ , ’ d i r e c t ed by ’ , ’ RidleyScott ’ ) ]
Primjer 51: Ispis trojke
50
2. print list(g.triples((”blade−runner”, ”name”, None)))
Ovdje će krenuti kroz graf i naći će čvor koji ima ”blade−runner” zatim će
pogledati sve veze koje imaju”name“. U ovom primjeru to je samo jedna. A
none tretira kao joker. U ovom slučaju biti će samo jedna trojka. Jer za none
može uzeti samo jedan objekt jer nema dvije trojke koje imaju isti sub i predikat.
[ ( ’ b lade runner ’ , ’name ’ , ’ Blade Runner ’ ) ]
Primjer 52: Ispis trojke
3. print list(g.triples((”blade−runner”, ”name”, ”Blade Runner”)))
Postoji samo jedna takva trojka.
[ ( ’ b lade runner ’ , ’name ’ , ’ Blade Runner ’ ) ]
Primjer 53: Ispis trojke
Sljedeći graf (slika 17.) predstavlja trojke gradova. Graf se može vizualizirati
korǐstenjem imena gradova i predikata ”se nalazi u” i predikata ”je gradonačelnik” kao
što je prikazano na slici:
Slika 17: primjer venue tablice
51
Gore navedeni graf može se vrlo jednostavno pregledavati i praviti upite , kao na
primjer:
(”foo”,”se nalazi u”,”California”)
(”foo”,”je gradonačelnik”,”Gavin Newsom”)
Iz grafa i na osnovu uvjeta zadanih u upitu jasno je vidljivo da se radi o
San−Francisco−California jer jedino on zadovoljava uvjete da se nalazi u Californiji
i da mu je pri tome još Gavin Newsom gradonačelnik.
Kada bi bilo potrebno saznati koji su to sve gradovi koji se nalaze u Californiji upisali
bi:
(”None”,”se nalazi u”,”California”)
Kao rezultat dobili bi dva grada: San Francisco i San Jose. Kako bih izbjegli korǐstenje
”Jokera”, kako je već prije spomenuto, uvodi se varijabla ’?city’. Ova varijabla koristiti
će se kako bi se moglo prikupiti svi čvorovi koji zadovoljavaju uvjete upita.
Sljedeći upit kreiran je pomoću nove varijable ’?city’.
UPIT- (”?city”,”se nalazi u”,”California”)
ODGOVOR- (”San Francisco” ,”inside”,”California”)
(”San Jose”,”inside”,”California”)
Dosadašnji upiti bili su dosta jednostavni. Često će se dogoditi potreba za složenijim
upitom, koji se takoder mogu kreirati.
bg . query ( [ ( ’ ?company ’ , ’ headquarters ’ , ’New York NY ’ ) ,( ’ ?company ’ , ’ i ndus t ry ’ , ’ Investment Banking ’ ) ,( ’ ?company ’ , ’ c on t r i bu to r ’ , ’ ? c o n t r i b u t i o n ’ ) ,( ’ ? c o n t r i b u t i o n ’ , ’ r e c i p i e n t ’ , ’ Orrin Hatch ’ ) ,( ’ ? c o n t r i b u t i o n ’ , ’ amount ’ , ’ ? d o l l a r s ’ ) ] )
Primjer 54: Primjer složenog upita
Upit od programa traži ispǐse :
• firmu (kompaniju) kojoj je uprava u New−Y ork−NY
• Firmu koja se bavi investiranjem banaka
• Firmu kojoj je contributor neki od kontributora
• Kontributorov primalac je Orrin Hatch
• Kontributorova vrijednost je odredena svota u dolarima
52
Jedno od mogućih riješenja je:
{’?company’:’BSC’,’?contribution’:’contXXX’,’?dollars’:’30700’}
Složeni primjeri češće će se dogadati na većim i zahtjevnijim skupovima podataka,
stoga u sljedećem primjeru prikazati će se mogućnost postavljanja upita na veliki skup
podataka. Kako bi se mogli postavljati upiti potrebno je učitati datoteku sa poda-
cima. U tu svrhu koristiti će se file moives.csv, koji sadrži veliki skup filmova,glumaca
i režisera. Podaci su preuzeti sa Freebase.com stranice i sadrži oko 20 000 filmova.
Predikati koji će se koristiti u ovom dokumentu su ”zove se”, ”režirao je” za režisere i
”glumio je” za glumce.Budući da je su podaci u dokumentu na engleskom pretraživanje
nije moguće raditi sa prijevodom predikata, te stoga oni u kodu moraju ostati na en-
gleskom.
Kako bi se upiti mogli postaviti potrebno je dokument učitati u program, a to će se
učiniti pomoću sljedećeg koda:
import s implegraphgraph = simplegraph . SimpleGraph ( )graph . load ( ” movies . csv ” )
Primjer 55: učitavanje dokumenta
Kada bi htjeli ispis svih imena glumaca koji su glumili u filmu Blade Runner, prvo bi
bilo potrebno dobiti ID tog filma, a zatim preko ID oznake može se saznati koji glumci
su glumili u filmu.
Zapis koda ovog upita je sljedeći (ispis je odmah upisan kao komentar unutar koda i
označen je crvenom bojom).
bladerunnerId = g . va lue (None , ”name” , ”Blade Runner” )p r i n t b laderunnerId# /en/ b lade runnerb laderunnerActor Ids = [ ac to r Id f o r , , a c to r Id in g . t r i p l e s ( (
bladerunnerId , ” s t a r r i n g ” , None ) ) ]p r i n t b laderunnerActorIds# [ u ’/ guid /9202 a8c04000641f800000000042a461 ’ , u ’/ en/ wi l l i am sande r son ’ , u
’/ guid /9202 a8c04000641f80000000054cbccc �