尽管项目具有这些数据,但维基数据查询服务结果中缺少数据字段

Missing data fields in Wikidata Query Service results despite items having these data

我正在尝试使用 SPARQL 从维基数据中检索一些城市,但返回的几个项目的大部分字段都是空的,尽管这些项目具有这些数据。我不明白下面的查询有什么问题 (link to WQS). For example, the municipality Almelo has its coordinates (P625), and parent place (P131) 在结果中错误地丢失了:

SELECT ?mun ?munLabel ?coords ?parentPlace ?area WHERE {
  ?mun p:P31 ?instanceOf # Get statement because we need this later
       .
  ?instanceOf ps:P31/wdt:279* wd:Q2039348.
  
  OPTIONAL {
    ?mun wdt:P625 ?coords;
      wdt:P131 ?parentPlace; 
      wdt:P2046 ?area
      .
  }
  
  MINUS { ?instanceOf pq:P582 ?endTime. } # Don't show municipalities that have an end time
  
  service wikibase:label { bd:serviceParam wikibase:language "en". }
} ORDER BY ?munLabel

您必须独立声明 OPTIONAL 每个语句:

  OPTIONAL { ?mun wdt:P625 ?coords . }
  OPTIONAL { ?mun wdt:P131 ?parentPlace . }
  OPTIONAL { ?mun wdt:P2046 ?area . }

否则,如果其中一个缺失,则整个 OPTIONAL 块将被忽略。

另见 Multiple Optional Graph Patterns

这是因为您使用了一个 OPTIONAL 语句,而不是分别使用 3 个。 在这种情况下,Almelo 没有 'area'、wdt:P2046,因此整个 OPTIONAL 语句的计算结果为假,因此它没有绑定任何变量。

以下查询有效: 请注意,我们有 3 个不同的可选语句,因此它们可能无法彼此独立地绑定变量。

SELECT ?mun ?munLabel ?coords ?parentPlace ?area WHERE {
  ?mun p:P31 ?instanceOf # Get statement because we need this later
       .
  ?instanceOf ps:P31/wdt:279* wd:Q2039348.
  
  OPTIONAL {?mun wdt:P625 ?coords }
  OPTIONAL {?mun wdt:P131 ?parentPlace }
  OPTIONAL {?mun wdt:P2046 ?area }

  
  MINUS { ?instanceOf pq:P582 ?endTime. } # Don't show municipalities that have an end time
  
  service wikibase:label { bd:serviceParam wikibase:language "en". }
} ORDER BY ?munLabel