0

次のような関係で構成されたオントロジーがあります

Company1 
  :hasSubsidary sub1 
  :hasDepartment Cars1 
  :hasSubdepartment Manufacturing 
  :isinBuilding  area1 
  :hasUnit PrecisionMaching 
  :hasMachine LatheMachine1

私は、これらの個人が作成され、関係が記述されたオントロジー モデルを持っています。

Jena またはその他の API を使用して、入力パラメーターがCompany1である場合、すべての関係パスを文法的に一覧表示するにはどうすればよいですか?Lathemachine1

4

1 に答える 1

0

あなたのオントロジーの名前空間が何であるかは言わないので、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単純な幅優先検索のテンプレートとして使用できます。

于 2013-04-18T15:34:45.697 に答える