Sae*_*rae 1 sparql wikidata wikidata-api
我正在使用Wikidata查询服务(https://query.wikidata.org)获得有关电影和电视节目的详细信息。
我知道我可以查询属于电影实例的所有项目的类型(在下面查询),但是我只想查找特定的电影。
SELECT ?item ?itemLabel ?genreLabel
WHERE
{
?item wdt:P31 wd:Q11424 .
OPTIONAL {
?item wdt:P136 ?genre
}
SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" }
} LIMIT 10
Run Code Online (Sandbox Code Playgroud)
我有电影的Wikidata项目编号(Q ###)的列表,电视节目我想获取其属性。我需要查询这些特定的电影或电视节目。例如,如果我知道Wikidata中的《星球大战第四集:新希望》是Q17738,那么如何查询其特定属性?
在SPARQL中至少有两种方法可以指定多个项目。
FILTER (?item IN (...list...)):SPARQL定义
SELECT ?item ?itemLabel ?genreLabel
WHERE
{
?item wdt:P31 wd:Q11424 .
FILTER (?item IN (wd:Q17738, wd:Q181795))
OPTIONAL {
?item wdt:P136 ?genre
}
SERVICE wikibase:label { bd:serviceParam wikibase:language
"[AUTO_LANGUAGE],en" }
} LIMIT 10
Run Code Online (Sandbox Code Playgroud)
VALUES ?item { ...list... }:SPARQL定义
SELECT ?item ?itemLabel ?genreLabel
WHERE
{
?item wdt:P31 wd:Q11424 .
VALUES ?item { wd:Q17738 wd:Q181795 }
OPTIONAL {
?item wdt:P136 ?genre
}
SERVICE wikibase:label { bd:serviceParam wikibase:language
"[AUTO_LANGUAGE],en" }
} LIMIT 10
Run Code Online (Sandbox Code Playgroud)
区别在于,IN它只是一个函数:参数是否在此列表中?
VALUES是一种将数据传递给查询的方法。尽管我们使用了简单的表格,但是您可以提供完整的表格数据:
VALUES (?x ?y) {
(:uri1 1)
(:uri2 UNDEF)
}
Run Code Online (Sandbox Code Playgroud)
该语法在一个变量中有一种特殊情况,因此我不必编写VALUES ?item { (wd:Q17738) (wd:Q181795) }。