Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create project from owl file #230

Merged
merged 11 commits into from
Nov 8, 2022

Conversation

MariaRosariaFraraccio
Copy link
Contributor

No description provided.

@MariaRosariaFraraccio MariaRosariaFraraccio linked an issue Oct 3, 2022 that may be closed by this pull request
@MariaRosariaFraraccio
Copy link
Contributor Author

@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().

eddy/core/loaders/owl.py Outdated Show resolved Hide resolved
eddy/core/application.py Show resolved Hide resolved
eddy/ui/session.py Outdated Show resolved Hide resolved
eddy/ui/session.py Outdated Show resolved Hide resolved
eddy/ui/session.py Outdated Show resolved Hide resolved
eddy/ui/session.py Outdated Show resolved Hide resolved
eddy/ui/welcome.py Outdated Show resolved Hide resolved
eddy/ui/welcome.py Outdated Show resolved Hide resolved
eddy/ui/welcome.py Outdated Show resolved Hide resolved
@mnamici
Copy link
Collaborator

mnamici commented Oct 11, 2022

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

rooosyf added 6 commits October 13, 2022 10:44
Loads ontology metadata from an owl 2 file and creates a new
project from it.
Used to create a project from an OWL 2 file.
Adds a new kwarg to provide a path to an owl 2 file and a new signal
emitted when the project is successfully created from the owl 2 file.
Used to pass an owl 2 file path to the session for project creation.
@mnamici
Copy link
Collaborator

mnamici commented Oct 13, 2022

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.

ontologyV = None
else:
ontologyIRI = ontologyID.getOntologyIRI().get().toString()
ontologyURI = ontologyID.getOntologyIRI().get().toURI().toString()
Copy link
Collaborator

@mnamici mnamici Oct 18, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mentre dal punto di vista della specifica OWL questa operazione è corretta, in pratica non ci basta perché la maggior parte delle volte l'ontologia non è accessibile dal web. Dobbiamo scrivere qui il path al file dell'ontologia, che poi viene propagato nel file graphol.
EDIT: mi riferisco alla riga 870

ontologyV = None
else:
ontologyIRI = ontologyID.getOntologyIRI().get().toString()
ontologyURI = ontologyID.getOntologyIRI().get().toURI().toString()
Copy link
Collaborator

@mnamici mnamici Oct 18, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Stessa cosa qui, va inserito il path al file altrimenti non riusciamo a caricarla nuovamente.
EDIT: mi riferisco alla riga 117

eddy/core/loaders/owl2.py Outdated Show resolved Hide resolved
eddy/core/loaders/owl2.py Outdated Show resolved Hide resolved
@MariaRosariaFraraccio
Copy link
Contributor Author

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
Copy link
Collaborator

mnamici commented Oct 25, 2022

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).

@mnamici mnamici merged commit bc42a86 into obdasystems:develop Nov 8, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[FEATURE]: Create project from OWL file
2 participants