Monday, August 09, 1999
A téma keretében megismerkedünk
Az európai, de még inkább a magyar szabványok ismertetése elég sok nehézséggel párosul, mivel az elfogadott dokumentumok csak pénzért vásárolhatók meg, e mellett a magyar szabványok esetében, pénzért is csak a szabványok kis része szerezhető be digitális formátumban. Ha ehhez még hozzátesszük, hogy szabvány javaslatokkal, ismertető cikkekkel sem bővelkedik a hálózat úgy az olvasó is beláthatja, hogy nem a szerző hibája, ha a következő ismertetés a korábbiakhoz képest kissé halványabbra sikerül. Ez feltehetőleg összhangban van a szabvány alkotók és terjesztők törekvéseivel is, hiszen ha azt akarnák, hogy a szabványt széleskörűen ismerjék és használják, úgy gondoskodnának a könnyű hozzáférésről és nagyobb publicitásról.
Az ismertetésünk alapját képező dokumentum az MSZ 7771 számú szabvány 1996 03 20 dátumú tervezete [11] illetve Nikl István és dr. Kummert Ágnes Magyar Térinformatikai adatcsere szabvány alkalmazása című előadása [12], mely sajnos ábrák nélkül az Interneten is megtalálható. Magát a szabványt 1997 áprilisában fogadták el és információim szerint nem sokban különbözik a hivatkozott tervezettől. A [12] előadás tanúsága szerint az első alkalmazás az MSZ 7772-1 számú szabvány (népszerű nevén DAT szabvány) szerint készülő digitális alaptérképek alkalmazási sémájának elkészítése alapján ezeknek az állományoknak az átvitele volt.
Mielőtt a szabvány részletes ismertetésére áttérnénk alá szeretnénk húzni, hogy a szabvány csak magának az EXPRESS nyelvnek egy szűkített halmazát használja, és nem él azokkal az eszközökkel, melyeket az EXPRESS sémák adatokkal való feltöltésével nyerhető emberi vagy számítógépes megértésre alkalmas modellek létrehozására alkalmaznak: az EXPRESS I nyelvvel (1.2 fejezet), illetve a 2. 1 fejezetben található úgy nevezett Tiszta Szöveg Kódolással.
Az ábra igen gondos tanulmányozása alapján a következőképpen képzelhetjük el az átviteli adatállomány létrehozási folyamatát:
· a későbbiekben ismertetendő geometriai definíció együttes azaz séma illetve a metaadat séma felhasználásával a felhasználó elkészíti a kérdéses termék (pld. digitális alaptérkép) a szabványban megadott elemekből álló szűkített EXPRESS nyelvű sémáját. Ebben a sémában tehát már lehet hivatkozni a geometriai és metaadat sémákban deklarált entitásokra, típusokra, stb.;
· a nyelvi séma segítségével, ami tulajdonképpen nem más mint a szűkített EXPRESS nyelv definiálása ugyancsak EXPRESS nyelven, az alkalmazási sémából létrehozható az alkalmazás adatszótára, mely nem más, mint az alkalmazási séma által használt típusok és entitások EXPRESS nyelvi megfogalmazása. Az adatszótár a többi metaadattal együtt bekerül a metaadat állományba;
· a másik irányban az alkalmazási séma példányosításával (a benne található elemeknek történő értékadással) létrejön az alkalmazás adatállománya;
· az adatállomány kódolása alatt tulajdonképpen azt értik a szabvány szerzői, hogy minden egyes adatelemet EXPRESS entitásként deklarálnak, megadva az entitás attribútumai között eredeti, alkalmazási sémabeli nevét is;
· az adatcsere séma a metaadatokból és kódolt adatokból deklarálja az átviteli állományt;
· a kódolási szabályok-ról a szabványtervezetben részletek nem találhatók.
Amint már említettük az alkalmazási séma csak szűkített EXPRESS nyelvi elemeket használhat, melyek a következők: Egyszerű adattípusok, Gyűjtő adattípusok közül ARRAY, LIST, BAG, SET, a Felsorolási adattípus és a SELECT adattípus, az entitás deklarációban szerepelhetnek az attribútumok, inverz attribútumok, levezetett attribútumok, a különbözőségi feltétel, a tartomány szabály az altípus és szupertípus, a Séma deklaráció, Konstans deklaráció, Szabály deklaráció, Függvény és Eljárás deklaráció, a REFERENCE FROM utasítás csak a geometriai alsémára és a külső fájl sémára utalhat.
A geometriai alséma tulajdonképpen csak a vektoros modellre vonatkozik, mivel a tervezet megjegyzése szerint: “A raszteres állományok adatcseréjénél a adatcsere a raszter adatok szabványos formáját használja.” Hogy hány szabványos raszteres formátum van azt még e fejezet megírása után sem tudom, hogy mit ért ez alatt a tervezet szerzője arról pedig fogalmam sincs.
Lássunk ezután néhány geometriai meghatározást. A koordináta rendszer entitás a következőképpen van deklarálva:
ENTITY set_of_coordinates;
SUBTYPE OF (position_information);
x1: coordinate;
x2: coordinate;
x3: OPTIONAL coordinate;
refers_to: reference;
WHERE
DR1: exists(x3) XOR (refers_to.dimension = 2);
END_ENTITY;
Amint látjuk a DR1 szabály segítségével biztosítjuk a megfelelő dimenzió számot a rendszer deklarációjában.
A koordináta rendszer deklarálása után deklaráljuk az úgy nevezett geometriai primitíveket azaz a pontot, vonalat és területet, illetve gyűjtő absztrakt szupertípusukat:
ENTITY
geometric_primitive;
ABSTRACT SUPERTYPE OF (ONEOF(point, line, area));
is_part_of: SET[1:?] OF spatial_view; -- az elem térbeli nézetei
INVERSE
is_description_of: SET[0:?] OF structure_primitive FOR is_described_by; -- vonatkozó topológiai alapelemek
END_ENTITY;
Ezután rátérhetünk a pont, vonal és terület deklarálására:
ENTITY
point;
SUBTYPE OF (geometric_primitive);
has_position: set_of_coordinates; -- a pont térbeli helye
END_ENTITY;
TYPE
interpolation_method = ENUMERATION OF (shortest_way, circular_arc, Bspline);
END_TYPE;
TYPE
direction = REAL;
WHERE
(SELF > -PI) AND (SELF <= PI);
END_TYPE;
ENTITY
line;
SUBTYPE OF (geometric_primitive);
has_position: LIST [2 : ?] OF set_of_coordinates;
interpolation: interpolation_method;
tangent_direction_at_first_end: OPTIONAL direction;
tangent_direction_at_last_end: OPTIONAL direction;
WHERE
IR1:
; -- innét hiányzik a
szabály, hogy két egymást követő pont nem lehet azonos
IR2: ; -- hiányzó szabály a pontokra kötelező azonos referencia
rendszerről
END_ENTITY;
Érdekes vonása a specifikációnak, hogy a vonal összeköttetésére különféle interpolációs módszerek közül lehet választani (ez inkább rajzi mint térinformatikai opció).
A területet külső és belső határokkal specifikálja a tervezet. A három hiányzó szabály ebben az esetben:
· IR1 azt köti ki hogy a külső és belső határok nem metszhetik vagy érinthetik egymást,
· IR2 a belső határokra írja elő ugyanezt,
· IR3 pedig azt követeli meg hogy a belső határok ne legyenek egymásba ágyazva.
Ezek a szabályok, különösen az utolsó, sok valós alkalmazás esetében problémát jelenthetnek, gondoljunk egy tóra, melyben egy olyan sziget van, amelyen egy kisebb tó található.
ENTITY
area;
SUBTYPE OF (geometric_primitive);
has_outer_boundary: boundary; -- a külső határ
has_inner_boundary: SET [0:?] OF boundary; -- a lukak
határai
WHERE
IR1: ;
IR2: ;
IR3: ;
END_ENTITY;
ENTITY boundary;
is_composed_of: LIST [1:?] OF UNIQUE boundary_line;
INVERSE
is_outer_boundary: SET [0:1] OF area
FOR has_outer_boundary;
is_inner_boundary: SET [0:1]
OF area FOR has_inner_boundary;
WHERE
DR1: SIZEOF (is_outer_boundary) + SIZEOF (is_inner_boundary)
= 1; -- a határ vagy belső vagy külső, de nem lehet mindkettő
IR1: ; -- az egyik határvonal
végpontja = a következő határvonal kezdőponttal
IR2: ; -- a határ nem
metszheti önmagát
IR3: ; -- az első
határvonal kezdőpontja = az utolsó végpontjával
END_ENTITY;
Ezután már csak a határokat alkotó határvonalak szorulnak meghatározásra, melyek bár azonosak a már meghatározott vonalakkal, a szabvány szerzői szerint a területek létrehozásában játszott szerepük miatt indokolt a külön entitásként történő deklarációjuk.
ENTITY boundary_line;
has_position: LIST [2 : ?] OF set_of_coordinates;
interpolation: interpolation_method;
tangent_direction_at_first_end: OPTIONAL direction;
tangent_direction_at_last_end: OPTIONAL direction;
INVERSE
is_part_of: SET [1:1] OF boundary FOR is_composed_of;
END_ENTITY;
A geometria belső szerkezetét a topológiai alapelemek segítségével lehet megadni. A szabvány az alapelemek három típusát határozza meg. Ezek a csomópont, él és felület.
Itt is először az absztrakt topológiai típust deklaráljuk, majd ezt követik az alapelemek különböző válfajainak deklarálása.
ENTITY structure_primitive;
ABSTRACT SUPERTYPE OF (ONEOF (node, edge, face));
is_described_by: OPTIONAL SET [1:?] OF geometric_primitive;
is_part_of: SET
[1:?] OF spatial_view; --
a topológiai elemek térbeli nézete
END_ENTITY;
Ezután kerül sor a csomópont deklarálására. A szabvány megkülönbözteti az önálló pontot és az összeköttetésekre (élekre) illeszkedő csomópontokat és mind a kettőt csomópontnak (node) hívja. Az illeszkedő csomópontokat tovább osztja vég- és közbenső csomópontra.
Ez utóbbi felosztás nem konform a térinformatikában megszokott felosztással. Ott ugyanis a csomópontokat a szerint osztályozzák, hogy hány ív illeszkedik rájuk (ha egy – végpont, ha kettő közbenső pont (álcsomópont), ha pedig három vagy több – elágazás), addig a szabvány szerint: “végcsomópont olyan kapcsolódó csomópont, amely legalább egy él végpontjaként/kezdőpontjaként szerepel”, azaz a szabvány szerinti végcsomópont tulajdonképpen összefoglalja a térinformatika mindhárom csomópont típusát, míg a szabvány szerinti közbenső csomópont “az a kapcsolódó csomópont, amely rajta van az élen, de nem végpontja” a a térinformatikában nem létezik, mivel ez legfeljebb töréspont, ami nem része a topológiának.
A csomópont tehát altípusa a szerkezeti primitíveknek és főtípusa az említett két pontosztálynak, míg az illeszkedő csomópont a végcsomópont és közbenső csomópont főtípusa, azaz:
ENTITY node;
SUBTYPE OF (structure_primitive);
ABSTRACT SUPERTYPE OF (ONEOF (connected_node,
isolated_node);
END_ENTITY;
Ezután deklaráljuk a két pontféleséget
ENTITY isolated_node;
SUBTYPE OF (node);
is_within: SET [0:?] OF face; -- a pontot tartalmazó felületek halmaza
END_ENTITY;
ENTITY connected_node;
SUBTYPE OF (node);
ABSTRACT SUPERTYPE OF
(terminating_node ANDOR intermediate_node);
END_ENTITY;
majd az illeszkedő csomópont korábban már felvázolt altípusait
ENTITY terminating_node;
SUBTYPE OF (connected_node);
INVERSE
is_start_node_of:
SET [0:?] OF edge FOR starts_at --
az induló élek halmaza
is_end_node_of: SET [0:?] OF edge FOR ends_at – a végződő élek
halmaza
WHERE
DR1: SIZEOF (is_start_node_of) + SIZEOF (is_end_node_of) > 0;
END_ENTITY;
A DR1 feltétel azt köti ki, hogy a pontra legalább egy él illeszkedjen.
ENTITY intermediate_node;
SUBTYPE OF (connected_node);
Is_coincident_with: SET [1:?] OF edge; -- a pontra illeszkedő élek halmaza
END_ENTITY;
A következő topológiai primitív az él, amit a térinformatika az ARC/Info hatására inkább ívnek (arc) ismer. A szabvány szerinti élek irányítottak, azaz kezdőpontjuk és végpontjuk nem cserélhető fel. Az élek attribútumai között a kötelező kezdő és végcsomóponton kívül opcionálisan szerepelhetnek még a jobb és baloldali területek (topológiai értelemben lapok), külön - külön a kezdő és végcsomóponthoz csatlakozó legközelebbi jobb és baloldali él, az élhez tartozó köztes csomópontok és azok a gyűrűk, melyek tartalmazzák az élt. Mindez EXPRESS nyelven a következőképpen néz ki:
ENTITY edge;
starts_at:
terminating_node; --
kiinduló csomópont
ends_at: terminating_node; -- végcsomópont
has_on_its_left: OPTIONAL SET [1:?] OF face; -- baloldali lapok
(poligonok)
has_on_its_right: OPTIONAL SET [1:?] OF face; -- jobboldali lapok
(poligonok)
next_right: OPTIONAL edge; -- a végpontból induló első jobboldali él
next_left: OPTIONAL edge; -- a végpontból induló első baloldali él
previous_right: OPTIONAL edge; -- a kezdőpontból induló első jobboldali
él
previous_left: OPTIONAL edge; -- a kezdőpontból induló első baloldali él
INVERSE
supports:
SET [0:?] OF intermediate_node FOR is_coincident_with; -- az élen lévő köztes pontok halmaza
is_part_of: SET [0:?] OF ring FOR is_composed_of; -- az élet tartalmazó
gyűrűk halmaza
END_ENTITY;
Bár ez a deklaráció a szokásosnál több topológiai kapcsolat rögzítését teszi lehetővé nem teljesen világos, hogy mit ért a végpontból illetve a kezdőpontból kiinduló legközelebbi baloldali és jobboldali éleken, illetve, hogy ezek a jellemzők milyen adatszerkezet kedvéért kerültek be a szabványba.
A következő szerkezeti primitív a lap – face, mely tulajdonképpen a belső szigetekkel rendelkező poligon szabvány szerinti elnevezése.
ENTITY face;
SUBTYPE OF (structure_primitive);
has_outer_ring: OPTIONAL ring; -- külső határoló gyűrű
has_inner_ring: OPTIONAL SET [0:?] OF ring; --
sziget gyűrűk halmaza
INVERSE
contains: SET
[0:?] OF isolated_node FOR is_within; -- a felületen lévő önálló pontok halmaza
is_on_the_left_of: SET [0:?] OF edge FOR has_on_its_left; -- az élek
melyektől a lap balra van
is_on_the_right_of: SET [0:?] OF edge FOR has_on_its_right; -- az élek
melyektől a lap jobbra van
WHERE
DR1: SIZEOF (is_on_the_left_of) + SIZEOF (is_on_the_right_of) > 0; – a lapot minimum egy él határolja
END_ENTITY;
Az utolsó topológiai elem az úgynevezett gyűrű – ring, mely leírja a poligont illetve a belső szigeteket alkotó éleket. Figyeljük meg, hogy a lap meghatározásához nem feltétlenül szükséges a gyűrű megléte, mivel az élek jobb és baloldali lap attribútumaiból a poligont határoló élek sorozata helyreállítható. Bizonyos adatszerkezetek azonban a feldolgozó szoftver tehermentesítése érdekében ezt az entitást is tárolhatják. A fentiek miatt a gyűrű már nem tartozik a szerkezeti primitívek főtipusába.
ENTITY ring;
is_composed_of: LIST [0:?] OF UNIQUE edge; -- az alkotó élek listája
INVERSE
is_the_outer_ring_of: SET [0:?] OF
face FOR has_outer_ring; --
a lap melynek külső gyűrűje
is_inner_ring_within: SET
[0:?] OF face FOR has_inner_ring; --
a lap melynek belső gyűrűje
WHERE
DR1: SIZEOF (is_the_outer_ring_of) + SIZEOF (is_ inner_ring_within) = 1; -- a gyűrű vagy külső vagy belső
IR1:; -- hiányzó
szabály az egymás utáni élek kötelező kapcsolódásáról
END_ENTITY;
A következő geometriai – topológiai entitás a térbeli nézet tulajdonképpen a fedvény fogalom általánosítása. A topológiai alapelemekre vonatkozó szabályok egy térbeli nézetre vonatkoznak. A térbeli nézet EXPRESS deklarációja előtt még deklarálnunk kell a benne szereplő séma azonosító típusát is.
TYPE
schema_id = STRING;
END_TYPE;
ENTITY spatial_view;
conforming_to: schema_id; -- a vonatkozó séma azonosítója
INVERSE
has_geometric_parts:
SET [0:?] OF geometric_primitive FOR is_part OF; -- a hozzátartozó geometriai elemek
has_structure_parts: SET [0:?] OF structure_primitive FOR is_part OF; --
a hozzátartozó topológiai elemek
WHERE
DR1: SIZEOF (has_geometric_parts) + SIZEOF (has_structure_parts) > 0; -- egy típus egy alapeleme mindenképpen ; -- szükséges
A szabvány röviden összefoglalja az adatminőséget érintő legfontosabb kérdéseket, utalva arra, hogy ezt a témát részletesen külön szabvány fogja tárgyalni. A felsorolt témák a következők:
· helyzeti pontosság;
· tematikus pontosság;
· időbeli pontosság;
· teljesség;
· logikai konzisztencia;
· szöveghűség.
Hasonlóképpen más szabvány lesz hivatott a metaadatok átfogó szabályozására, ezért az ismertetett szabvány csak a legfontosabb metaadatokat foglalja össze, de e mellett megadja a metaadat séma EXPRESS nyelvű leírását is.
A szabványban található legfontosabb metaadatok a következők:
· az adathalmaz egyedi neve;
· az adathalmaz tartalmának rövid összefoglalása;
· felhasználási terület, szervezet, idő;
· topológiai típus;
· térbeli referencia rendszer (koordinátás vagy indirekt);
· térképi vetület;
· magassági referencia rendszer;
· a maximális és minimális koordináták;
· határoló poligon
· közvetett térbeli referencia rendszer típus;
· a terület földrajzi neve;
· a minimális és maximális magasság értékek;
· időintervallum, melyre az adatok vonatkoznak;
· kapcsolattartó személy adatai;
· a metaadatok létrehozási ideje, megtörtént és tervezett frissítésének időpontjai;
· az adatok hálózati címe.
Lássuk ezután a kérdéses metaadat séma EXPRESS nyelvi megfogalmazását.
SCHEMA metadata;
USE
FROM CoordinateSystem (set_of_coordinates); -- séma a 6. mellékletből
USE FROM data_encoding (dataset); -- kódolási séma 2. melléklet
TYPE
conceptual_geometry_subschema = ENUMERATION OF (spaghetti, network,
planar_graph); -- 3
lehetséges elvi modell
END_TYPE;
TYPE
extent_status = ENUMERATION OF (actual, future);
END_TYPE;
TYPE
geometric_primitive_type = ENUMERATION OF (point, line, area);
END_TYPE;
TYPE
structure_primitive_type = ENUMERATION OF(node, edge, face);
END_TYPE;
TYPE
external_graphic_file_type = SELECT (vector_file, raster_file);
END_TYPE; -- külső
fájlok átvitelére is van lehetőség a szabványban
TYPE
raster_file = STRING;
END_TYPE;
TYPE vector_file = STRING;
END_TYPE;
ENTITY dataset_description;
SUBTYPE OF (dataset);
dataset_title: STRING;
dataset_abstract: STRING;
purpose: STRING;
usage: STRING;
geometry_subschema_type: conceptual_geometry_subschema;
spatial_reference_system_info:
STRING;
has_extent: SET [1:?]
OF extent;
has_planar_extent: SET [1:?] OF
planar_extent;
has_contact_person: SET [1:?] OF contact_person;
entry_date: date;
last_update_date: date;
last_check_date: date;
on_line_access: STRING;
END_ENTITY;
ENTITY extent;
ABSTRACT SUPERTYPE OF (ONEOF (planar_extent, vertical_extent, temporal_extent));
extent_date: date;
extent_status: extent_status;
END_ENTITY;
ENTITY bounding_xy;
SUBTYPE OF (planar_extent);
min_xy: LIST OF UNIQUE set_of_coordinates;
max_xy: LIST OF UNIQUE set_of_coordinates;
END_ENTITY;
ENTITY bounding_area;
SUBTYPE OF (planar_extent);
definition: LIST [3:?] OF set_of_coordinates;
END_ENTITY;
ENTITY geographic_area;
SUBTYPE OF (planar_extent);
type_of_indirect_spat_ref_system: STRING;
areal_unit: SET [1:?] OF geographic_areal_unit;
END_ENTITY;
ENTITY geographic_areal_unit;
name: STRING;
code: STRING;
coverage: STRING;
INVERSE
geographic_areas: SET of geographic_area FOR areal_unit;
END_ENTITY;
ENTITY vertical_extent;
SUBTYPE OF (extent);
min_value: REAL;
max_value: REAL;
END_ENTITY;
ENTITY temporal_extent;
SUBTYPE OF (extent);
from_date: date;
to_date: date;
END_ENTITY;
ENTITY contact_person;
name: STRING;
role: STRING;
organisation: STRING;
address: STRING;
telephon: STRING;
fax: STRING;
e_mail: STRING;
END_ENTITY;
END_SCHEMA;
A szabvány amint a bevezetőben említettük több EXPRESS nyelven megfogalmazott sémát tartalmaz mellékleteiben (Nyelvi séma – 1. melléklet, kódolási séma – 2. melléklet, adatállomány átviteli séma – 3. melléklet, földrajzi helyzet sémák – 6. melléklet, geometriai séma (az általunk is közölt geometriai és topológiai elemek egy sémában összefoglalva) –7. melléklet és végül a közölt metaadat séma – 8. melléklet.
Úgy gondoljuk, hogy ahhoz, hogy a szabványról általános elképzelésünk legyen nem szükséges a többi sémát is leírnunk, az érdeklődők a szabvány végleges változatát beszerezhetik a Magyar Szabványügyi Testületben.
Amint a [12] irodalomból kitűnik a már említett DAT alkalmazási sémához kapcsolódva elkészült már egy programozói segédlet is az adatcsere állomány fogadását és előállítását szolgáló interfész kifejlesztéséhez.
Érdekes a cikk azon megállapítása miszerint “ A GEOVIEW SYSTEMS kft gyakorlatban is kipróbálta az adatcserét a szabvány logikáját követve (szemantikailag azonos, szintaktikailag más)” (a kiemelés tőlem). Hogy ez a mondat valójában mit jelent nagyon nehéz eldönteni, különösen egy olyan összefüggésben, ahol egy adott formális nyelv alkalmazása van előírva. Ha a szintaktika más akkor a nyelvi formalizmusok is mások és az átvitel nem a szabvány szerint valósul meg.
Összefoglalva megállapíthatjuk, hogy az ismertetett szabvány széleskörű gyakorlati alkalmazása még várat magára.
· a következő részben megismerkedünk az OpenGIS koncepcióval
· esetleg visszatérhet az előző részhez
· illetve a tartalomjegyzékhez
Megjegyzéseit E-mail-en várja a szerző: Dr Sárközy Ferenc