Wikidata:SPARQL如何按项搜索?

时间:2017-09-19 03:49:31

标签: sparql wikidata wikidata-api

我正在使用维基数据查询服务(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,我该如何查询它的特定属性?

3 个答案:

答案 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

另见answer on Open Data site

答案 2 :(得分:1)

您可以从SPARQL端点获取有关给定实体的属性,但您最好不要查询wbgetentities Wikidata API模块。

Ex:https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q17738&languages=en|de|fr&format=json

另请参阅:Getting readable results from Wikidata