2015-09-15 30 views
1

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

最好的问候, 格雷斯

+0

那么,显示代码! – deadbeef

+0

嘿@Makolle珍妮,欢迎来到SO。你试图运行什么代码并引发这个异常?请编辑您的问题以添加它。 –

+0

这可能是Pellet依赖关系的一个问题。在使用它们之前,你确定已经解决了Pellet和OWL-API的所有依赖关系吗? –

回答

0

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

+0

嗨@Ignazio我从这里下载Pellet [https://raw.githubusercontent.com/ignazio1977/pellet/releases/pellet-distribution-2.3.2-SNAPSHOT-dist.zip]和我复制lib文件夹中的所有文件,并将它们放入我的类路径中。 –

+0

你可以确定你的类路径中只有一个pellet-core jar吗? – Ignazio

+0

是的Ignazio只有一个颗粒核心 –