あなたのオントロジーの名前空間が何であるかは言わないので、http://example.com/ontologies/test#
. その場合、基本的な選択肢は 2 つあります。SPARQL を使用するか、Jena RDF API を直接使用するかです。
最初のケースでは、クエリは非常に単純です。
prefix ex: <http://example.com/ontologies/test#>
select distinct ?relationship where { ex:Company1 ?relationship ex:LatheMchine1 }
Jena のドキュメントで、 Java コードから SPARQL クエリを実行する方法を確認できます。
2 番目のケースでも、非常に簡単です。
Model m = ... your RDF model ... ;
String NS = "http://example.com/ontologies/test#";
Resource company1 = m.getResource( NS + "Company1" );
Resource lathe1 = m.getResource( NS + "LatheMachine1" );
Set<Property> relationships = new HashSet<Property>();
for (StmtIterator i = m.listStatements( company1, null, lathe1 ); i.hasNext();) {
Statement s = i.next();
relationships.add( s.getPredicate() );
}
ポスターがコメントで質問をより完全に説明した後の更新:
OK、必要なのは指定されたノード間のパスです。すべてのパスではなく、パスのみが必要な場合は、次を使用できます。OntTools.findShortestPath()
Path p = OntTools.findShortestPath( m, company1, lathe1, Filter.any() );
すべてのパスが必要な場合は、コードをfindShortestPath
単純な幅優先検索のテンプレートとして使用できます。