如何查询SPARQL中的所有直接子类? [英] How to query for all direct subclasses in SPARQL?

查看:16
本文介绍了如何查询SPARQL中的所有直接子类?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有ABC作为通过传递性质isSubClassOf相关的类。 所以A isSuclassOF BB isSubClassOf C。因此,根据推断,我们有A isSubClassOf C

我的问题是:如何编写一个SPARQL查询来只为每个类返回其直接唯一的子类编号。例如

A    0 
B    1
C    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引擎也有类似的机制。

这篇关于如何查询SPARQL中的所有直接子类?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆