Protege から TURTLE 表記で OWL ファイルを作成しました。これは 2 つのインポートを使用します。
owl:imports <http://localhost/imported1.owl> ,
<http://localhost/imported2.owl> .
これを Jena にロードしました。ファイルにクエリを実行すると、インポートからは何の回答も得られず、ファイル自体からのみ回答が得られます。たとえば、クラス「Person」があり、モデルにクエリを実行して (SPARQL または推論器の両方を使用)、このクラスの個体を検索すると、ファイル内の個体のみが取得されますが、インポートされたファイル「imported1.owl」からは取得されません。および「imported2.owl」。
インポートされたファイルがデフォルトでロードされることを読みました ( imports processing ) 他に何かしなければならないことはありますか?
たとえば、インポートを使用する代わりに 3 つのファイルを 1 つに混在させると、期待どおりの結果が得られます。
====編集====
両方のファイル (imported1.owl と import2.owl) は、Web サーバー経由でアクセスできます (URL を入力すると、ファイルが正しく取得されます)。
これはコードです:
Model model = ModelFactory.createDefaultModel();
OntModel ontology = ModelFactory.createOntologyModel();
InputStream in = FileManager.get().open(file);
if (in == null) {
return;
} else {
ontology.read(in, null, "TURTLE");
}
Reasoner owlReasoner = ReasonerRegistry.getOWLReasoner();
Reasoner reasoner = owlReasoner.bindSchema(ontology);
InfModel infModel = ModelFactory.createInfModel(reasoner, ontology);
String queryString = " PREFIX eg: <http://eg.owl#>"
+ " SELECT ?p WHERE { ?p <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> eg:Person }";
Query query = QueryFactory.create(queryString);
QueryExecution qe = QueryExecutionFactory.create(query, ontology);
ResultSet results = qe.execSelect();
ResultSetFormatter.out(System.out, results, query);
このコードが「owl:imports」を使用してフクロウ ファイルに対して実行される場合、ファイル自体で定義されている Person インスタンスのみが取得されますが、インポートされたファイル内で定義されているインスタンスは無視されます。
====編集2====
[無関係]
元の .owl ファイルのエラーが原因でインポートがロードされていないか、Jena がベース ドキュメントしか使用していないかのどちらかです。
====編集3====
モデルが正しくロードされているようです (hasLoadedImport() でもチェックしました):
オントロジー.countSubModels(): 2
そのため、インポートが正しく読み込まれていないことを破棄しました。どういうわけか、Jena はベース ドキュメントのみを使用しており、インポートされたドキュメントは使用していないようです...