obdasystems / eddy

A graphical editor for the specification and visualization of Graphol ontologies
GNU General Public License v3.0
57 stars 7 forks source link

Create project from owl file #230

Closed MariaRosariaFraraccio closed 1 year ago

MariaRosariaFraraccio commented 1 year ago

@mnamici ho aggiunto le modifiche che avevamo detto ma ho dovuto lasciare l'emit del segnale nel doCreateSession di application.py perché il diagramma non poteva essere attivato prima del session.show().

mnamici commented 1 year ago

Ho separato le modifiche e aggiunto un paio di correzioni minori.

mnamici commented 1 year ago

Ho aggiunto i fix per il nome del progetto. La soluzione finale è un pò diversa da quella fatta insieme ora il nome non lo passiamo al loader ma lo settiamo nella sessione per non rompere l'uso dell'api dei loader.

Si può procedere con la gestione degli assiomi import e le correzioni sulla gestione di iri/versione di cui abbiamo parlato.

MariaRosariaFraraccio commented 1 year ago

Ho eliminato la funzione getImports dal loader perché chiamando poi il plugin verrebbe eseguita due volte. Per il path invece ho inserito quello locale nel caso in cui riesca a trovare l'ontologia sul disco, altrimenti l'URI, va bene?

mnamici commented 1 year ago

Per quanto riguarda il getImports non è un problema se è duplicato, perché la funzione di creazione da file owl la stiamo realizzando indipendente dal plugin. Comunque per ora va bene, lasciamolo sono nel plugin (idealmente dovremmo avere il test di uguaglianza degli oggetti ImportedOntology così da evitare l'aggiunta doppia).

Per il resto c'è da fare una modifica. Se provi ad importare una qualsiasi ontologia con 1 import, il quale non risolve alla IRI specificata, l'operazione termina con una eccezione.

Prova ad esempio ad importare la seguente ontologia:

Ontology(<http://www.semanticweb.org/my/ontology/> 
         <http://www.semanticweb.org/my/ontology/1.0/>
Import(<http://www.movieontology.org/ontology/>))

Guardando lo stacktrace il problema sta nel modo con cui configuri il MissingImportHandlingStrategy, sia nel loader che nel plugin, devi cambiare la seguente riga:

manager.getOntologyLoaderConfiguration()
              .setMissingImportHandlingStrategy(MissingImportHandlingStrategy.SILENT)

in qualcosa del genere:

 config = manager.getOntologyLoaderConfiguration()
 config = config.setMissingImportHandlingStrategy(MissingImportHandlingStrategy.SILENT)
 manager.setOntologyLoaderConfiguration(config)

perché l'oggetto OntologyLoaderConfiguration è immutabile, il set degli attributi restituisce un nuovo oggetto.

Questo chiaramente fa si che la creazione del progetto vada a buon fine, ma gli import mancanti vengono proprio ignorati, senza neanche una notifica. Per il momento possiamo pure lasciarlo così, poi implementeremo un wizard di caricamento delle ontologie mancanti (simile a cosa avviene in protege).