Wikidata:SPARQL如何按项目搜索?

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,那么如何查询其特定属性?

use*_*512 5

在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) }