我有以下在OWL中建模的场景:
Producer ----producesResource---> Resource <------consumesResource ---- Consumer
Producer、Resource和Consumer是OWL类,而producesResource和consumesResource是对象属性。这个场景非常直观,每个生产者产生一个或多个由一个或多个消费者消耗的资源。相反,每个使用者可以消耗一个或多个资源。相应地,本体由实例/个人填充。
我想检查是否存在由消费者消费的资源,而该资源不是由生产者生产的。通过a获取此信息的优雅方法是什么:
发布于 2022-01-24 11:23:48
在SPARQL中使用非绑定筛选器是可能的,在SPARQL 1.1中更容易使用减号:
SELECT ?resource WHERE
{
?resource a :Resource.
?consumer a :Consumer;
?consumer :consumesResource ?resource.
MINUS {?producer a :Producer; :producesResource ?resource.}
}您也可以使用ASK获得布尔结果,但是SELECT允许更容易地进行调试,以验证查询是否正确。
由于SHACL允许集成SPARQL查询,这也回答了您的第二个问题,但在这种情况下,只使用SPARQL查询就更容易了。
https://stackoverflow.com/questions/70832915
复制相似问题