SPARQL根据实例的数据属性和对象属性过滤实例



我有一个OWL模型,它具有范围为xsd:boolean数据属性hasToken,因此它可以具有值truefalse。假设hasToken的域是类X。另一个类Z对象属性的域,比如范围为classXp

Z----p---->X-hasToken->true/false

Z的每个实例可以具有p到类X的实例的多个断言。通过SPARQL,我想获得Z的所有实例,对于属性p中的所有对象,只有X的实例的hasToken等于true。因此,如果Z的一个实例沿着p甚至有一个X的实例,即沿着hasTokenfalse,那么它就是我不感兴趣的Z

示例:

x1-hasToken->true

x2-hasToken->false

x3---hasToken--->true

x4---hasToken--->false

x5-hasToken--->false


z1-p->x1

z1--p->x2

z1--p->x3


z2---p->x1

z2--p->x3


z3-p->x1

z3--p->x3

z3--p->x5

查询应该只返回z2,因为z1z3都至少有一个x,而hasToken为假

对于qowl:inverseOfp,以下操作有效。

SELECT ?z1
WHERE { 
?z1 a :Z.
?x :q ?z1.
?x :hasToken true.
MINUS {
?x1 :hasToken true.
?x2 :hasToken false.
?x1 :q ?z1.
?x2 :q ?z2.
filter ((?z1=?z2))
}
}

最新更新