SPARQL 查询获取所有 "leaf" 类 / 最低级别 类

SPARQL query to get all the "leaf" classes / lowest level classes

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

例如,当我通过使用查询 classes 的最低级别时 在哪里 {?level1 subClassOf ?level2 ?level2 subClassOf ?level3 ?level3 subClassOf ?level4 等等}

我最终得到了我想要的东西:一些树叶。但是,如果我随后将此结果连接到更高一级的叶子,我也会收到上面查询的叶子的 parent classes,这是我不想要的。我只想要 children classes,没有 parents,如果这有意义的话。

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

正在寻找正确方向的提示!谢谢!

RDF 三元组看起来像 rdfs:subClassOf .` - 所以在您的 SPARQL 查询中,您将使用三元组模式 ?sub rdfs:subClassOf ?sup 。 select ?sub 或 ?sup

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

此解决方案归功于 UninformedUser!