[Gfoss] FOSS per metadati applicativi/GeoDB

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

In data venerdì 3 giugno 2011 15:27:22, Luca Sigfrido Percich ha scritto:
: > 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?

Ciao Sig,

e benvenuto in lista!

Dopo 15 che ti rompo le scatole vedo con molto piacere che hai fatto il salto
in GFOSS :slight_smile:

Ripondendo al tuo quesito, hai pensato a partire da GeoDjango [1] ?

È un ottimo ORM geografico e gestisce diversi backend (PostGIS, Spatialite
ecc.).

Non ha tutte le funzionalità che cerchi ma rispetto a SQLAlchemy direi che è
probabilmente più maturo.

[1] https://docs.djangoproject.com/en/dev/ref/contrib/gis/

--
Alessandro Pasotti
itOpen - "Open Solutions for the Net Age"
w3: www.itopen.it
Linux User# 167502

Ciao Ale,

grazie per la dritta - e grazie per i 15 anni di insistente (talvolta
molesto) proselitismo FOSS con me. Del resto sai che sui miei PC il
dual-boot con Linux non è mai mancato :wink:

Non conosco Django/GeoDjango, ma da una rapida scorsa ai doc mi è parso
di capire che, analogamente a SQLAlchemy, consente definire il modello
dati istanziando oggetti da opportune classi (Model in Django, Table in
SQLAlchemy).

In SQLAlchemy si possono anche implementare nel modello i vincoli di
integrità referenziale (immagino anche in Django), ma mancano gli
attributi geometrici. Tuttavia il modello è estensibile e dà la
possibilità di generare DDL SQL custom (penso a addgeometrycolumn()).
Inoltre si possono creare connettori verso altri DB, quindi si potrebbe
pensare ad esempio ad un connettore OGR.

In entrambi i tools, essendo il modello rappresentato da classi Python,
penso sia semplice aggiungere dei decoratori o subclassare sia per
generare scripts ad hoc, che per gestire nuove semantiche (penso
soprattutto alla topologia).

Le funzioni ORM fornite da entrambi i tools mi sembrano più interessanti
in un contesto Web; QGIS, OGR, GeoTools etc forniscono già le loro
classi di accesso ai dati, e non so quanto possa aver senso sovrapporre
un ORM ad un altro ad esempio in un plugin Python.

Mi guarderò approfonditamente entrambi i framework e vi terrò informati
sugli sviluppi.

Ciao a tutti

Sig

Il giorno ven, 03/06/2011 alle 19.08 +0200, Alessandro Pasotti ha
scritto:

In data venerdì 3 giugno 2011 15:27:22, Luca Sigfrido Percich ha scritto:
: > 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?

Ciao Sig,

e benvenuto in lista!

Dopo 15 che ti rompo le scatole vedo con molto piacere che hai fatto il salto
in GFOSS :slight_smile:

Ripondendo al tuo quesito, hai pensato a partire da GeoDjango [1] ?

È un ottimo ORM geografico e gestisce diversi backend (PostGIS, Spatialite
ecc.).

Non ha tutte le funzionalità che cerchi ma rispetto a SQLAlchemy direi che è
probabilmente più maturo.

[1] https://docs.djangoproject.com/en/dev/ref/contrib/gis/

--
Alessandro Pasotti
itOpen - "Open Solutions for the Net Age"
w3: www.itopen.it
Linux User# 167502
_______________________________________________
Iscriviti all'associazione GFOSS.it: http://www.gfoss.it/drupal/iscrizione
Gfoss@lists.gfoss.it
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
Questa e' una lista di discussione pubblica aperta a tutti.
Non inviate messaggi commerciali.
I messaggi di questa lista non rispecchiano necessariamente
le posizioni dell'Associazione GFOSS.it.
518 iscritti al 3.6.2011

Luca, ciao. Capisco poco di quello che dite : ) però … non è per caso che ti serva una cosa simile?

http://www.geoalchemy.org

Ciao

Luca

Ciao Luca,

sarà che capisci poco, ma hai scovato l'estensione geografica di
SQLAlchemy. Tordo come sono sarei stato capace di reimplementarla prima
di accorgermi che esisteva :slight_smile:

A questo punto si tratta di confrontare GeoAlchemy e GeoDjango, oltre a
vedere i GeoUML tools sviluppati dal polimi come suggerito da Andrea
Peri.

Grazie a tutti per le preziose dritte, vi terrò informati

Sig

Il giorno dom, 05/06/2011 alle 12.40 +0200, Luca Mandolesi ha scritto:

Luca, ciao. Capisco poco di quello che dite : ) però ... non è per
caso che ti serva una cosa simile?

http://www.geoalchemy.org

Ciao

Luca