我有一个本体论,我构成了如下关系
Company1
:hasSubsidary sub1
:hasDepartment Cars1
:hasSubdepartment Manufacturing
:isinBuilding area1
:hasUnit PrecisionMaching
:hasMachine LatheMachine1
我有一个本体模型,描述了这些个人创建和关系。
如果使用Jena或任何其他API输入参数为Company1
,Lathemachine1
,我可以语法列出所有关系路径吗?
答案 0 :(得分: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 }
您可以看到如何从Java代码in the Jena documentation运行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
中的代码作为模板进行简单的广度优先搜索。