Persistance

GDL – Graph Definition Language – Jezik za opis grafova

 Sve što se tiče čuvanja grafova u fajlove i učitavanje istih iz fajlova običan korisnik može da radi direktno iz programa i uz pomoć grafičkih alata koji su na raspolaganju. Međutim, za naprednije korisnike postoji mogućnot ručnog zadavanja grafova u fajl.

Da bi korisnici mogli to da rade, kao i da bi razumeli format fajla koji generiše ExGERM, potrebno je da poznaju sintaksu jezika za definiciju grafova (u daljem tekstu GDL) koji program koristi.

Svaki graf se definiše u posebnom fajlu i započinje ključnom rečju graph.  Najjednostavniji graf, bez osobina, čvorova i i veza bi izgledao ovako:

graph primer_grafa {}

Ovaj graf se se zove “primer_grafa”.

Identifikatori

Da bi se zadala imena grafa, čvorova i osobina potrebno je imati pojam identifikatora. U GDL-u identifikator može biti bilo koja sekvenca slova i brojeva. Ako je potrebno da identifikator sadrži nešto izvan ovog  skupa (dodatne znake, razmak...), potrebno ga je staviti pod navodnike. Ukoliko u imenu identifikatora treba da se pojavi i navodnik, ispred navodnika treba staviti znak \.

Ključne reči

Postoje samo tri ključne reči koje ne mogu da se koriste kao identifikatori, jer ih GDL interno koristi. To su:

·         graph

·         node

·         edge

Ukoliko je potrebno da se ove reči koriste za identifikatore, potrebno ih je stativi pod navodnike.

Osobine

Osobine mogu da imaju svi entiteti u GDL-u (grafovi, čvorovi i grane). Osobine se navode između uglastih zagrada ( “[“ i “]” ) u obliku kljuc=vrednost. Više osobina se jednostavno navodi tako što se stavi zarez između.

Osobine grafa se navode kao prva stvar u telu grafa. Osobine čvora se navode odmah posle definicije čvora, a osobone grafa se navode odmah posle definicije grane.

Za gornji primer dodavanje osobina grafu bi izgledalo ovako:

Graph primer_grafa {

[ kljuc=”Vrednost”, novi_kljuc=bla]

}

Čvorovi

Čvorovi se zadaju na sledeći način:

node ime_cvora [osobina=vrednost];

Moguće je uraditi i ovako nešto:

node cvor1, cvor2 [osobina=vrednost];

i u tom slučaju će i cvor1 i cvor2 imati iste atribute.

Grane

Grane se zadaju na sledeći način:

edge cvor1 -- cvor2 [osobina=vrednost];

Ili

edge cvor1 -> cvor2 [osobina=vrednost];

ili

edge cvor1 <- cvor2 [osobina=vrednost];

U prvom slučaju kreira se grana koja povezuje čvorove cvor1 i cvor2 neusmereno. U drugom slučaju se isti čvorovi povezuju usmereno, s tim da je cvor1 izvorišni, a cvor2 odredišni. Treći slučaj je isti kao drugi, s tim da su čvorovi cvor1 i cvor2 zamenili mesta.

Moguće je zadati više grana odjednom na sledeći način:

edge cvor1 -- cvor2 -> cvor3 <- cvor4 [osobina=vrednost];

U ovom slučaju se grane prave baš kao što je napisano. Cvor1 se neusmerenom vezom povezuje sa čvorom cvor2, cvor2 dva se usmerenom vezom povezuje sa čvorom cvor3, a cvor3 isto usmerenom vezom sa čvorom cvor4. U oba slučaja je cvor3 odredišni. Sve grane imaju isti atribut. Rezultat je isti kao da je napisano:

edge cvor1 -- cvor2 [osobina=vrednost];

edge cvor2 -> cvor3 [osobina=vrednost];

edge cvor4 -> cvor3 [osobina=vrednost];

Komentari

GDL poštuje komentare C stila.

Sve što je napisano posle // se zanemaruje (komentari u jednom redu), kao i sve što je napisano između /* i */  se zanemaruje (komentari u više redova).