Append-rules
„Append-rules" kunnen worden gebruikt in soortgelijke
toepassingen als de „replace-rules". Het volgende voor
beeld laat zien hoe een topologische regel (twee lijnen
mogen elkaar niet kruisen zonder knooppunt) in meer
dere acties kan resulteren:
on append to line
from old in line where
Cross2Pln(new.shape, old.shape)
do instead
delete line where line.id old.id
append line(shape
split1old(new.shape, old.shape))
append line(shape
split2old(new.shape, old.shape))
append line(shape
split"! new(new.shape, old.shape))
append line(shape
split2new(new.shape, old.shape))
Ingeval de nieuwe lijn de oude lijn kruist, wordt de oude
lijn uit de gegevensbank gehaald en vervolgens worden
van zowel de oude als de nieuwe lijn de vier gesplitste
stukken in de gegevensbank gestopt.
Triggers
Voor de realisatie van „triggers" biedt Postgres het
,,listen/notify"-mechanisme, wat in combinatie met „ru
les" zeer eenvoudig is te gebruiken. Het volgende voor
beeld zal laten zien hoe een dynamische toepassing (het
volgen van auto's op één of meer controleschermen) kan
worden geïmplementeerd. De gegevensbank bevat hier
voor een regel met een notify-opdracht:
on replace to vehicle.position
do notify vehicle
Enige objectgeoriënteerde terminologie: een relatie is een
object-klasse, een tupel is een object-instantie en een attribuut is
een instantie-variabele.
Deze regel geeft aan dat als de positie van de auto
verandert (in de gegevensbank) alle applicaties die in
„vehicle" zijn geïnteresseerd een bericht krijgen. Een
applicatie (front-end) kan zichzelf als belangstellende
registreren door middel van het listen-commando:
listen vehicle
De „front-ends" kunnen nu via asynchrone communica
tie (door de waarde te inspecteren van de pqlib-variabele
PQAsyncNotifyWaiting) op de hoogte worden gebracht
van voertuig-posities. Een lijst van waarschuwingen
(notifications) kan worden verkregen met de pqlib-functie
PQNotifiesQ. Hierna kan de front-end de schermpresen-
tatie naar behoren aanpassen.
Mogelijkheden van GEO
GEO is een GIS front-end voor Postgres, bedoeld
voor algemeen gebruik. Het systeem bezit een directe-
manipulatie gebruikersinterface, er kunnen „real-world"
GIS-functies in worden geïmplementeerd en er kan wor
den geëxperimenteerd met de gebruikersinterface en de
diverse gegevensstructuren en opslagtechnieken. Enkele
van de verwachte toepassingen zijn: elektronische zee
kaarten en diverse systemen voor commandovoering
(C2; Command Control). Het huidige prototype systeem
is geschreven in de objectgerichte programmeertaal
C en gebruikt de ET„class library" [14]. De archi
tectuur wordt voorgesteld door fig. 5. De meeste compo
nenten hiervan zullen worden beschreven in het volgen
de. De schermafdruk van fig. 6 laat een gedeelte zien van
de gebruikersinterface van GEO Het GEO
systeem bezit de volgende basismogelijkheden:
tonen van Postgres-relaties*);
toevoegen of muteren van Postgres-tupels in getoon
de relaties;
grafisch samenstellen van de „where clause"-beper-
king voor de getoonde relatie in een boom-represen
tatie die de structuur van die expressie weergeeft. De
grafische „editor" inspecteert de Postgres Meta Rela
ties (systeem catalogi) die informatie bevatten over de
bestaande operatoren. Op deze wijze hebben de ge-
l70000|
lEnichec
|l <150001
[Nljmegt
11500001
Iseooool
|l 950001
Fig. 6. Gebruikersinterface van GEO++
278
NGT GEODESIA 93 - 6