SPARQL查询:如何基于导演属性过滤影片?
SPARQL查询修改:按导演国籍筛选影片
你之前的思路方向是对的,但SPARQL里不能用FILTER来写三元组关系,正确的做法是直接把导演的国籍条件作为图模式加入WHERE块里,具体修改如下:
修改步骤
- 移除原来限制影片原产国的语句:
wdt:P495 wd:Q408; - 在获取导演的语句后,添加导演国籍的三元组:
?director wdt:P27 wd:Q408;
修改后的完整查询
SELECT ?filmLabel ?genreLabel ?publicationLabel ?directorLabel WHERE { ?film wdt:P31 wd:Q11424; # 实例为电影 wdt:P136 ?genre; # 影片类型 wdt:P577 ?publication; # 上映日期 wdt:P57 ?director; # 影片导演 ?director wdt:P27 wd:Q408; # 导演公民身份为澳大利亚 SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". } }
说明
SPARQL的WHERE块是用来定义要匹配的资源关系(三元组模式),而FILTER是用来对变量的取值做条件过滤(比如数值范围、字符串匹配等)。你之前尝试的FILTER(?director wdt:P27 wd:Q408)是错误用法,因为这不是布尔表达式,正确的方式是直接把这个关系作为三元组加入WHERE,让查询引擎自动匹配符合条件的导演和对应的影片。
内容的提问来源于stack exchange,提问作者v_Apery
相关产品推荐
相关产品推荐

