Warm tip: This article is reproduced from serverfault.com, please click

owl-SPARQL 查询以获取所有“叶”类/最低级别的类

(owl - SPARQL query to get all the "leaf" classes / lowest level classes)

发布于 2021-01-26 16:24:03

我觉得我错过了一些很明显的东西。我想查询我的图表,以便获得所有“叶子”,因此任何没有子类的类基本上,我需要 rdfs:hasSubClass 的倒数(我试过 rdfs:superClassOf 但它不存在啊哈哈)。

例如,当我使用 WHERE {?level1 subClassOf ?level2 ?level2 subClassOf ?level3 ?level3 subClassOf ?level4 等查询最低级别的类时。

我最终得到了我想要的东西:一些叶子。但是,如果我随后将此结果加入到更高一级的叶子中,我也会收到上面查询的叶子的父类,这是我不想要的。我只想要儿童课程,没有父母,如果有道理的话。

目标是能够输出可以实例化的类列表。

寻找任何正确方向的提示!谢谢!

Questioner
Robin
Viewed
0
Robin 2021-01-28 16:07:25

RDF 三元组看起来像 rdfs:subClassOf .` - 所以在你的 SPARQL 查询中你会使用一个三元组模式 ?sub rdfs:subClassOf ?sup 。并选择 ?sub 或 ?sup

要获取所有叶节点,只需获取所有没有子类的类。缺少某些内容是通过 FILTER NOT EXISTS 子句完成的。比如 select distinct ?cls {?cls rdfs:subClassOf ?sup 。过滤器不存在{?sub rdfs:subClassOf ?cls 过滤器(?sub != ?cls && ?sub != owl:Nothing ) }}

将此解决方案归功于 UninformedUser!