我将A
,B
和C
作为与传递属性isSubClassOf
相关的类。
所以A isSuclassOF B
和B isSubClassOf C
。因此,通过推断我们得到A isSubClassOf C
。
我的问题:如何编写SPARQL查询,只返回每个类的直接子类号。例如
A 0
B 1
C 1
答案 0 :(得分:1)
在标准的SPARQL语言中,您可以通过查询那些不存在其他子类的子类来执行此操作"在"之间,如下所示:
SELECT ?directSub ?super
WHERE { ?directSub rdfs:subClassOf ?super .
FILTER NOT EXISTS { ?otherSub rdfs:subClassOf ?super.
?directSub rdfs:subClassOf ?otherSub .
FILTER (?otherSub != ?directSub)
}
}
如果要计算子类的数量,则需要使用COUNT
和GROUP BY
运算符调整上述查询。
但是,许多SPARQL引擎提供了一些查询直接子类的快捷方式。例如,在Sesame中,以编程方式查询时,可以通过将Query
对象的布尔属性设置为false
来禁用查询持续时间的推理。它还提供了一个额外的推理器,可以在数据存储区之上进行配置,并允许您使用"虚拟"属性sesame:directSubClassOf
(以及sesame:directType
和sesame:directSubPropertyOf
)。
其他SPARQL引擎具有类似的机制。