设置一系列项目中的查询的SPARQL

时间:2019-02-22 20:41:47

标签: sparql wikidata

我目前在艺术家[Q1234,Q2345,Q3456,...]上有大约100个Wikidata项,我必须使用这些项来提取不同的属性(出生地/出生日期/死亡,标签等)。 我尝试遍历列表并为每个列表创建查询,但是由于许多人返回错误429(请求过多),因此我目前遇到了一些障碍。

Failed to load resource: the server responded with a status of 429 ()
index.html:1 Access to XMLHttpRequest at 'https://query.wikidata.org/sparql?query='...' from origin 'http://127.0.0.1:51881' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

有没有一种方法可以直接在查询中插入一组项目?

var subquery =      'SELECT DISTINCT ?nameLabel ?cityBLabel ?countryBLabel ?cityDLabel ?countryDLabel ?dateBLabel ?dateDLabel \n' +
                    'WHERE\n' +
                    '{\n' +
                    '       :' + item + ' rdfs:label ?name; \n' +
                    '                wdt:P19 ?cityB; \n' +
                    '                wdt:P20 ?cityD; \n' +
                    '                wdt:P569 ?dateB; \n' +
                    '                wdt:P570 ?dateD. \n' +
                    '       ?cityB wdt:P17 ?countryB .\n' +
                    '       ?cityD wdt:P17 ?countryD .\n' +
                    '       SERVICE wikibase:label { bd:serviceParam wikibase:language "en". } \n' +
                    '       FILTER(LANGMATCHES(LANG(?name), "EN")) \n' +
                    '}\n';

例如,在上面的查询中,没有为每个item创建和运行一个查询,而是有一个SPARQL命令,我可以在其中包含整个集合([Q1234,Q2345,Q3456,...])并一次迭代遍历所有对象?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以为此使用FILTER INVALUES子句。

(通过评论创建社区Wiki答案)