维基数据查询具有一个维基百科页面的项目

Wikidata query for items with one Wikipedia page not in English

我想查找 Wikidata 项目,每个项目都指向一个不是 en 的 Wikipedia 页面。维基百科页面。

我想到了这个查询:

SELECT ?item WHERE {
  ?article schema:about ?item .
  FILTER (SUBSTR(str(?article), 9, 2) != "en") .
  {
  SELECT ?item (COUNT(DISTINCT ?lang) AS ?count) WHERE {
    ?item wdt:P1367 ?yp_id .     # BBC 'Your paintings' artist identifier
    ?article schema:about ?item .
    FILTER (SUBSTR(str(?article), 11, 15) = ".wikipedia.org/") .
    ?article schema:inLanguage ?lang .
  } GROUP BY ?item
  HAVING (?count=1)
  ORDER BY DESC (?count)
  }
}

执行。但是,我总是超时。

是否有更好的查询来实现我正在寻找的内容?

这里有一些提示:

  1. 因为您只拿 ?count=1,所以没有理由在 ?count 前订购。
  2. 由于每篇文章只能有一篇?lang,可以按?article算,不用考虑冗余变量。
  3. 无需处理(子)字符串,只需使用 schema:isPartOf 属性 选择您要排除的特定域。
  4. 使用FILTER NOT EXISTS代替FILTER (... != ...)

第四个优化是最重要的,本身就足够了。

SELECT ?item WHERE {
  FILTER NOT EXISTS { 
    ?article schema:about ?item ;
             schema:isPartOf <https://en.wikipedia.org/> .
  }
  {
  SELECT ?item (COUNT(DISTINCT ?article) AS ?count) WHERE {
    ?item wdt:P1367 ?yp_id .     # BBC 'Your paintings' artist identifier
    ?article schema:about ?item .
    FILTER (SUBSTR(str(?article), 11, 15) = ".wikipedia.org/") .
  }
  GROUP BY ?item
  HAVING (?count=1)
  }
}