Pellet internalReasonerException in OWL API



有一天被困住了,有人愿意帮忙吗?我已经加载了一个导入SWEET(地球和环境本体的语义网)的本体。我对此进行了一些SPARQL查询,得到了这样的答案:"Object Property hasLowerBound与hasValue限制一起使用,其中值是文字:"0"^^整数"。(hasLowerBound,我已经在SWEET中检查过,是SWEET中的数据类型本体)

如何解决这个问题?

这是我写的代码和我得到的错误,非常感谢你的帮助~

public class load {
public static void main(String[] args) throws OWLOntologyCreationException {
    // Get hold of an ontology manager
    OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
    File file = new File("G:/Protege/owlfiles/Before_Gather.owl");
            // Load the local copy
    OWLOntology loadMODIS = manager.loadOntologyFromOntologyDocument(file);
    PelletReasoner reasoner = 
    PelletReasonerFactory.getInstance().createNonBufferingReasoner( loadMODIS         
    );
    KnowledgeBase kb = reasoner.getKB();
    PelletInfGraph graph = new 
    org.mindswap.pellet.jena.PelletReasoner().bind( kb );
    InfModel model = ModelFactory.createInfModel( graph );
    String PREFIX = "PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-
    ns#>" +
            "PREFIX owl: <http://www.w3.org/2002/07/owl#>" +
            "PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>" +
            "PREFIX seaice: <http://www.semanticweb.org/SeaIceOntology#>" +
            "PREFIX repr: <http://sweet.jpl.nasa.gov/2.3/reprDataFormat.owl#>" +
            "PREFIX realmCryo: <http://sweet.jpl.nasa.gov/2.3/realmCryo.owl#>" +
            "PREFIX relaMath: <http://sweet.jpl.nasa.gov/2.3/relaMath.owl#>";
    String SELECT = "select ?dataset ";
    String WHERE = "where {" +
            "?dataset relaMath:hasLowerBound " + ""0"^^xsd:integer" +
            "}" ;
    QueryExecution qe = SparqlDLExecutionFactory.create(QueryFactory.create(PREFIX + SELECT + WHERE), model);
    ResultSet rs = qe.execSelect();
    ResultSetFormatter.out(System.out,rs);
    rs = null;  qe.close();
    reasoner.dispose();
    //OWLReasonerSPARQLEngine sparqlEngine=new OWLReasonerSPARQLEngine(new MinimalPrintingMonitor());
    //sparqlEngine.execQuery(str.toString(),dataset);
    System.out.println("Loaded ontology: " + loadMODIS);
}
}

线程"main"中的异常 org.mindswap.pellet.exceptions.InternalReasonerException: Object Property hasLowerBound 与 hasValue 限制一起使用,其中值是文字:"0"^^整数 at org.mindswap.pellet.tableau.completion.rule.SomeValuesRule.applySomeValuesRule(SomeValuesRule.java:204) at org.mindswap.pellet.tableau.completion.rule.SomeValuesRule.apply(SomeValuesRule.java:64) at org.mindswap.pellet.tableau.completion.rule.AbstractTableauRule.apply(AbstractTableauRule.java:64) at org.mindswap.pellet.tableau.completion.SROIQStrategy.complete(SROIQStrategy.java:157) at org.mindswap.pellet.ABox.isConsistent(ABox.java:1423) at org.mindswap.pellet.ABox.isConsistent(ABox.java:1260) at org.mindswap.pellet.KnowledgeBase.consistency(KnowledgeBase.java:1987) at org.mindswap.pellet.KnowledgeBase.isConsistent(KnowledgeBase.java:2061) at org.mindswap.pellet.jena.PelletInfGraph.prepare(PelletInfGraph.java:258) at org.mindswap.pellet.jena.PelletInfGraph.prepare(PelletInfGraph.java:241) at com.clarkparsia.pellet.sparqldl.jena.SparqlDLExecutionFactory.create(SparqlDLExecutionFactory.java:113) at com.clarkparsia.pellet.sparqldl.jena.SparqlDLExecutionFactory.create(SparqlDLExecutionFactory.java:261) at com.clarkparsia.pellet.sparqldl.jena.SparqlDLExecutionFactory.create(SparqlDLExecutionFactory.java:226) at loadMODIS.load.main(load.java:78)

hasLowerBound被解析为数据属性和注释属性。

Pellet 正在检查数据属性大小写,并假设如果属性不是数据属性,则它必须是对象属性。OWL2本体总是如此,但此本体不会被解析为与OWL2兼容的本体 - 不允许对注释属性和数据属性进行双关。

我还不确定问题是在本体还是 OWLAPI 解析中。

编辑:这是一个解析问题。 hasLowerBoundrelaMath.owl中声明为数据属性。然而relaMath.owl导入reprMath.owl,它使用hasLowerBound但不声明它。 reprMath.owl进口relaMath.owl,所以那里有一个周期性的进口。

问题是,在解析过程中:- 解析 relaMath.owl,找到导入,解析 reprMath.owl 导入;尚未解析任何声明。- reprMath.owl 被解析,导入被找到。relaMath.owl 已经被解析了,所以调用什么都不做。在解析 reprMath.owl 时,包含在 relaMath.owl 中声明的所有实体。问题:实体尚未解析,因此此集合为空。 hasLowerBound在reprMath中找到,但尚不存在声明。因此,OWLAPI 默认为 AnnotationProperty。- relaMath.owl 解析继续,找到声明。

最终结果:任何本体导入relaMath.owl都有非法的双关语hasLowerBound。欧拉皮虫。

解决方法:将数据属性声明添加到reprMath.owl

<owl:DatatypeProperty rdf:about="#hasLowerBound"/>

这可能需要在多个本体中完成。

相关内容

  • 没有找到相关文章

最新更新