2017-09-19 35 views
0

我正在使用维基数据查询服务(https://query.wikidata.org)获取有关电影和电视节目的详细信息。Wikidata:SPARQL如何按项目搜索?

我知道我可以查询作为电影实例的所有项目的流派(下面的查询),但我只想寻找特定的电影。

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 ###)的列表和电视节目,我想获得的属性。我需要查询这些特定的电影或电视节目。例如,如果我知道维基数据中的“星球大战4:新希望”是Q17738,我该如何查询它的具体属性?

回答

0

是的,您可以使用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。请参阅answer on Open Data site

1

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