你没有说你的本体的命名空间是什么,所以我推测它是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
作为模板进行简单的广度优先搜索。