【问题标题】:Wikidata Query Service: how do I search by item?维基数据查询服务:如何按项目搜索?
【发布时间】:2017-09-19 03:49:31
【问题描述】:

我正在使用 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,我如何查询它的具体属性?

【问题讨论】:

    标签: sparql wikidata-query-service


    【解决方案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) }

    【讨论】:

      【解决方案2】:

      是的,您可以使用 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

      【讨论】:

        【解决方案3】:

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

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

        另见:Getting readable results from Wikidata

        【讨论】:

          猜你喜欢
          • 2018-01-01
          • 1970-01-01
          • 2019-07-10
          • 1970-01-01
          • 1970-01-01
          • 2013-06-13
          • 1970-01-01
          • 1970-01-01
          • 2013-03-23
          相关资源
          最近更新 更多