SPARQL查询调试求助:筛选名字以R开头且年龄超20的条目
SPARQL查询调试提示
- 逻辑关系错误:你需要的是“名字以R开头且年龄大于20”的条目,但当前用
UNION(逻辑或)会返回满足任意一个条件的结果,应该把两个筛选条件合并到同一个FILTER块,或者放在同一组模式中。 - 变量未绑定:
?Age变量没有对应的三元组匹配,WHERE子句里缺少?Person foaf:age ?Age这样的语句,导致筛选时?Age是未定义状态,查询无法正常判断。 - 变量拼写错误:筛选名字的FILTER里写的是
?givename,但三元组里的变量是?firstName,SELECT里又出现了?givenname,变量名不统一,应该保持一致(比如都用?firstName)。 - 数据类型错误:年龄比较时用了字符串
'20',如果你的数据里?Age是数值类型,应该直接写20(不带引号),否则字符串比较会按字典序处理,结果不符合预期。 - 冗余变量:SELECT里同时出现
?givenname和?firstName,但三元组里只绑定了?firstName,?givenname未定义,应该去掉冗余的变量。
修正后的示例查询:
PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT DISTINCT ?firstName ?Age WHERE { ?Person foaf:givenname ?firstName ; foaf:age ?Age . FILTER (?Age > 20 && regex(?firstName, "^R")) }
内容的提问来源于stack exchange,提问作者kkab
相关产品推荐
相关产品推荐

