如何解决查找应该是实例 sparql 的类;查找正好有 1 个子类的类
这听起来很简单,但我还没有找到一个好的解决方案。我希望在我的本体中找到只有一个子类的类。
到目前为止,我的处理方式如下:
SELECT (COUNT(?anything) AS ?count) ?class
WHERE {
GRAPH <> {
?class rdf:type owl:Class.
?class rdfs:subClassOf ?anything.
?anything rdf:type owl:Class.
} group by ?class
理论上我应该能够按计数排序,并且值为 1 的结果应该只有 1 个子类。但是,当我执行此查询时,计数与我期望的完全不符,例如我的测试用例应该返回 1,它确实返回 1,但是另一个根本没有子类的类也返回 1。一个有 3 个子类的类返回 4。
在下图中,应该会发现突出显示的类的计数为 1。
解决方法
您正在寻找的 SPARQL 查询类似于
SELECT ?class WHERE {
?sub rdfs:subClassOf ?class
}
GROUP BY ?class
HAVING (COUNT(DISTINCT ?sub) = 1)
不过,正如 a comment 中提到的 UninformedUser,如果有可用的 OWL 推理,可能会有很多您可能意想不到的答案,例如
owl:Nothing rdfs:subClassOf ex:YourClass
和
ex:YourClass rdfs:subClassOf ex:YourClass
如果这些阻止查询产生您正在寻找的结果,您应该添加一个过滤器
SELECT ?class WHERE {
?sub rdfs:subClassOf ?class
FILTER ( ?sub != ?class && ?sub != owl:Nothing )
}
GROUP BY ?class
HAVING (COUNT(DISTINCT ?sub) = 1)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。