0

ある日立ち往生しています。誰か親切に助けてくれますか? SWEET(Semantic Web for Earth and Environmental Ontology)をインポートしたオントロジーをロードしました。私はいくつかの SPARQL クエリを実行しましたが、次のような回答が得られました。(SWEETで確認したhasLowerBoundは、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 での例外: オブジェクト プロパティ hasLowerBound は、値がリテラルである hasValue 制限と共に使用されます: "0"^^integer 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) 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.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)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) で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) で

4

1 に答える 1

0

hasLowerBoundデータ プロパティおよび注釈プロパティとして解析されます。

ペレットはデータ プロパティのケースをチェックしており、プロパティがデータ プロパティでない場合は、オブジェクト プロパティである必要があると想定しています。これは OWL 2 オントロジーの場合は常に当てはまりますが、このオントロジーは OWL 2 互換のオントロジーとして解析されていません。注釈プロパティとデータ プロパティのパニングは許可されていません。

問題がオントロジーにあるのか、それとも OWLAPI 解析にあるのかはまだわかりません。

編集:これは解析の問題です。はdata プロパティとしてhasLowerBound宣言されています。relaMath.owlただし、relaMath.owlそれreprMath.owlを使用しますhasLowerBoundが宣言はしません。reprMath.owlimportsrelaMath.owlであるため、循環インポートがあります。

問題は、解析中に次のことです。 - relaMath.owl が解析され、インポートが見つかり、reprMath.owl インポートが解決されます。宣言はまだ解析されていません。- reprMath.owl が解析され、インポートが見つかりました。relaMath.owl は既に解析されているため、call は何もしません。reprMath.owl の解析中に、relaMath.owl で宣言されたすべてのエンティティが含まれます。問題: エンティティがまだ解析されていないため、このセットは空です。hasLowerBoundは reprMath で見つかりましたが、まだ宣言がありません。したがって、OWLAPI のデフォルトは AnnotationProperty です。- relaMath.owl の解析が続行され、宣言が見つかりました。

最終結果: オントロジーのインポートrelaMath.owlには、 の不正なしゃれがありhasLowerBoundます。OWLAPI のバグ。

回避策: データ プロパティ宣言を に追加しますreprMath.owl

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

これは、複数のオントロジーで行う必要がある場合があります。

于 2016-01-23T11:33:43.637 に答える