0

我有一个由以下关系组成的本体

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

我有一个本体模型,其中创建了这些个体并描述了关系。

Howe 可以使用 Jena 或任何其他 API 以语法方式列出给定输入参数的所有关系路径Company1吗?Lathemachine1

4

1 回答 1

0

你没有说你的本体的命名空间是什么,所以我推测它是http://example.com/ontologies/test#. 鉴于此,您有两个基本选择:使用 SPARQL,或直接使用 Jena RDF API。

在第一种情况下,您的查询非常简单:

prefix ex: <http://example.com/ontologies/test#>
select distinct ?relationship where { ex:Company1 ?relationship ex:LatheMchine1 }

您可以在 Jena 文档中了解如何从 Java 代码运行 SPARQL 查询。

在第二种情况下,它也非常简单:

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() );
}

发布者在评论中更全面地解释了这个问题后更新:

好的,所以您需要的是给定节点之间的路径。如果您只想要一条路径,而不是所有路径,您可以使用OntTools.findShortestPath()

Path p = OntTools.findShortestPath( m, company1, lathe1, Filter.any() );

如果您确实想要所有路径,您可以使用代码findShortestPath作为模板进行简单的广度优先搜索。

于 2013-04-18T15:34:45.697 回答