2017-09-19 34 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) }