如何按限定符显示或过滤?

How to show or filter by qualifier?

参见示例。 P297 at Q37024, 有限定符(P582).

Show/debug

这个查询是错误的,如何显示结束时间像Q37024的情况?

SELECT ?item ?iso2_code ?endtime 
WHERE {
  ?item wdt:P297 ?iso2_code
  OPTIONAL { ?iso2_code pq:P582 ?endtime }
}

过滤器

我需要所有没有结束时间的项目。


真实案例注释

我正在查询

SELECT DISTINCT ?iso2_code  ?wd_id
WHERE {
  ?item wdt:P297 ?iso2_code
  BIND(strafter(STR(?item),"http://www.wikidata.org/entity/") as ?wd_id).
} ORDER BY ?iso2_code

但检索重复项,

所以我需要排除一个,但正确的是:到结束时间。


PS: 有一本关于 WIKIDATA Qualifiers 的手册,但没有检索数据集的真实案例。

SELECT DISTINCT (?simple_value AS ?iso2_code) ?wd_id
WHERE {
  ?item p:P297 ?statement .
  ?statement ps:P297 ?simple_value .
  # ?statement a wikibase:BestRank
  OPTIONAL { ?statement pq:P582 ?qualifier . }
  FILTER ( !bound(?qualifier) )
  BIND ( strafter(str(?item), str(wd:)) AS ?wd_id ).
} ORDER BY ?iso2_code 

Try it!

您可以使用 FILTER NOT EXISTS { ?statement pq:P582 ?qualifier . } 而不是
OPTIONAL { ?statement pq:P582 ?qualifier . } FILTER ( !bound(?qualifier) ).

维基数据数据模型已记录 here. There are many query examples on this page, e. g. this one