用颗粒操纵本体

时间:2015-09-15 20:46:27

标签: ontology owl-api pellet

我使用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;
    }
    }
}

祝你好运, 格雷斯

1 个答案:

答案 0 :(得分:0)

你可以发布你正在使用的类路径吗?这看起来像是在类路径上有多个版本的Pellet的问题。