[Gfoss] FOSS per metadati applicativi/GeoDB

Luca Sigfrido Percich sigfrido a tiscali.it
Ven 3 Giu 2011 15:27:22 CEST


Buon giorno a tutti,

qualcuno di voi è a conoscenza di un applicativo, anche a riga di
comando, o libreria FOSS cross-platform (preferibilmente python, ma
anche java, php...) che consenta di gestire metadati applicativi?
Esistono, indipendentemente dalla implementazione, degli standard per
metadati applicativi GIS, tipo UML?

Con metadati applicativi intendo:
- modello dati (schema) in cui le entità descritte siano mappabili su un
DB (geo)relazionale (platform-independent) ed eventualmente su classi
Java/Python: simile all'ORM, solo che non genero le classi dal database,
ma genero schema database E classi dal mio modello dati;
- properties e configurazioni utilizzabili da applicativi che fanno uso
dei dati modellizzati
- possibilità di estendere il metamodello con schemi propri del mondo
GIS (es. i grafi)
- possibilità di utilizzare gli oggetti del modello tramite scripts per
generare codice, sql, documentazione...

Ho visto SQLAlchemy, data la complessità non sono ancora riuscito a
capire fino a che punto sia possibile estenderne il modello dati, o se
un modello dati possa esistere indipendentemente da una istanza DB.

La cosa che più si avvicina a quel che ho in mente è un UML modeler
scriptabile, che mi consenta di generare files di testo/xml potendo
accedere ad una rappresentazione ad oggetti del modello dati che posso
manipolare tramite opportuna API. Banalmente, in PHP uno script per
copiare solo alcune tabelle da uno schema postGIS ad un'altro potrebbe
essere:

$model = DataModel::getInstance();
foreach ($entity in $model->$entities) {
	if (!$entity->isAbstract()) {
		$tableName = $entity->sqlName(SQL_DIALECT_POSTGIS);
		outputBuffer->add("insert into \"$out_schema\".\"$tableName\" select *
from \"$in_schema\".\"$tableName\";);
	}
}

Pensavo in realtà a Python per la possibilità di integrare lo strumento
in QGIS, ma uno strumento simile potrebbe funzionare anche come software
standalone.


Entro nel dettaglio.

Il caso d'uso è: abbiamo un database geografico con un centinaio di
tabelle, di cui esistono versioni locali e repository di sviluppo e
versioni pubbliche (attuali e storiche) che viene editato in MapInfo,
immagazzinato in PostGIS (in schemi diversi con diverse funzioni),
esportato in shape, visualizzato in MapInfo e QGIS, elaborato in GRASS,
e presto pubblicato in MapServer/GeoServer. In futuro spero non remoto
vorrei migrare anche l'editing su QGIS. Ovviamente uno strumento di
gestione delle configurazioni e del modello dati è fondamentale.

Attualmente gestiamo i metadati applicativi con un tool realizzato in
MSAccess (il classico prototipo definitivamente provvisorio).
Il tool descrive entità, attributi, associazioni, ereditarietà tra
entità di un geodatabase in modo sufficientemente astratto
dall'implementazione RDBMS/OO; lo realizzammo ai tempi del nostro
impegno in GeoTools per cui le entità descritte dovevano essere mappate
in Tabelle PostGIS così come in FeatureTypes Java.

A entità, attributi e relazioni è possibile attribuire delle PROPERTIES
che possono essere gestite a livello applicativo:
- settaggi dipendenti dalla piattaforma
- nomi compatibili con i diversi formati (es. con shapefile se il nome
originale è più lungo di 10 caratteri)
- mappatura esatta del tipo in funzione dell'RDBMS in cui si va a
generare lo schema
- TAGS che raggruppino entità accomunate da operazioni routinarie
- ...

Vengono inoltre gestiti oggetti specifici all'ambito GIS come i grafi
topologici, i route systems, gli attributi segmentati.

Ci sono altre caratteristiche non standard per UML o E/R, come i
templates - entità astratte con gruppi di attributi funzionalmente
correlati che possono essere inseriti in diverse entità, quasi fossero
interfaces basate però sui dati anziché sui metodi, con una risultante
"ereditarietà multipla" delle tabelle.

Tutte queste informazioni sono attualmente salvate in tabelle, ma
potrebbero tranquillamente stare in un XML, ed esprimono un modello dati
usando appunto questa specie di accrocchio tra UML ed E/R.

Attraverso una serie di classi e procedure, il tool consente, partendo
dal modello dati, di:

- generare lo schema (le create table) in MapInfo, PostGIS e volendo in
altri DB
- generare un file di configurazione per il tool di edit del geodatabase
(attualmente in MapInfo). In prospettiva, generare analoghe
configurazioni per plugins QGIS. Per esempio, il tool di modifica di un
grafo deve sapere, per ogni grafo, quali sono le tabelle che
implementano archi e nodi, e in quali associazioni sono memorizzate le
relazioni topologiche nodo-da e nodo-a. Domani questa informazione
potrebbe essere spostata in stored procedures PostGIS, sempre generate
automaticamente dal tool.
- generare script ad hoc: caricamento ed export con OGR2OGR, estrazione,
validazione, creazione di schemi con opzioni differenti (check
constraints on/off ad esempio)...

Esempio: se definisco una regola di integrità nel modello dati, posso
poi implementarla (generarla automaticamente) come:
- file di configurazione di un plugin su GIS desktop che, alla modifica
di un record, verifica che la validazione passi; in alternativa, codice
python incluso stesso plugin;
- generazione di un metodo validate() per una classe generata da ORM;
- una alter table ... add contraint ... check in PostGIS
- una create view errori_tabella as select ... WHERE
condizione_di_errore in PostGIS
- un gestore evento javascript onSubmit() per un form su webGIS
...

Successivamente vorrei estendere il modello con metadati applicativi di
visualizzazione (integrazione con SLD), i cataloghi e metadati di
istanza (Dublin Core ad esempio).

Naturalmente vorrei portare avanti lo sviluppo come software GFOSS.

Attendo qualche feedback, rimango a disposizione per eventuali
chiarimenti e scusate per la lunghezza del post.

Sig




_____________
PRIVACY
Le informazioni contenute in questo messaggio sono riservate e confidenziali. Il loro utilizzo e' consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora Lei non fosse la persona a cui il presente messaggio è destinato, La invitiamo ad eliminarlo dal Suo Sistema e a distruggere le varie copie o stampe, dandone gentilmente comunicazione all’indirizzo mail del mittente. Ogni utilizzo improprio e' contrario ai principi del D.lgs 196/03 e alla legislazione europea (Direttiva 2002/58/CE).

PRIVACY
Le informazioni contenute in questo messaggio sono riservate e confidenziali. Il loro utilizzo e' consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora Lei non fosse la persona a cui il presente messaggio è destinato, La invitiamo ad eliminarlo dal Suo Sistema e a distruggere le varie copie o stampe, dandone gentilmente comunicazione all’indirizzo mail del mittente. Ogni utilizzo improprio e' contrario ai principi del D.lgs 196/03 e alla legislazione europea (Direttiva 2002/58/CE).

-- 
This email was Anti Virus checked by Astaro Security Gateway. http://www.amat-mi.it


Maggiori informazioni sulla lista Gfoss