2017-05-08 4 views
2

Ich habe ein Problem, wenn ich SWRLAPI oder SWRL mit Drools API hinzufügen möchte. Ich habe SWRLAPI, SWRLAPI mit Drools und OWLAPI Abhängigkeiten mit Maven hinzugefügt. Es scheint ein Problem mit SWRLAPIFactory.createSWRLRuleEngine (o) zu bestehen. Hier ist meine HauptklasseAusnahme beim Hinzufügen von SWRLAPI, um Swrl-Regeln in Java zu manipulieren

OWLOntologyManager m = OWLManager.createOWLOntologyManager(); 
    File file = new File("OoEI.owl"); 
    OWLOntology o = m.loadOntologyFromOntologyDocument(file); 
    // Create a SWRL rule engine using the SWRLAPI 
    SWRLRuleEngine ruleEngine = SWRLAPIFactory.createSWRLRuleEngine(o); 
    PelletReasoner reasoner = com.clarkparsia.pellet.owlapiv3.PelletReasonerFactory.getInstance().createReasoner(o); 

und hier ist mein pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>OWLAPITest</groupId> 
<artifactId>OWLAPITest</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<build> 
    <sourceDirectory>src</sourceDirectory> 
    <resources> 
     <resource> 
      <directory>src</directory> 
      <excludes> 
       <exclude>**/*.java</exclude> 
      </excludes> 
     </resource> 
    </resources> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.5.1</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 


<dependencies> 
    <!-- https://mvnrepository.com/artifact/net.sourceforge.owlapi/owlapi-distribution --> 
    <dependency> 
     <groupId>net.sourceforge.owlapi</groupId> 
     <artifactId>owlapi-distribution</artifactId> 
     <version>5.1.0</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/com.github.ansell.pellet/pellet-owlapiv3 --> 
    <dependency> 
     <groupId>com.github.ansell.pellet</groupId> 
     <artifactId>pellet-owlapiv3</artifactId> 
     <version>2.3.3</version> 
    </dependency> 

    <!-- https://mvnrepository.com/artifact/edu.stanford.swrl/swrlapi-drools-engine --> 
    <dependency> 
     <groupId>edu.stanford.swrl</groupId> 
     <artifactId>swrlapi-drools-engine</artifactId> 
     <version>2.0.0</version> 
    </dependency> 


    <dependency> 
     <groupId>edu.stanford.swrl</groupId> 
     <artifactId>swrlapi</artifactId> 
     <version>2.0.0</version> 
    </dependency> 






</dependencies> 

ich diese Ausnahme erhalten:

Exception in thread "main" org.swrlapi.exceptions.SWRLRuleEngineException: Error creating rule engine Drools. Exception: java.lang.NoSuchMethodError. Message: org.semanticweb.owlapi.model.OWLOntologyManager.getIRIMappers()Lorg/semanticweb/owlapi/util/PriorityCollection; 
    at org.swrlapi.factory.DefaultSWRLRuleAndQueryEngineFactory.createSWRLRuleEngine(DefaultSWRLRuleAndQueryEngineFactory.java:73) 
    at org.swrlapi.factory.DefaultSWRLRuleAndQueryEngineFactory.createSWRLRuleEngine(DefaultSWRLRuleAndQueryEngineFactory.java:43) 
    at org.swrlapi.factory.SWRLAPIFactory.createSWRLRuleEngine(SWRLAPIFactory.java:39) 
    at OWLAPITest.main(OWLAPITest.java:45) 
Caused by: java.lang.NoSuchMethodError: org.semanticweb.owlapi.model.OWLOntologyManager.getIRIMappers()Lorg/semanticweb/owlapi/util/PriorityCollection; 
    at org.swrlapi.factory.DefaultSWRLAPIOWLOntology.addSWRLAPIOntologies(DefaultSWRLAPIOWLOntology.java:1740) 
    at org.swrlapi.factory.DefaultSWRLAPIOWLOntology.<init>(DefaultSWRLAPIOWLOntology.java:161) 
    at org.swrlapi.factory.SWRLAPIInternalFactory.createSWRLAPIOntology(SWRLAPIInternalFactory.java:248) 
    at org.swrlapi.factory.DefaultSWRLRuleAndQueryEngineFactory.createSWRLRuleEngine(DefaultSWRLRuleAndQueryEngineFactory.java:55) 
    ... 3 more 

Gibt es eine Lösung? Danke dir.

Antwort

0

Sie haben zwei OWLAPI-Versionen auf dem Klassenpfad, einen von pellet und einen expliziten in Ihren Abhängigkeiten. Stellen Sie sicher, dass es zur Laufzeit nur eine Version gibt.

1

Also für alle, die das Problem haben, hier ist das Update:

 <dependency> 
     <groupId>com.github.ansell.pellet</groupId> 
     <artifactId>pellet-owlapiv3</artifactId> 
     <version>2.3.6-ansell</version> 
     <exclusions> 
      <exclusion> 
       <groupId>com.github.ansell.owlapi</groupId> 
       <artifactId>owlapi-api</artifactId> 
      </exclusion> 
      <exclusion> 
        <groupId>com.github.ansell.owlapi</groupId> 
        <artifactId>owlapi-impl</artifactId> 
      </exclusion> 
      <exclusion> 
        <groupId>com.github.ansell.owlapi</groupId> 
        <artifactId>owlapi-parsers</artifactId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

oder gibt es eine Gabel von Pellet die OWL API v4 verwenden hier: https://github.com/ignazio1977/pellet.

Es gibt eine Gabel von Pellet mit OWLAPI 5 hier: https://github.com/Galigator/openllet

Verwandte Themen