/ / Comment compter les individus d'une classe de hibou à Iéna? - java, jena, ontologie, hibou

Comment compter les individus d'une classe de hibou à Iéna? - java, jena, ontologie, hibou

Je travaille sur l’instanciation automatique d’un modèle OWL avec Jena. Chaque individu ayant besoin d’un identifiant unique.

Comment pourrais-je connaître le nombre d'individu d'une classe OWL donnée afin de générer un nouveau id pour le prochain individu à instancier dans cette classe?

J’ai essayé avec le code Java Jena suivant en utilisant la méthode listIndividuals, Ça y est, mais ça ne marche pas.

import com.hp.hpl.jena.ontology.*;
import com.hp.hpl.jena.model.*;
import com.hp.hpl.jena.util.iterator.ExtendedIterator;

public static int individualSize(Resource res){

int size = 0;

ExtendedIterator<Individual> individuals = domainModel.listIndividuals(res);

while (individuals.next() != null){ size++; }

return size;
}

static String xmlbase = "http://www.semantic.org/ontologies/exemple.owl#";
OntModel domainModel = ModelFactory.createOntologyModel(ProfileRegistry.OWL_DL_LANG);
domainModel.read((new FileInputStream(ontoInPath)), null);

int nextId = individualSize(domainModel.getOntClass(xmlbase+"Event"));

System.out.print(nextId);

L'erreur est:

Exception in thread "main" java.util.NoSuchElementException
at com.hp.hpl.jena.util.iterator.NiceIterator.ensureHasNext(NiceIterator.java:37)
at com.hp.hpl.jena.util.iterator.UniqueExtendedIterator.next(UniqueExtendedIterator.java:77)
at soctrace.Intology.individualSize(Intology.java:225)
at soctrace.Intology.manageOntologies(Intology.java:124)
at soctrace.Intology.main(Intology.java:65)

Y at-il une méthode de la Jena API cela peut m'aider à le faire plus facilement?

sinon ! Comment pourrais-je corriger mon code.

Merci pour toute réponse!

Réponses:

4 pour la réponse № 1

Votre code:

while (individuals.next() != null){ size++; }

N'est-ce pas la bonne façon d'utiliser un itérateur, ce que vous voulez, c'est ceci:

while (individuals.hasNext()) {
size++;
individuals.next();
}

Vous pouvez également vouloir fermer ce FileInputStream si Model.read ne le fait pas déjà.

En outre, si vous envisagez de travailler avec OWL, vous voudrez peut-être utiliser OWLAPI qui est une API Java centrée sur OWL. Jena est géniale, mais elle est plus centrée sur RDF / triple, ce qui la rend lourde à utiliser (du moins selon mon expérience) pour de véritables applications basées sur OWL. Vous voudrez probablement également envisager l’utilisation d’un raisonneur OWL dédié, tel que Ermite ou Pastille si vous allez faire beaucoup de raisonnement dans votre application.


2 pour la réponse № 2

Si je fais les calculs correctement, vous avez quand même une erreur particulière. Essayez:

public static int individualSize(Resource res){

int size = 0;
ExtendedIterator<Individual> individuals = domainModel.listIndividuals(res);

while(individuals.hasNext()) {
individuals.next();
size++;
}
return size;
}