如何查询SPARQL中的所有直接子类?

时间:2014-05-16 15:33:24

标签: sparql

我将ABC作为与传递属性isSubClassOf相关的类。 所以A isSuclassOF BB isSubClassOf C。因此,通过推断我们得到A isSubClassOf C

我的问题:如何编写SPARQL查询,只返回每个类的直接子类号。例如

A    0 
B    1
C    1  

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)
         }
 }

如果要计算子类的数量,则需要使用COUNTGROUP BY运算符调整上述查询。

但是,许多SPARQL引擎提供了一些查询直接子类的快捷方式。例如,在Sesame中,以编程方式查询时,可以通过将Query对象的布尔属性设置为false来禁用查询持续时间的推理。它还提供了一个额外的推理器,可以在数据存储区之上进行配置,并允许您使用"虚拟"属性sesame:directSubClassOf(以及sesame:directTypesesame:directSubPropertyOf)。

其他SPARQL引擎具有类似的机制。