SPARQL:布尔查询的逆结果
如果RDF数据库中存在一组三元组,我试图让SPARQL返回“false”。我可以用ASK查询返回'true'SPARQL:布尔查询的逆结果,sparql,rdf,allegrograph,Sparql,Rdf,Allegrograph,如果RDF数据库中存在一组三元组,我试图让SPARQL返回“false”。我可以用ASK查询返回'true' ASK WHERE { ?subjID rdf:type pref:Person. } 如上所述,我尝试在WHERE中添加NOT EXISTS{},但这会导致错误 ASK WHERE { NOT EXISTS { ?subjID rdf:type pref:Person. } } 我链接的文档没有描述这一点,但您必须将过滤器放在不存在的前面 ASK WHERE { FILTER NO
ASK WHERE { ?subjID rdf:type pref:Person. }
如上所述,我尝试在WHERE中添加NOT EXISTS{},但这会导致错误
ASK WHERE { NOT EXISTS { ?subjID rdf:type pref:Person. } }
我链接的文档没有描述这一点,但您必须将过滤器放在不存在的前面
ASK WHERE { FILTER NOT EXISTS { ?subjID rdf:type pref:Person. } }
你提到的文件是一份旧草案。要调查的“正确”来源始终是官方文件,也就是说,在您的情况下,我认为您的解决方案不起作用。我的意思是,它在什么上应用过滤器?在计算
exists
过滤器期间,没有解决方案映射。您可以检查ASK{FILTER存在的位置{?subkid rdf:type pref:aclassthattowentexist.}
作为一个反例,对于不在数据集中的任意类,它总是返回true
。首先,应该是一个通用的?s?p?o
三重模式,然后:询问哪里不存在{subcid?p?o过滤器{subcid rdf:type pref:Person.}
@AKSW在过滤器前面不需要人工语句模式-一个简单的单例{/code>就足够了(在这种情况下,解析sparql的工具不会通过default@ASKW答案中的查询是完全正确的。WHERE
子句是一个有效的BGP(一组空绑定的单一解决方案),带有一个应该在其上计算的过滤器。我建议显式使用空BGP{}
作为一种可能的解决方法。来自答案的查询在Wikidata服务上正常工作,因此很可能是dbpedia sparql服务的错误。询问{FILTER不存在的地方{?subpid rdf:type pref:Person.}
是一个合理的查询。不存在
匹配可能包含变量的给定模式。过滤器
测试空模式(一行,无变量)的结果,如果它通过过滤器,询问
为真。对于不匹配的?subpid rdf:type pref:Person
和“否”,过滤器为“是”如果有任何匹配的三元组。