2

OntClass を取得しようとしている特定の Class URI があります。モデルはレギュラーモデルです。

正しいステートメントがモデルに含まれているかどうかを確認するコードをいくつか書きましたが、そうであるように見えるので、これを OntClass として表示できない理由がわかりません。(tblURI は、メソッド パラメーターとして渡される文字列です)

Resource tblR = m.createResource(tblURI);
List<Statement> prp = tblR.listProperties().toList();
for(Statement s : prp)
    System.out.println(s);
System.out.println(tblR.canAs(OntClass.class));
OntClass tbl = tblR.as(OntClass.class);

これは出力です:

[kps:datasource/EnsembleMS#translation_stable_id, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2002/07/owl#Class]
[kps:datasource/EnsembleMS#translation_stable_id, http://www.w3.org/1999/02/22-rdf-syntax-ns#type, http://www.w3.org/2000/01/rdf-schema#Class]
[kps:datasource/EnsembleMS#translation_stable_id, http://www.w3.org/2000/01/rdf-schema#isDefinedBy, kps:datasource/EnsembleMS]
[kps:datasource/EnsembleMS#translation_stable_id, http://www.w3.org/2000/01/rdf-schema#label, "translation_stable_id"]
false
com.hp.hpl.jena.ontology.ConversionException: Cannot convert node kps:datasource/EnsembleMS#translation_stable_id to OntClass: it does not have rdf:type owl:Class or equivalent
    at com.hp.hpl.jena.ontology.impl.OntClassImpl$1.wrap(OntClassImpl.java:81)
    at com.hp.hpl.jena.enhanced.EnhNode.convertTo(EnhNode.java:155)
    at com.hp.hpl.jena.enhanced.EnhNode.convertTo(EnhNode.java:34)
    at com.hp.hpl.jena.enhanced.Polymorphic.asInternal(Polymorphic.java:66)
    at com.hp.hpl.jena.enhanced.EnhNode.as(EnhNode.java:110)
    at com.KPS.myApp.exampleMethod(myApp.java:123)

例外がスローされるのはなぜですか? uri tblURI を使用してリソースの OntClass を取得するにはどうすればよいですか?

ご指摘ありがとうございます

4

1 に答える 1

3

あなたはどのようなモデルであるかを言いませんm。特に、mRDFS言語プロファイルを使用して作成された場合、はではなくOntModelのを探します。それが問題ではない場合は、完全な最小限の(つまり実行可能な)例が役立ちます。rdf:typerdfs:Classowl:Class

ちなみに、私が見ることができる別の問題があります。モデル内のリソースURIは、省略形ではなく絶対形式である必要があります。モデルにq-nameURIがあるという事実は、のようkps:datasource/EnsembleMS#translation_stable_idに、プレフィックス処理に問題があることを示しています。それ自体では報告した問題は発生しませんが、調査するのは危険信号です。

アップデート

質問への回答:

  • はい、OntModelを使用する必要があります。そうしないと、使用する言語OntClassプロファイルを知ることができません。OntModel最初の場所のようにモデルを作成します。

    OntModel m = modelFactory.createOntologyModel( OntModelSpec.OWL_MEM );
    

    または、プレーンモデルをOntModel:としてラップします。

    OntModel om = modelFactory.createOntologyModel( OntModelSpec.OWM_MEM, m );
    

    もちろん、多くの場合、モデルの仕様のいずれかを使用しますが、これOWL_MEMは1つのオプションにすぎません。

  • createResourceプレフィックスは拡張されません。したがって、リソースを作成する前に、自分でそれらを拡張する必要があります。

    m.createResource( m.expandPrefix( "foo:bar" ) );
    

    もちろん、これにはプレフィックス"foo"をプレフィックスとして登録する必要があります。これは、構文でプレフィックスを定義するRDFドキュメントを読み取ると自動的に発生しますが、それ以外の場合は、を使用して手動で実行できますsetNsPrefix

于 2012-07-23T11:15:46.303 に答える