如何强制Jena API的findShortestPath方法在<owl#onProperty>而不是<owl#someValuesFrom>上执行BFS?

我正在尝试使用Jena的上述方法在本体中找到最短路径或两个节点之间的路径。

给定本体的任何两个节点,我的最终目标是使用此路径创建一个SParqL查询来查询两个节点上的数据,并且需要一个路径,因为SParqL需要如下路径(如果两个节点不是直接连接)

SELECT ?var1 ?var3 
WHERE {
?var1 <someProperty> ?var2.
?var2 <someProperty> ?var3.
}

目前,我正在使用Jena获取连接的大多数节点的路径,但是它们之间的关系是

[[http://myontology/Node1,http://www.w3.org/2000/01/rdf-schema#subClassOf,cbc3c5-d026-49-94d9-e3ba],[cf3c5-d026-49-94d9-e3ba,http://www.w3.org/2002/07/owl#someValuesFrom,http://myontology/Node2]]

and so on till Node3.

我希望路径为

[[http://myontology/Node1,http://myontology/myPropertyABC,http://myontology/Node2,]
[http://myontology/Node2,http://myontology/myPropertyXYZ,http://myontology/Node3]]

我当前将查询构建为

SELECT ?var1 ?var3 
WHERE {
?var1 ?x ?var2.
?var2 ?y ?var3.
}

这为我提供了答案,但它是一个未经优化的查询,因此我更愿意生成基于属性的查询。我尝试通过优先处理整个BFS跟踪来演练最短路径方法,并发现它确实在owl#onProperty上进行搜索。因此,在为方法提供onPath参数时,如何构造对象以强制仅查看onProperty? (PS-欢迎使用其他任何方式实现目标)

方法签名是

public static Path findShortestPath( Model m,Resource start,RDFNode end,Predicate<Statement> onPath )

例如,当末端节点以相反的方式与路径相关时,Jena在很多情况下根本找不到路径

Node1 -> Node2 -> Node3 -> Node4 <- Node5.

将到达Node4,但无法到达Node5。这限制了处理整个图形的能力,并且只解决了前向关系。

也欢迎任何其他实现此功能的RDF API(基于python或java)。 (看着rdf4j和protege,但似乎jena仅具有此遍历功能)

非常感谢您的帮助! 如果需要其他详细信息,请告诉我。

niksosf 回答:如何强制Jena API的findShortestPath方法在<owl#onProperty>而不是<owl#someValuesFrom>上执行BFS?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3121870.html

大家都在问