манипулировать онтологией с помощью гранулы

Я построил онтологию с помощью protege4 и хочу манипулировать с помощью java. Я попробовал это, используя ризонер для гранул.

Но у меня есть некоторые ошибки.

Exception in thread "main" java.lang.NoSuchMethodError: org.mindswap.pellet.utils.VersionInfo.getInstance()Lorg/mindswap/pellet/utils/VersionInfo;
at com.clarkparsia.pellet.owlapiv3.PelletReasoner.createVersion(PelletReasoner.java:86)
at com.clarkparsia.pellet.owlapiv3.PelletReasoner.<clinit>(PelletReasoner.java:83)
at com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory.createReasoner(PelletReasonerFactory.java:69)
at com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory.createReasoner(PelletReasonerFactory.java:33)
at sara.Ontologie.main(Ontologie.java:48)

Пожалуйста, мне нужна помощь, потому что я не понимаю, что не так с кодом.

Код :

import com.clarkparsia.owlapi.explanation.DefaultExplanationGenerator;
import com.clarkparsia.owlapi.explanation.util.SilentExplanationProgressMonitor;
import com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory;
import com.clarkparsia.pellet.owlapiv3.PelletReasoner;
import java.io.File;
import org.semanticweb.owlapi.apibinding.OWLManager;
import org.semanticweb.owlapi.io.OWLObjectRenderer;
import org.semanticweb.owlapi.model.*;
import org.semanticweb.owlapi.reasoner.OWLReasoner;
import org.semanticweb.owlapi.reasoner.OWLReasonerFactory;
import org.semanticweb.owlapi.reasoner.SimpleConfiguration;
import org.semanticweb.owlapi.vocab.OWLRDFVocabulary;
import org.semanticweb.owlapi.vocab.PrefixOWLOntologyFormat;
import uk.ac.manchester.cs.owl.explanation.ordering.ExplanationOrderer;
import uk.ac.manchester.cs.bhig.util.Tree;
import uk.ac.manchester.cs.owl.explanation.ordering.ExplanationOrdererImpl;
import uk.ac.manchester.cs.owl.explanation.ordering.ExplanationTree;
import uk.ac.manchester.cs.owlapi.dlsyntax.DLSyntaxObjectRenderer;

import java.util.*;

public class Ontologie {

    private static final File file = new File("C:\\Users\\DELL\\ontologies\\Ontology1436875909396\\Ontology1436875909396.owl");
    private static OWLObjectRenderer renderer = new DLSyntaxObjectRenderer();

    public static void main (String args[])throws OWLOntologyCreationException {

        // Préparer l'ontologie et le raisonneur
        OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
        OWLOntology ontology = manager.loadOntologyFromOntologyDocument(IRI.create(file));
        OWLReasonerFactory reasonerFactory = PelletReasonerFactory.getInstance();
        OWLReasoner reasoner = reasonerFactory.createReasoner(ontology, new SimpleConfiguration());
        OWLDataFactory factory = manager.getOWLDataFactory();
        PrefixOWLOntologyFormat pm = (PrefixOWLOntologyFormat)manager.getOntologyFormat(ontology);
        pm.setDefaultPrefix(file + "#");
        //pm.setDefaultPrefix(ontologie_URL + "#");

        // Récupération des classes et leurs instances
        OWLClass classeProduit = factory.getOWLClass(":Produit", pm);
        for(OWLNamedIndividual produit : reasoner.getInstances(classeProduit, false).getFlattened()) {
            System.out.println("Produit : " + renderer.render(produit));
        }

        // Get a given individual
        OWLNamedIndividual oignon = factory.getOWLNamedIndividual(":Oignon", pm);

        // Get values of selected properties on the individual
        OWLDataProperty proprieteQuantite = factory.getOWLDataProperty(":aUneQuantiteDe", pm);

        OWLObjectProperty proprieteProvenance = factory.getOWLObjectProperty(":provientDe", pm);

        for(OWLLiteral quantite : reasoner.getDataPropertyValues(oignon, proprieteQuantite)) {
            System.out.println("La quantité produite d'oignons est : " + quantite.getLiteral());
        }

        for(OWLNamedIndividual indiv : reasoner.getObjectPropertyValues(oignon, proprieteProvenance).getFlattened()) {
            System.out.println("Les oignons proviennent des villes de : " + renderer.render(indiv));
        }

        // Get labels
        LocalizedAnnotationSelector as = new LocalizedAnnotationSelector(ontology, factory, "en", "as");
        for(OWLNamedIndividual indiv : reasoner.getObjectPropertyValues(oignon, proprieteProvenance).getFlattened()) {
            System.out.println("Les oignons proviennent des villes de : '" + as.getLabel(indiv) + "'");
        } 

        // Find to which classes the individuals belongs
        Set<OWLClassExpression> assertedClasses = oignon.getTypes(ontology);
        for(OWLClass c : reasoner.getTypes(oignon, false).getFlattened()) {
            boolean asserted = assertedClasses.contains(c);
            System.out.println((asserted ? "asserted" : "inferred") + " Oignon appartient à la classe : " + renderer.render(c));
        }

        // Lister toutes les propriétés objet pour un individu
        Map<OWLObjectPropertyExpression, Set<OWLIndividual>> assertedValues = oignon.getObjectPropertyValues(ontology);
        for(OWLObjectProperty objProp : ontology.getObjectPropertiesInSignature(true)) {
            for(OWLNamedIndividual indiv : reasoner.getObjectPropertyValues(oignon, objProp).getFlattened()) {
                boolean asserted = assertedValues.get(objProp).contains(indiv);
                System.out.println((asserted ? "asserted" : "inferred") + " object property de oignon : " + renderer.render(objProp) + "--> " + renderer.render(indiv));
            }
        }

        // Lister toutes les instances pareilles (same as)

        // Vérifier si la règle SWRL est utilisée
        OWLNamedIndividual nabeul = factory.getOWLNamedIndividual(":Nabeul", pm);
        OWLClass classeVilleImp = factory.getOWLClass(":Ville Importante", pm);
        OWLClassAssertionAxiom axiomeAExpliquer = factory.getOWLClassAssertionAxiom(classeVilleImp, nabeul);
        System.out.println( "Nabeul est-elle une ville importante ? " + reasoner.isEntailed(axiomeAExpliquer));

        // Expliquer pourquoi Nabeul est une ville importante
        DefaultExplanationGenerator explanationGenerator = new DefaultExplanationGenerator
            (manager, reasonerFactory, ontology, reasoner, new SilentExplanationProgressMonitor());
        Set<OWLAxiom> explanation = explanationGenerator.getExplanation(axiomeAExpliquer);
        ExplanationOrderer deo = new ExplanationOrdererImpl(manager);
        ExplanationTree explanationTree = deo.getOrderedExplanation(axiomeAExpliquer, explanation);
        System.out.println();
        System.out.println("-- explication de pourquoi Nabeul est dans la classe Ville Importante --");
        printIndented(explanationTree, "");

    }

    private static void printIndented(Tree<OWLAxiom> node, String indent) {
        OWLAxiom axiome = node.getUserObject();
        System.out.println(indent + renderer.render(axiome));
        if(!node.isLeaf()) {
            for(Tree<OWLAxiom> child : node.getChildren()) {
                printIndented(child, indent + "    ");
            }
        }
    }

    // Classe utile pour extraire les labels, les commentaires et d'autres annotations dans les langues voulues
    //
    public static class LocalizedAnnotationSelector {
        private final List<String> langs;
        private final OWLOntology ontology;
        private final OWLDataFactory factory;

        // Constructeur
        public LocalizedAnnotationSelector(OWLOntology ontology, OWLDataFactory factory, String... langs) {
            this.langs = (langs == null) ? Arrays.asList(Locale.getDefault().toString()) : Arrays.asList(langs);
            this.ontology = ontology;
            this.factory = factory;
        }

        // Fournir le premier label dans le premier matching language
        public String getLabel(OWLNamedIndividual indiv) {
            return getAnnotationString(indiv, OWLRDFVocabulary.RDFS_LABEL.getIRI());
        }

        public String getComment(OWLNamedIndividual indiv) {
            return getAnnotationString(indiv, OWLRDFVocabulary.RDFS_COMMENT.getIRI());
        }

        public String getAnnotationString(OWLNamedIndividual indiv, IRI annotationIRI) {
            return getLocalizedString(indiv.getAnnotations(ontology, factory.getOWLAnnotationProperty(annotationIRI)));
        }

    private String getLocalizedString(Set<OWLAnnotation> annotations) {
        List<OWLLiteral> literalLabels = new ArrayList<OWLLiteral> (annotations.size());
        for(OWLAnnotation label : annotations) {
            if(label.getValue() instanceof OWLLiteral) {
                literalLabels.add((OWLLiteral) label.getValue());
            }
        }
        for(String lang : langs) {
            for(OWLLiteral literal : literalLabels) {
                if(literal.hasLang(lang)) return literal.getLiteral();
            }
        }
        for(OWLLiteral literal : literalLabels) {
            if(!literal.hasLang()) return literal.getLiteral();
        }
        return null;
    }
    }
}

С уважением, Грейс


person Makolle Jeanne    schedule 15.09.2015    source источник
comment
Ну покажи код!   -  person deadbeef    schedule 15.09.2015
comment
Привет @Makolle Жанна, добро пожаловать в SO. Какой код вы пытались запустить, и возникло это исключение? Пожалуйста, отредактируйте свой вопрос, чтобы добавить его.   -  person Gustavo Straube    schedule 15.09.2015
comment
Это может быть проблема с зависимостями для Pellet. Вы уверены, что разрешили все зависимости для Pellet и OWL-API перед их использованием?   -  person Kunal Khaladkar    schedule 16.09.2015
comment
Также после компиляции вашего кода в моей рабочей области я вижу, что вы используете несколько устаревших методов и некоторые неправильные вызовы API. Какая у вас версия Pellet и какая версия owl-api?   -  person Kunal Khaladkar    schedule 16.09.2015
comment
@KunalKhaladkar я не уверен, что разрешил зависимости. потому что я ничего об этом не знаю. спасибо за помощь   -  person Makolle Jeanne    schedule 17.09.2015
comment
Привет @Kunal Khaladkar. Я использую гранулы 2.3.2 и owlapi-distribution-3.4.3-bin. А вот в протеже моя версия пеллета 2.2   -  person Makolle Jeanne    schedule 17.09.2015


Ответы (1)


Можете ли вы опубликовать путь к классам, который вы используете? Это похоже на проблему с несколькими версиями Pellet в пути к классам.

person Ignazio    schedule 16.09.2015
comment
Привет @Ignazio Я скачал Pellet отсюда [raw.githubusercontent.com/ignazio1977/pellet/releases/, и я скопировал все файлы в папку lib и поместил их в свой путь к классам. - person Makolle Jeanne; 17.09.2015
comment
Можете ли вы убедиться, что в вашем пути к классам есть только одна банка с гранулированным ядром? - person Ignazio; 17.09.2015
comment
Да Игнацио есть только один пуленепробиваемый - person Makolle Jeanne; 17.09.2015
comment
Я запускаю код, и у меня больше нет ошибок. Я добавил файлpellet.jar непосредственно в библиотеку проекта. Поэтому я удалил его. Спасибо за помощь. Однако у меня не все результаты в консоли - person Makolle Jeanne; 17.09.2015