如何解决如何为 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 库,该库为网站应用程序提供数据):
如果有人能在这里引导我朝着正确的方向前进,我将不胜感激。
我还应该注意,如果 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 项目列表的操作:
- 宠物扫描 - https://petscan.wmflabs.org/
- TABernacle - https://tabernacle.toolforge.org/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。