选择OWL命名空间下所有已使用类的SPARQL查询是否正确
该SPARQL查询的有效性判定
这个查询无法正确选出http://www.w3.org/2002/07/owl中定义的所有已使用必填类,存在明显疏漏。
具体疏漏如下
- 没有限定目标类的所属命名空间:缺少过滤规则限制
?class属于OWL命名空间,可能会返回RDFS、RDF等其他命名空间下定义的类,不符合“OWL中定义”的前提要求。 - “已使用”的判断逻辑覆盖不全:仅把「存在
?instance a ?class的实例声明」作为类已被使用的判断依据,遗漏了类的其他常规使用场景:比如作为属性的rdfs:domain/rdfs:range取值、作为rdfs:subClassOf的父子类、作为OWL限制条件的约束对象等,大量实际有使用的类会被过滤。 - 没有添加“必填类”的过滤规则:当前查询不对类是否为必填类做校验,只要有实例的类就会被返回,同时大量OWL规范要求的核心必填类(比如
owl:Restriction、owl:FunctionalProperty、owl:AllDifferent等)都符合要求,但因为没有直接的实例声明,不会被当前查询检出。 - 从给出的运行结果也能验证问题:返回的6个结果仅覆盖了部分属性类和本体类,大量OWL核心必填类都没有出现在结果中。
调整建议
如果要实现需求,可以在WHERE子句中补充OWL命名空间的过滤规则,扩展类使用场景的判断逻辑,再添加OWL必填类的对应过滤条件即可。
内容的提问来源于stack exchange,提问作者John Davis
相关产品推荐
相关产品推荐

