0

有一天被困住了,有人会好心帮忙吗?我已经加载了一个导入 SWEET(地球和环境本体的语义网)的本体。我对其进行了一些 SPARQL 查询,得到了这样的答案:“对象属性 hasLowerBound 与 hasValue 限制一起使用,其中值是文字:“0”^^integer”。(hasLowerBound,我在 SWEET 中查过,是 SWEET 中的一个 Datatype Ontology)

我怎么解决这个问题?

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

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:对象属性 hasLowerBound 与 hasValue 限制一起使用,其中值是文字:org.mindswap.pellet.tableau.completion.rule 处的“0”^^integer .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)在 org.mindswap.pellet.tableau.completion.SROIQStrategy.complete(SROIQStrategy.java:157) 在 org.mindswap.pellet.ABox.isConsistent(ABox.java:1423) 在 org.mindswap。 org.mindswap.pellet.KnowledgeBase.consistency(KnowledgeBase.java:1987) 上 org.mindswap.pellet 上的pellet.ABox.isConsistent(ABox.java:1260)。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) 在 com.clarkparsia.pellet.sparqldl.jena.SparqlDLExecutionFactory.create(SparqlDLExecutionFactory.java:261) 在 com.clarkparsia.pellet.sparqldl.jena .SparqlDLExecutionFactory.create(SparqlDLExecutionFactory.java:226) 在 loadMODIS.load.main(load.java:78)创建(SparqlDLExecutionFactory.java:113)在 com.clarkparsia.pellet.sparqldl.jena.SparqlDLExecutionFactory.create(SparqlDLExecutionFactory.java:261) 在 com.clarkparsia.pellet.sparqldl.jena.SparqlDLExecutionFactory.create(SparqlDLExecutionFactory.java:226)在 loadMODIS.load.main(load.java:78)创建(SparqlDLExecutionFactory.java:113)在 com.clarkparsia.pellet.sparqldl.jena.SparqlDLExecutionFactory.create(SparqlDLExecutionFactory.java:261) 在 com.clarkparsia.pellet.sparqldl.jena.SparqlDLExecutionFactory.create(SparqlDLExecutionFactory.java:226)在 loadMODIS.load.main(load.java:78)

4

1 回答 1

0

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

Pellet 正在检查数据属性案例,并假设如果属性不是数据属性,则它必须是对象属性。这对于 OWL 2 本体来说总是如此,但该本体并未被解析为与 OWL 2 兼容的本体——不允许对注释属性和数据属性进行双关。

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

编辑:这是一个解析问题。hasLowerBound被声明relaMath.owl为数据属性。但是relaMath.owlimports reprMath.owl,它使用hasLowerBound但不声明它。reprMath.owl进口relaMath.owl,所以那里有一个循环进口。

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

最终结果:任何导入的本体relaMath.owl都存在非法双关hasLowerBound。OWLAPI 错误。

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

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

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

于 2016-01-23T11:33:43.637 回答