0

オントロジーを DB リポジトリに追加しようとしています ……</p>

私のコードは次のとおりです。

oConnection = H2Db.getM_oConnection();
m_oSDBConnection = new SDBConnection(oConnection);
StoreDesc oStoreDesc = new StoreDesc(LayoutType.LayoutTripleNodesHash, DatabaseType.H2);
m_oStore = SDBFactory.connectStore(m_oSDBConnection, oStoreDesc);
m_oModel = SDBFactory.connectDefaultModel(m_oStore);
InputStream oInputStream = this.getClass().getResourceAsStream("/META-INF/betaas_context.owl");
m_oModel.read(oInputStream, null);

最初に、次の依存関係があります。

ID   State         Blueprint      Level  Name
[ 994] [Active     ] [            ] [   80] H2 Database Engine (1.3.170)
[1114] [Active     ] [            ] [   80] wrap_mvn_org.apache.jena_jena-iri_1.0.0 (0)
[1223] [Active     ] [            ] [   80] wrap_mvn_org.apache.jena_jena-arq_2.11.0 (0) -> contains package org.apache.jena.riot.adapters
[1279] [Active     ] [            ] [   80] wrap_mvn_org.apache.jena_jena-core_2.11.0 (0)
[1311] [Active     ] [            ] [   80] wrap_mvn_xerces_xercesImpl_2.7.1 (0)
[1314] [Active     ] [            ] [   80] wrap_mvn_com.ibm.icu_icu4j_3.4.4 (0)

そして、私はこの例外を受け取ります:

java.lang.Exception: com.hp.hpl.jena.shared.ConfigException: Reader not found on classpath
Caused by: com.hp.hpl.jena.shared.ConfigException: Reader not found on classpath
Caused by: java.lang.ClassNotFoundException:
org.apache.jena.riot.adapters.JenaReadersWriters$RDFReaderRIOT_RDFXML

そして、問題は次の行にありました: oModel.read(oInputStream, null);

編集

次に、AndyS の提案に従って (以下を参照)、Jena ライブラリを更新し、2.11.1-SNAPSHOT を使用しました。

[1511] [Active     ] [            ] [   80] wrap_mvn_org.apache.jena_jena-core_2.11.1-SNAPSHOT (0)
[1512] [Active     ] [            ] [   80] wrap_mvn_org.apache.jena_jena-arq_2.11.1-SNAPSHOT (0)
[1515] [Active     ] [            ] [   80] wrap_mvn_org.apache.jena_jena-sdb_1.4.1-SNAPSHOT (0)
[1516] [Resolved   ] [            ] [   80] wrap_mvn_xerces_xercesImpl_2.11.0 (0)
[1521] [Active     ] [            ] [   80] wrap_mvn_org.apache.jena_jena-iri_1.0.1-SNAPSHOT (0)

ただし、例外は同じです: ClassNotFoundException: org.apache.jena.riot.adapters.JenaReadersWriters$RDFReaderRIOT_RDFXML

4

4 に答える 4

1

ルート エラーは、次のクラスの ClassNotFoundException です: org.apache.jena.riot.adapters.JenaReadersWriters$RDFReaderRIOT_RDFXML。このライブラリは動的リフレクションを使用してクラスをロードしているようです。たとえば を使用してClass.forName()いますが、これは非常に悪いことです。

org.apache.jena.riot.adaptersとにかく、パッケージを Import-Package リストに追加することで修正できるはずです。

于 2013-10-16T21:30:57.113 に答える
1

.owl ファイルの処理に関する修正済みのバグがあります。これは、表示されている一部の例外の問題である可能性があります。現在の開発スナップショットでは、これが修正されています。

無関係: jena の xerces のバージョンが間違っています。icu4j はもう必要ありません。

于 2013-10-16T21:28:19.233 に答える
0

投稿ありがとうございます!!

私は同じ問題を抱えていて、jena-core.jar のインポートで org.apache.jena.riot.adapters パッケージを追加するだけで修正しました。

たとえば、jena-core-2.11.1.jar の BND 構成ファイル:

version=2.11.1
Bundle-Version: ${version}
Bundle-Name: Jena CORE
Export-Package: !etc, !jena, !jena-log4j.properties, !jena.cmdline, !ont-policy.rdf, *; version=${version}
Import-Package: org.apache.jena.riot.adapters, *
于 2014-07-01T16:54:59.883 に答える