我正在使用维基数据查询服务(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
我有一个维基数据项目编号列表(Q ###),用于电影和电视节目,我想获得有关的属性。我需要查询这些特定的电影或电视节目。例如,如果我知道维基数据中的星球大战第四集:新希望是Q17738,我该如何查询它的特定属性?
答案 0 :(得分:4)
在SPARQL中有(至少)两种指定多个项目的方法。
FILTER (?item IN (...list...))
:SPARQL definition
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
VALUES ?item { ...list... }
:SPARQL definition
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
区别在于IN
只是一个函数:这个列表中的参数是什么?
VALUES
是一种将数据传递给查询的方法。虽然我们使用简单的表格,但您可以提供完整的表格数据:
VALUES (?x ?y) {
(:uri1 1)
(:uri2 UNDEF)
}
语法对一个变量有特殊情况,因此我不必编写VALUES ?item { (wd:Q17738) (wd:Q181795) }
。
答案 1 :(得分:1)
是的,您可以使用QID获取属性,请参阅answer to my similar question,使用URI过滤。
您的商品示例Q17738:
SELECT DISTINCT ?item ?itemLabel ?itemDescription (SAMPLE(?article) AS ?articleSample)
WHERE
{ ?article schema:about ?item ;
schema:inLanguage "en" ;
schema:isPartOf <https://en.wikipedia.org/>
FILTER ( ?item = <http://www.wikidata.org/entity/Q17738> )
SERVICE wikibase:label
{ bd:serviceParam
wikibase:language "en"
}
}
GROUP BY ?item ?itemLabel ?itemDescription
请参阅此query in WikiData。
答案 2 :(得分:1)
您可以从SPARQL端点获取有关给定实体的属性,但您最好不要查询wbgetentities
Wikidata API模块。
Ex:https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q17738&languages=en|de|fr&format=json