【问题标题】:How to construct SPARQL query for a list of Wikidata items如何为 Wikidata 项目列表构建 SPARQL 查询
【发布时间】:2021-05-03 19:40:47
【问题描述】:

首先,我不是开发人员,而且我是编写 SPARQL 查询的新手。大多数情况下,我一直在查找现有查询并尝试调整它们以获得我需要的东西。问题是大多数关于查询构造的文档都与获取您没有的新数据有关,而不是检索或扩展现有数据。而且,当您确实找到检索现有数据的提示时,它们往往一次只针对一个项目,而不是针对多个项目的完整数据集。

为此,我主要使用 OpenRefine。我首先加载我现有的名称列表,然后使用 Wikidata 扩展服务将名称与现有的 Wikidata ID 进行协调。所以现在,这就是我所在的地方,而不是我想去的地方:

1 - 我们有一个 list of Wikidata IDs 用于协调匹配;

2 - 我们使用 OpenRefine 从这些数据中获取我们需要的大部分数据;

3 - 我们没有非常有价值的标签、描述或维基百科链接(英文);

4 - 我已经想出了如何为一个维基数据项的标签和描述构建查询:

SELECT ?itemLabel ?itemDescription WHERE {   VALUES ?item {
    wd:Q15485689   }   SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
      }

5 - 我已经知道如何构造一个查询来提取一个维基数据项的维基百科英文 URL:

SELECT ?article ?lang ?name WHERE {
  ?article schema:about wd:Q15485689;
    schema:inLanguage ?lang;
    schema:name ?name;
    schema:isPartOf _:b13.
  _:b13 wikibase:wikiGroup "wikipedia".
  FILTER(?lang IN("en"))
  FILTER(!(CONTAINS(?name, ":")))
  OPTIONAL { ?article wdt:P31 ?instance_of. }
}

问题是:

  • 如何修改任一查询来为 MORE THAN ONE* Wikidata 项生成相同的结果?
  • 我如何修改查询以一次提供所有三个,用于多个* Wikidata 项?

*我们有 667 个,但如果服务无法处理,我可以做小批量

理想情况下,查询会生成一些内容,让我可以下载一个看起来很像这样的 CSV 文件(这样我就可以匹配并将新数据导入我们的 Airtable 基础,该基础为网站应用程序提供数据):

ideal CSV output

如果有人能在这里引导我朝着正确的方向前进,我将不胜感激。

我还应该注意,如果 OpenRefine 有办法检索这些,我会全力以赴!但是由于这三个没有属性代码,我看不出如何从 OR 中获取它们。

【问题讨论】:

  • 嗨@stephanie!我正在做类似的事情,感谢您提出这个问题! (这是 PFA 的迈克尔)下面的答案也对我有用。 :)

标签: sparql wikidata openrefine


【解决方案1】:

这种事。看看你可以在价值声明中逃脱多少 QId。可能所有这些都一口气。此查询为您提供 URL 和文章标题;显然,如果你不想要它,你可以剪掉文章标题栏。另请注意https://www.wikidata.org/wiki/Wikidata:Request_a_query,这是 wikidata 自己处理此类问题的位置。

SELECT ?item ?itemLabel ?itemDescription ?sitelink ?article
WHERE 
{
  VALUES ?item {wd:Q105848230 wd:Q6697407 wd:Q2344502 wd:Q1698206}
  OPTIONAL {
    ?article schema:about ?item ;
    schema:isPartOf <https://en.wikipedia.org/> ; 
    schema:name ?sitelink .
  }
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}

【讨论】:

  • 非常感谢您...这非常有效。我也为查询请求链接添加了书签。
【解决方案2】:

是的,SPARQL 中的 VALUES 语句不仅可以中继数百个甚至数千个项目。在交叉检查以查看 Wikidata 如何与现有数据集匹配时,我经常这样做。你也可以做一些其他的事情来获取维基数据项目的列表:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多