如何为 Wikidata 项目列表构建 SPARQL 查询

问题描述

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

为此我主要使用 OpenRefine。我首先加载我现有的名称列表,并使用维基数据扩展服务将名称与现有的维基数据 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. }
}

问题是:

  • 如何修改任一查询,以便为多个*维基数据项目生成这些相同的结果?
  • 如何修改查询以同时提供三个以上的查询,针对多个*维基数据项目?

*我们有 667 个,但如果这对于服务来说太多了,我可以做小批量

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

ideal CSV output

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

我还应该注意,如果 OpenRefine 有检索这些的方法,我会全神贯注!但是由于这三个没有属性代码,我不知道如何从 OR 中获取它们。

解决方法

这种东西。在 values 语句中查看您可以使用多少 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". }
}
,

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...