拉取具有英文网站的维基数据公司

问题描述 投票:0回答:1

我正在尝试查询拥有 Linkedin 标识符、ISINS、LEI 或英文网站的企业。如果可能的话,我只想要每个公司一行数据。

我正在努力解决最后一部分,我想我成功地确定了我只想填充英文网站,但实际的 URL 并未填充在结果中。

SELECT DISTINCT ?item ?itemLabel ?linkedin ?isin ?lei ?website WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
  {
    SELECT DISTINCT ?item ?linkedin ?isin ?lei ?website WHERE {
      ?item wdt:P31 wd:Q4830453.
      {
      ?item wdt:P4264 ?linkedin.}
      UNION
      {
      ?item wdt:P946 ?isin.}
      UNION
      {
      ?item wdt:P1278 ?lei.}
      UNION
      {
      ?item wdt:P856 ?statement0.
      ?statement0 p:P856 [ps:P856 ?website ; pq:P407 wd:Q1860] }

    }
    LIMIT 100
  }
}

其他数据正在填充,但网站尚未填充。我还获得了每个公司的多条记录。

sparql wikidata
1个回答
0
投票

首先要注意的是

?item wdt:P856 ?statement0.
?statement0 p:P856 [ps:P856 ?website ; pq:P407 wd:Q1860]

不是您想要的,只需使用

?item p:P856 [ps:P856 ?website ; pq:P407 wd:Q1860] .

实现此目的的正确方法是首先选择所有至少具有一个此类语句的

?item
(使用
UNION
),然后使用
OPTIONAL
获取所有且仅在
 中实际指定的语句?item

生成的查询类似于:

SELECT DISTINCT ?item ?itemLabel ?linkedin ?isin ?lei ?website WHERE {
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
  OPTIONAL { ?item wdt:P4264 ?linkedin . }
  OPTIONAL { ?item wdt:P946 ?isin . }
  OPTIONAL { ?item wdt:P1278 ?lei . }
  OPTIONAL { ?item p:P856 [ps:P856 ?website ; pq:P407 wd:Q1860] . }
  {
    SELECT DISTINCT ?item WHERE {
      ?item wdt:P31 wd:Q4830453 .
      { ?item wdt:P4264 ?linkedin . }
      UNION
      { ?item wdt:P946 ?isin . }
      UNION
      { ?item wdt:P1278 ?lei . }
      UNION
      { ?item p:P856 [ps:P856 ?website ; pq:P407 wd:Q1860] . }
      hint:SubQuery hint:runOnce true .
    }
    LIMIT 100
  }
  hint:Prior hint:runFirst true .
}
© www.soinside.com 2019 - 2024. All rights reserved.