magdalena curi c (mikuli c)mdjumic/uploads/diplomski/Čur01.pdfsu potencijalni odgovori na pitanje....

59
Sveuˇ ciliˇ ste J.J. Strossmayera u Osijeku Odjel za matematiku Magdalena ˇ Curi´ c (Mikuli´ c) Matematiˇ cka logika u semantiˇ ckom webu Diplomski rad Osijek, 2011.

Upload: others

Post on 30-Jan-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

  • 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 �