SPARQL查询斯坦福披萨本体:无法筛选无CheeseTopping的披萨
解决不含特定配料的披萨SPARQL查询问题
你的查询之所以返回含芝士配料的披萨,核心逻辑漏洞是:它只检查披萨存在至少一种非芝士配料,但并没有排除披萨同时包含芝士配料的情况。只要某个披萨类有一个非芝士配料的约束,哪怕它同时有芝士配料的约束,也会被查询命中。
修正后的查询
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> PREFIX owl: <http://www.w3.org/2002/07/owl#> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> PREFIX pizza: <http://www.co-ode.org/ontologies/pizza/pizza.owl#> SELECT ?pizza WHERE { ?pizza rdfs:subClassOf+ pizza:Pizza . # 排除所有带有芝士配料约束的披萨类 FILTER NOT EXISTS { ?pizza rdfs:subClassOf [ a owl:Restriction ; owl:onProperty pizza:hasTopping; owl:someValuesFrom ?cheeseTopping ] . ?cheeseTopping rdfs:subClassOf* pizza:CheeseTopping . } }
逻辑说明
- 第一步:筛选所有属于
pizza:Pizza子类的披萨类 - 第二步:通过
NOT EXISTS子查询,排除所有存在hasTopping指向CheeseTopping或其子类的约束的披萨,确保返回的披萨类完全没有芝士配料的定义
内容的提问来源于stack exchange,提问作者N_m
相关产品推荐
相关产品推荐

