Question

J'ai un modèle d'ontologie Jena ( OntModel ) que je modifie par programme. Ce modèle a été créé initialement à l'aide de méthode ModelFactory par défaut pour créer un modèle d’ontologie (sans paramètre) . Le problème était que, lorsque le programme était exécuté et que le modèle avait été modifié, le comportement par défaut de Jena Reasoner était exécuté (et exécuté et exécuté). Le processus était totalement trop lent pour ce dont j'avais besoin et je manquerais de mémoire pour de grands ensembles de données.

J'ai modifié le programme pour utiliser une méthode différente de la fabrique de modèles d'ontologies pour créer un modèle sans motif. Cela a fonctionné extrêmement vite et n'a présenté aucun des problèmes de mémoire que j'ai vus plus tôt (même pour de très grands ensembles de données). Le problème avec cette approche est que je ne peux accéder aux données qu'en utilisant directement son type de classe direct (je ne peux pas accéder aux objets utilisant sa classe parente).

Par exemple, imaginez que je dispose de deux ressources de classe, "flower". et "graine". Ceux-ci héritent d'un parent commun, un "matériel végétal". Mon programme utilise tous les "semences", utilise une méthode appelée "cultiver". qui transforme la "graine" objet dans une " fleur " objet. Le " grandir " méthode est trop lente et manque de mémoire lors de l’utilisation d’un Reasoner (même du micro Reasoner). Si je désactive le Reasoner, je ne peux pas accéder à toutes les "fleurs". et " graines " en utilisant le "matériel végétal" classe.

Existe-t-il un moyen privilégié (un juste milieu) de le faire ... permettant d'accéder à des objets à l'aide de leur super-classe tout en étant rapides et sans être un bourreau de mémoire?

Je cherchais un moyen de "désactiver le raisonneur". pendant que je lance mon " Grow " méthode, puis la retourner une fois la méthode terminée. Est-ce possible d'une certaine manière?

Était-ce utile?

La solution

J'ai reçu une aide et suggestions , puis ce Voici comment j'ai résolu ce problème.

Fondamentalement, j’ai eu accès à un autre modèle sans Reasoner, mis en lot toutes mes modifications apportées au modèle de base, puis reboundé le modèle complet avec le raisonneur pour obtenir les mises à jour.

Voici un peu de code pseudo. Il ne correspond pas exactement à mon " real " scénario, mais vous avez l'idée.

// 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....
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top