Domanda

Ho un modello di ontologia Jena ( OntModel ) che sto modificando a livello di codice. Questo modello è stato inizialmente creato utilizzando metodo ModelFactory predefinito per creare un modello Ontology (senza parametri) . Il problema era che, mentre il programma veniva eseguito e il modello veniva modificato, il Jena Reasoner predefinito veniva eseguito (ed eseguito ed eseguito ed eseguito). Il processo era del tutto troppo lento per quello di cui avevo bisogno e sarebbe rimasto senza memoria su grandi set di dati.

Ho cambiato il programma per usare un metodo di produzione del modello di ontologia diverso per creare un modello senza ragionamento. Questo ha funzionato estremamente velocemente e non ha mostrato nessuno dei problemi di memoria che ho visto prima (anche per set di dati molto grandi). Il problema con questo approccio è che posso accedere ai dati solo usando direttamente il suo tipo di classe diretta (non riesco ad accedere agli oggetti usando la sua classe genitore).

Ad esempio, immagina di avere due risorse di classe, " flower " e "seme". Questi ereditano da un genitore comune, "materiale vegetale". Il mio programma prende tutti i "semi", esegue un metodo chiamato "crescere" che trasforma il "seme" oggetto in un "fiore" oggetto. Il "crescere" Il metodo funziona troppo lentamente e la memoria si esaurisce quando si utilizza un Reasoner (anche il micro Reasoner). Se spengo il Reasoner, non riesco ad accedere a tutti i "fiori" e "semi" utilizzando il "materiale vegetale" Classe.

Esiste un modo preferito (un mezzo felice) per farlo ... consentendo la possibilità di accedere agli oggetti usando la loro superclasse pur essendo veloce e non un maiale di memoria?

Ho cercato un modo per " disattivare il ragionatore " mentre eseguo il mio " crescere " metodo e quindi ripristinarlo di nuovo una volta completato il metodo. È possibile in qualche modo?

È stato utile?

Soluzione

Ho ricevuto aiuto e suggerimenti , quindi questo è come ho risolto questo problema.

Fondamentalmente, ho ottenuto l'accesso a un altro modello senza un Reasoner, ho messo in batch tutte le mie modifiche al modello di base, quindi ho rimbalzato il modello completo con il ragionatore per ottenere gli aggiornamenti.

Ecco un po 'di codice psuedo. Non corrisponde esattamente al mio " reale " scenario, ma ti viene l'idea.

// Create a model with a reasoner and load the full model from owl files or
// whatever
OntModel fullModel = ModelFactory.createOntologyModel();
fullModel.read(...);

// create a model without a reasoner and load it from the full model with
// reified statements
OntModel basicModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_MEM);
basicModel.add(fullModel);

// batch modifications to the basic model programatically
//(**** RUNS REALLY QUICK *****)

// rebind the full model
fullModel.rebind();

// continue on....
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top