stql ( spatiotemporal query language )
DESCRIPTION
STQL ( SpatioTemporal Query Language ). Erik Horničák Martin Krupár Matúš Roštár. Obsah. Motivácia História Datový model Príklady dotazov v STQL Vizuálne dotazovanie. STQL Motivácia. Motivácia. Medzi časovými a priestorovými javmi je mnoho vzťahov a spojitostí - PowerPoint PPT PresentationTRANSCRIPT
STQL (SpatioTemporal Query Language)
Erik Horničák
Martin Krupár
Matúš Roštár
Obsah
● Motivácia
● História
● Datový model
● Príklady dotazov v STQL
● Vizuálne dotazovanie
STQL Motivácia
Motivácia
● Medzi časovými a priestorovými javmi je mnoho vzťahov a spojitostí
● Je snaha vytvoriť časopriestorový dátový model a časopriestorovú databázu, ktorá by postihovala geometrie meniace sa v čase
● Hlavným cieľom je stanoviť DBMS dátový model a dotazovací jazyk, ktorý bude schopný manipulácie s časovo závyslými geometriami
Podmienky na čas
● Zameriavame sa na geometrie meniace sa v čase spojite
● Tieto geometrické objekty nazývame pohybujúcimi sa objektami (moving objects)
● Zahrnujeme aj jednoduchší teda diskrétny časový model, kde časový vývoj je daný časovou konštantou
Podmienky na implementáciu
● Chceme definovať abstraktný dátový typ rozšíriteľný do DBMS dátového modelu a do dotazovacieho jazyka
● Náš model by mal byť v princípe nezávislý na zvolenom DBMS datovom modele a mal by byť zabudovateľný do dotazovacieho jazyka
Abstrakcie dát
● Rozlišujeme dve hlavné dátové abstrakcie
– Pohybujúce sa body (moving points) – abstrakcia dát, pre ktoré je požadovaná len poloha a nie hranice. Napríklad ľudia, autá, zvieratá ....
– Vyvíjajúce sa regióny (evolving regions) – abstrakcia dát, pre ktoré sú okrem polohy dôležité aj prípadné hranice. Napríklad búrky, lesné požiare, katastrálne mapy ...
Platnosť abstrakcie dát
● Uvažujeme 3 dimenzionálny priestor, kde za 2 dimenzie berieme osy x a y pre vyjadrenie polohy, a treťou dimenziou je čas
● Takto definovaný model je však platný aj vo viac dimenzionálnych priestoroch
Čo je STQL?
● STQL je rozšírením obľúbeného dotazovacieho jazyka SQL
● STQL = Spatio-Temporal Query Language
● STQL = časopriestorový dotazovací jazyk
STQL ako rozšírenie SQL
● Ďalej ukážeme ako to rozšírenie funguje
● Rozšírenie je postavené na ADT, teda na abstraktnom dátovom type použitom pre integráciu komplexných objektov do databáze
ADT 1.
● ADT = Abstract Data Types● Vytvorenie modelu z abstrakcie reality
ADT 2.
● Množina dátových hodnôt a asociovaných operácií, ktorá je špecifikovaná nezávisle na akejkoľvek čiastkovej implementácii
● Dátová štruktúra môže byť prístupná len s definovanými operáciami
ADT 3.
● Formálna definícia ADT:
– Exportuje typ
– Exportuje množinu operácií. Táto množina sa nazýva interface
– Operácie interfaceu sú jediný mechanizmus prístupu k typom dátovej štruktúry
– Axiómy a predpoklady definujú použitie domény typu
STQL operácie
● Nami požadované operácie sú
– Temporal Lifting of spatial operations = časové vyzdvihovanie priestorových operácií
– Projections into space and time = projekcie do priestoru a času
– Selection = selekcia
– Aggregation = zoskupovanie
● Ktoré popisujú časové zmeny priestorových vzťahov medzi objektami
STQL História
Worboys model (1994)
● Priestorový dátový model bol zovšeobecnený na časopriestorový
● Časopriestorové objekty boli definované ako tzv. Spatio-bitemporal complexes, ktorých priestorové vlastnosti boli popísané jednoduchými celkami a časové vlastnosti boli dané bitemporálnymi prvkami pripojenými ku každému objektu
● Tento model nevedel riešiť spojitý čas
Grunbach model (1998)
● Model založený na obmezeniach ● S-T objekty považuje za množinu bodov v
multidimenziálnom priestore● Objekty sú popísané pomocou logických formulí
(obmedzení)● Dotazy sú tiež logické formule● Tento model je veľmi obecný, ťažko sa
implementuje● Nedá sa manipulovať s objektami, ktoré
potrebujú nelineárne obmedzenia
Dátový model - Úvod
Erwig – Náš model
● Definícia časového objektu je založená na pozorovaní, že všetko čo sa mení v čase môže byť definované ako ako funkcia času
● Časová verzia objektu typu α je daná funkciou f:čas -> α
● Časopriestorové objekty ako pohybujuce sa body alebo vyvýjajúce sa regióny sú považované za špeciálne inštancie časových objektov kde α je priestorový dátový typ pre body alebo regióny
Yeh a Cambray model
● Behavorial time sequences
● Každý element sekvencie obsahuje geometrickú hodnotu, čas a funckiu chovania sa
● Funkcia chovania sa (behavorial function) popisuje ako sa bude ďalej element vyvýjať do ďaľšej sekvencie
● Časové sekvencie môžu byť použité v našom modely pre reprezentáciu časových objektov
Dve možné cesty
● Diskusia v časovom datovom modelovaní
➔ Tuple-timestamped➔ Attribute-timestamped
Tuple-timestamped
● Tuple = Vo všeobecnosti zoznam objektov, ktoré môžu mať rôzne typy
● Rozširuje schéma vzťahov o jeden alebo viac temporálnych atribútov, ktoré sú použité na popísanie životnosti(lifespan) alebo platnosti obdobia celého zoznamu (tuple)
● Vždy keď sa atribút tuplu zmení, tuple sa zduplikuje a zmení
● Informácia o objekte sa teda rozdelí do viacerých vzťahov
● Nevyhovuje pre spojitý čas
Attribute-timestamped
● Nepridávame ďalšie atribúty
● Zbierame informácie o objekte a dovolujeme komplexné hodnoty atribútob
● Tieto komplexné hodnoty atribútov vytvárajú časovú dimenziu
● A modelujeme ich ako funkcie z času do domény hodnoty
● Attribute-timestamped model vyhovuje našemu pohľadu
ADT vs. Attribute-timestamped
● Náš model zapúzdruje časové (-priestorové) objekty ako ADT objekty, ktoré možeme jednoducho integrovane ako komplexné hodnoty do databáze
● ADT model je presnejší ako Attribute-timestamped
● ADT hodnoty sú nezávislé na DBMS dátovom modely a dotazovacom jazyku, pretože niesú modelované ako návrh DBMS dátového modelu a nezávisia na ňom
Rozšírenie SQL
● V STQL používame známu SELECT-FROM-WHERE klauzulu
● Pre komplexnejsie a štruktúrovanejšie dáta ako body, krivky alebo regióny musíme rozšíriť množinu predikátov
● Napríklad pre dva regióny:disjoint, meet, overlap, coveredBy, covers, inside, contains a equal
● Dotazovací jazyk s týmito predikátmi sa volá Spatial SQL
Časopriestorové predikáty
● ST predikáty špecifikujú správanie sa dvoch ST objektov počas časovej periódy
● Zavádzame koncept ST predikátov ako funkcií mapujúcich ST objekty do booleanov
● Naviac popisujeme obecne pouzitelnu cestu ku konstrukcii ST predikátov zo Spatial predikátov pomocou “LIFTING-u” a “TEMPORAL AGGREGATION”
Časopriestorové predikáty
● Medzi pohybujúcim sa bodom a vyvyjajúcim sa regiónom identifikujeme 28 ST predikátov
● Medzi dvoma vyvýjajúcimi sa objektami je to 2198 predikátov
Dátový model
Dátový model
● Relačná schéma je definovaná R je daná ako
● R(A1:D
1, ...., A
n:D
n ),
kde Ai je atribút s doménov hodnôt D
i
● Pre reláciu r je r: R(A1:D
1, ...., A
n:D
n ) platí
● Doménov môžu byť štandartné typy ale aj komplexnejšie typy zapúzdrené v ADT
r⊆D1× ...×D n
Pohybujúce sa objekty 1.
● Modelujeme ST dáta ako abstraktný dátový typ, ktorý môžeme použiť v relácii
● Relácia má len funkciu kontajneru, ktorý drží dáta v tuploch
● Čas predpokladáme spojitý: čas = R
● Časovú verziu hodnoty typu α, ktorá samení v čase, môže byť modelovaná ako časová funkcia typu τ(α) = time -> α
Pohybujúce sa objekty 2.
● Časová funkcia je základ algebraického dátového modelu časopriestorového dátového typu
● Priestorové dáta, ako bod a región, sú reprezentované α
● Príklad:Bod meniaci polohu v čase je elementom typu τ(bod)
Región, ktorý sa pohybuje/rastie/zmenšuje sa je elementom typu τ(región)
Temporal Lifting 1.
● Značenie:– Nečasové verzie dáta značíme s malým písmenom– Časové verzie dát značíme s veľkým písmenom
● Príklad:– Priestorová operácia vzdialenosť vezme objkety
typu bod a región a vypočíta hodnotu typu real– Lifted verzia Vzdialenosť = ↑ vzdialenosť
mapuje elementy typu Region = τ(región) a Bod = τ(bod) do typu Real = τ(real)
Vzdialenosť: τ(bod) x Region = τ(región) -> τ(real)
Temporal Lifting 2.
● V princípe môžeme zobrať akúkoľvek nečasovú operáciu a “Lift” (zdvihnúť) ju, tak že pracuje na časových objektoch a vracia časové objekty ako výsledok
● Pre každú f:α1
x ... x αn→ β
je odpovedajúca “Lifted” verzia
↑f:τ(α1 ) x ... x τ(α
n ) → τ(β)
kde
↑f(S1, ..., S
n):={(t, f(S
1(t), ..., S
n(t)))| t
času }
Časopriestorové predikáty 1.
● Časopriestorové predikáty sú funkcie hromadiace (aggregation) hodnoty priestorových predikátov tak ako sa vyvýjajú v čase
● Ale časopriestorové predikáty možu byť myslené aj ako “Lifted” priestorové predikáty. Vracajúce časový boolean, ktorý je vždy pravdivý alebo len niekedy.
● Časopriestorové predikáty sú teda funkcie typu
τ(α ) x τ(β) → B (boolean), kde α,β{bod,
región}
Časopriestorové predikáty 2.
● Príklad:
– Zobere si ↑vnútri a môžeme definovať dva časopriestorové predikáty niekedy_vnútri a vždy_vnútri, ktoré sú pravdivé v niektorých časoch respektíve vždy
– Otázka je čo keď bod vo vnútri regiónu má kratšiu životnosť ako región
– Očakávame že predikát vždy_vnútri by mal byť pravdivý ... ale nie je
Časopriestorové predikáty 3.
● Podľa predchádzajúceho príkladu musíme prispôsobiť kvantifikáciu “Pre všetky”
● Je potrebné nájsť pre každý z 8 hlavných predikátov čo máme najvhodnejšií prípad v životnosti objektov
| prvý | druhý | zjednotenie | prienik
Disjoint, Meet,Overlap | x
Equal | x
Covers, Contains | x
CoveredBy, Inside | x
Časopriestorové predikáty 4.
● Časopriestorové predikáty sú zákldnými kameňmi jazyka pre špecifikovanie zmeny časopriestorových objektov
● Ale so základnými predikátmi nie sme schopný popísať zmeny v topologických vzťahoch časopriestorových objektov
● Potrebujeme operácie, ktoré nám umožnia tvoriť komplexnejšie predikáty
Operácia zloženia
● Značíme ako ►● Napríklad:
Disjoint ► Meet definuje časopriestorový predikát, ktorý je
pravdivý len pre dva objekty, ktoré boli rozpojené po nejakú dobu a potom sa na najeku dobu stretli
● Možeme spájať aj priestorové s časopriestorovými
Disjoint ► meet ► Inside
Rozdelenie predikátov
● Niektoré predikáty sú definované len pre časovú periódu: disjoint, overlap, inside, containts
● Ostatné možu byť definovnané aj časovej perióde a aj v časovom bode: equal, meet, covers, coveredBy
Dotazy v STQL
● Časopriestorové dátové typy a operácie v STQL– Význam– Popis– Syntax
Návrh STQL
● Nie celkom nový dotazovací jazyk -> zapúzdrenie do SQL
● Výhody:– Jednoduchosť– SQL je dobre známy dotazovací jazyk– Možnosť používania ako štandartných SQL
dotazov, tak aj priestorových, časových alebo časopriestorových dotazov
Zavedenie STQL do SQL
1) priestorové dátové typy a operácie2) časopriestorové operácie získané metódou
„temporal lifting“3) časová selekcia4) priestorová a časová projekcia5) časopriestorová agregácia6) základné časopriestorové predikáty7) nástroje na vytváranie komplexnejších
predikátov
Model č. 1
flights(id:string, Route:Point)weather(kind:string, Extent:Region)
Route – pohybujúci sa bodExtent – rozvíjajúci sa región
Modely č.2 a 3
forest(forestname:string, Territory:Region)
forest_fire(firename:string, Extent:Region)
fire_fighter(fightername:string, Location:Point)
-----------------------------------------
birds(swarm: string, Movement:Point)
Časová selekcia (1)
● Otázka: Kde sa nachádzalo lietadlo letu číslo 207 United Airlines o 8:00 ?
● STQL dotaz:
SELECT Route(8:00)FROM flightsWHERE id = “UA207”
Časová selekcia (2)
● Otázka: Kde sa nachádzalo to isté lietadlo medzi 7:00 a 9:00 ?
● STQL dotaz:
SELECT Route(7:00..9:00)FROM flightsWHERE id = “UA207”
Priestorová projekcia
● Otázka: Akou trasou letelo dané lietadlo medzi 7:00 a 9:00 ?
● STQL dotaz:
SELECT trajectory(Route(7:00..9:00))FROM flightsWHERE id = “UA207”
Časová projekcia
● Otázka: Ako dlho trval let 207 ?● STQL dotaz:
SELECT duration(dom(Route))FROM flightsWHERE id = “UA207”
Agregácia (1)
● Chceme zistiť najväčšiu oblasť sneženia pre všetky časové okamžiky
SELECT Area(max(Extent))FROM weatherWHERE kind = “snow”
Definícia funkcie max
inak
)area()area(ak ),(max
))}(),((max|),{(:)(max
2
2 1 121
212,1
r
rrrrr
tRtRrtimetrtRR
geo
geost
Agregácia (2)
● alternatívna verzia toho istého dotazu:
SELECT max(Area(Extent))FROM weatherWHERE kind = “snow”
Operácie získané metódou „temporal lifting“ (1)
● temporal lifting umožňuje z každej priestorovej operácie spraviť časopriestorovú
● príklad: celková plocha lesov zničených ohňom menom „The Big Fire“SELECT sum(size) FROM
(SELECT size AS area(trajectory(Intersection(Territory,
Extent)))FROM forest_fire, forestWHERE firename = “The Big Fire” AND
ever(Intersects(Territory, Extent)))
Temporal lifting (2)
● Chceme zistiť časy požiarov väčších ako 500km2 a zároveň ich umiestnenie v tieto momenty.
SELECT Extent(dom(at(Area(Extent)>500,
true)))FROM forest_fireWHERE not(isempty(dom(at(Area(Extent)>500, true))))
Temporal lifting (3)
● Otázka: Ako dlho bol požiarnik Fero Taraba obklopený ohňom „The Big Fire“ a akú vzdialenosť za týchto podmienok prekonal ?SELECT duration(dom(
Intersection(Location,TheBigFire)))length(trajectory(Intersection(Location,TheBigFire)))
FROM fire_fighterWHERE fightername = “Fero Taraba”
Temporal lifting (4) - konštanty
● chceli by sme sa dozvedieť, kedy sa lietadlo letu UA207 nachádzalo nad Eiffelovou vežou
● STQL dotaz:
SELECT dom(Intersection(Route, ^EiffelTower))
FROM flightsWHERE id = “UA207”
Časopriestorové predikáty – motivácia (1)
● Úloha: Zistite čas, kedy lietadlo letu UA207 vletelo do hurikánu.
● nemožné riešiť napr. v TempSQL (založený na atribútoch s časovými razítkami)
● môžeme riešiť v STQL takto:SELECT min(dom(Intersection(Route,Extent)))
FROM flights
WHERE id = “UA207” AND kind = “hurricane”
Časopriestorové predikáty – motivácia (2)
● Trochu všeobecnejšia úloha: Zistite všetky časy, kedy nejaké lietadlo vletelo do nejakého hurikánu.
● Túto úlohu môžeme riešiť pridaním podmienok do where sekcie predchádzajúceho dotazu (kvôli null hodnotám), jednoduchšie to však je pomocou predikátov
Časopriestorové predikáty – motivácia (3)
● Otázka: Ktoré lietadlá vošli do hurikánu ?● tzn. lietadlo a hurikán najprv nemali spoločný
žiadny bod, potom sa dotýkali a nakoniec lietadlo bolo vo vnútri hurikánu (v tomto poradí)
● Riešenie pomocou predikátu insideSELECT id FROM flights, weatherWHERE kind = “hurricane” AND not(Route(min(dom(Route))) inside
Extent(min(dom(Route)))) AND Route(max(dom(Route))) inside Extent(max(dom(Route)))
Časopriestorové predikáty – motivácia (4)
● Nedostatky predchádzajúceho riešenia:– je pomerne zložité – pracné počítanie konkrétneho
bodu a regiónu v počiatočnom aj koncovom čase– nepresnosť - na začiatku musí byť lietadlo mimo
hurikánu a na konci vo vnútri– nie je možné určiť, či lietadlo priamo vošlo do
hurikánu, alebo sa ešte pohybovalo po jeho hranici
Časopriestorové predikáty (1)
● Časopriestorové predikáty integrujeme do SQL pomocou:– 8 základných predikátov:
● disjoint, meet, overlap, coveredBy, covers, inside, contains a equal
– nástrojov na vyvíjanie komplexnejších predikátov z jednoduchších
Časopriestorové predikáty (2)
● Predchádzajúci príklad môžeme vyriešiť pomocou operátoru časovej kompozície (>>):
SELECT id FROM flights, weatherWHERE kind = “hurricane” AND Route Disjoint>>meet>>Inside Extent
Definovanie vlastných predikátov (1)
● v STQL je možné definovať aj vlastné predikáty:
p-def -> DEFINE p-name AS p-expr p-expr -> p-basic | p-name | p-expr >> p-expr | p-expr | p-expr | rev(p-expr)
Definovanie vlastných predikátov (2)
● Môžeme si napríklad definovať predikát Enters:DEFINE Enters AS Disjoint>>meet>>Inside
● Predchádzajúci dotaz by sme potom mohli prepísať nasledovne:
SELECT id FROM flights, weatherWHERE kind = “hurricane” ANDRoute Enters Extent
Definovanie vlastných predikátov (3)
● Ďalšie príklady vlastných predikátov:
DEFINE Leaves AS rev(Enters)DEFINE Crosses AS Enters>>LeavesDEFINE Bypasses AS Disjoint>>Meet>>Disjoint
Ekvivalentná definícia
● Predikát Crosses by sme mohli definovať aj takto:
DEFINE Crosses
AS Disjoint>>meet>>Inside>>meet>>Disjoint
● Definície sú ekvivalentné, pretože:– rev(Enters) = Inside>>meet>>Disjoint– Inside>>Inside = Inside
Časopriestorové predikáty – príklad (1)
● Otázka: Ktoré lety preleteli cez snežnú búrku alebo sa jej tesne vyhli ?
● STQL dotaz:
SELECT id FROM flights, weatherWHERE kind = “snowstorm” AND
Route Crosses|Bypasses Extent
STQL a GROUP BY
● Chceme zistiť, koľko lietadiel vošlo resp. nevošlo do hmly
● Riešenie:
SELECT COUNT(*) FROM flights, weatherWHERE kind = “fog”GROUP BY Route Enters Extent
Predikát True (1)
● Predikát True sa v STQL značí “_”● Otázka: Ktoré lesy boli kompletne zničené
ohňom ?● Riešenie:
SELECT name
FROM forest, fire
WHERE Territory _>>Inside|Equal Extent
Predikát True (2)
● Otázka: Ktoré kŕdle letia spolu, rozdelia sa a potom sa znovu stretnú ?
● Riešenie:
DEFINE Remeets AS_>>Meet>>Disjoint>>Meet>>_
SELECT A.swarm, B.swarmFROM birds (A), birds (B)WHERE A.Movement Remeets B.Movement
Vizuálne dotazovanie
● Motivácia
● Typy vizuálneho dotazovania
● Náčrtkový model dotazovania
● Príklady
Motivácia
● máme silný dotazovací jazyk● ale kto ho bude používať ?● aj neprogramátori – letový dispečer, ...● neprogramátor nemá záujem o učenie sa
nového jazyka (SQL, STQL, ... )● vzniká potreba vizuálnej nadstavby nad
dotazovacími jazykmi
Existujúce vizuálne nástroje
● v súčasnosti existuje rada nástrojov, ktorá sa snaží s menším, či väčším úspechom spravovať SQL
● Pozorovanie : žiadny z nich nie je dostatočne silný na zvládnutie zložitejších dotazov !
● Pozorovanie 2 : letový dispečer typicky nepotrebuje zložitý dotaz, jeho dotazy sú jednostranne zamerané
Sada dotazov
● 1. možnosť vizuálneho dotazovania je implementovať sadu dotazov
● sada dotazov je pevne „zadrátovaná“ a ušitá na mieru
● plusy : jednoduchosť● mínusy : prísne obmedzenia pre užívateľov,
obmedzenie funkčnosti
Iný prístup
● obecnejší postup● prístup, ktorý umožný vyjadrovať akékoľvek
dotazy● vizuálny jazyk a dotazovacie prostredie
– založený na kreslení načrtkov trás jednotlivých objektov
– náčrtky sú následne preložené do dotazov v STQL
Základné rysy vizuálneho jazyka
● vizuálny jazyk je založený na myšlienke, že dokážeme analyzovať 2-dimenzionálne dráhy pohybujúcich sa objektov a zistiť v časovom vývoji ich vzájomný vzťah
● dizajn jazyka je podložený myšlienkou zjednodušenia objektových dráh na ich podstatné vlastnosti
Príklad
● Náčrtok pre časopriestorový predikát Inside>>meet>>Disjoint
Spôsoby spracovania
● v súčasnosti existujú dva základné spôsoby interpretovania vizuálnych náčrtkov
● 1. Náčrtky priamo zakomponovať do jazyka
● 2. Rozšírenie notácie o popisky
Náčrtky priamo zakomponovať
● náčrtky budú zakomponované v dotazovacom jazyku
● náčrtky budú nahradzovať časopriestorové predikáty
● tento prístup vedie k heterogénnym vizuálnym jazykom ( spätná kompatibilita )
Rozšírenie notácie o popisky
● rozumnejší prístup
● vo vizuálnej notácií je možnosť pridať textový popisok k objektu
● textové popisky majú identifikovať objekty v databáze, ktorých atribút korešponduje s načrtovanou trasou
Rozšírenie notácie o popisky -Príklad
● príklad vletenia lietadla do hurikánu
Rozšírenie notácie o popisky
● mená priradené ku grafickým objektom sú interpretované ako relácie, ktorých časopriestorové objekty sú zobrazované
● v našom prípade sa jednalo o Route a Extend● v zátvorkách sa nachádzajú podmienky● tieto podmienky sú jednoducho pridané do
WHERE klauzule
Rozšírenie notácie o popisky - Záver
● spolu s preložením nakreslenej trasy, môže byť vizuálny dotaz ako celok preložený do dotazu v jazyku STQL
● takýto prístup je už implementovaný a funguje !● volá sa query-by-trace
QBT - príklady
● GUI
QBT – príklady 2
● časová osa
QBT – príklady 3
● 3 prípady ukončenia
QBT – príklady 4
● 2 regiony
QBT – príklady 5
● dodržanie časovej osi, predikát True
QBT – príklady 6
● 2 moving points
Celkové zhrnutie
● na základe ADT prístupu je možné rošíriť SQL o časopriestorovú rovinu na STQL
● STQL neporušuje výhodné vlastnosti SQL a zahrňuje ich ( napr. GROUP BY )
● základná črta časopriestorvých databáz – temporal lifting
● definovali sme nové vlastné predikáty a ukázali sme účinný mechanizmus na vytváranie ďaľších
Referencie
● Erwig, M., Schneider, M., STQL – A spatio-temporal query language
● Erwig, M., Schneider, M., Abstract and discrete modeling of spatio-temporal data types
● Erwig, M., Schneider, M., Developments in spatio-temporal query languages
● Erwig, M., Schneider, M.,A visual language for spatio-temporal query languages
● www.google.com :)