1

我正在使用 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

我有一个我想要获取属性的电影和电视节目的 Wikidata 项目编号 (Q###) 列表。我需要查询这些特定的电影或电视节目。例如,如果我知道 Wikidata 中的《星球大战 IV:新希望》是 Q17738,我如何查询它的具体属性?

4

3 回答 3

7

在 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

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

不同之处在于IN它只是一个函数:这个列表中有参数吗?

VALUES是一种将数据传递给查询的方法。尽管我们使用了简单的表格,但您可以提供完整的表格数据:

VALUES (?x ?y) {
   (:uri1 1)
   (:uri2 UNDEF)
}

语法对一个变量有特殊情况,所以我不必写VALUES ?item { (wd:Q17738) (wd:Q181795) }.

于 2017-09-19T10:36:16.863 回答
1

是的,您可以使用 QID 获取属性,请参阅我的类似问题的答案,使用按 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

在 WikiData 中查看此查询。

另请参阅开放数据网站上的答案

于 2017-09-19T04:52:48.217 回答
1

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

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

另请参阅:从 Wikidata 获取可读结果

于 2017-09-19T12:20:28.067 回答