代码之家  ›  专栏  ›  技术社区  ›  MrKaikev

wikidata获取带有项目标签和值的所有属性

  •  10
  • MrKaikev  · 技术社区  · 7 年前

    我的问题是如何从wikidata(最好是通过SPARQL)中提取网页上呈现的所有属性及其各自的标签。

    Google query wbgetentities 作为限定符。问题在于 就是标签不见了。我得到了期望的输出(例如。 wdt:P17 => country => United States of America )使用以下SPARQL查询:

    SELECT ?prop_id ?prop_label ?prop_val_label WHERE {
      VALUES (?company) {
        (wd:Q95)
      }
      ?company ?prop_id ?company_item.
      ?wd wikibase:directClaim ?prop_id.
      ?wd rdfs:label ?prop_label.
      OPTIONAL {
        ?company_item rdfs:label ?prop_val.
        FILTER((LANG(?prop_val)) = "en")
      }
      BIND(COALESCE(?prop_val, ?companyItem) AS ?prop_val_label)
      FILTER((LANG(?prop_label)) = "en")
    }
    

    但这些“子属性”缺失,因为它们不在直接索赔范围内。要提取单个语句限定符,我可以执行以下操作:

    SELECT ?company ?hq ?country WHERE {
      wd:Q95 p:P159 ?company.
      OPTIONAL {
        ?company ps:P159 ?hq.
        ?company pq:P17 ?country. 
      }
    }
    

    1 回复  |  直到 4 年前
        1
  •  16
  •   Stanislav Kralin kenwenzel    7 年前

    Wikidata数据模型上的有用链接:

    您的查询应该是这样的:

    SELECT ?wdLabel ?ps_Label ?wdpqLabel ?pq_Label {
      VALUES (?company) {(wd:Q95)}
    
      ?company ?p ?statement .
      ?statement ?ps ?ps_ .
    
      ?wd wikibase:claim ?p.
      ?wd wikibase:statementProperty ?ps.
    
      OPTIONAL {
      ?statement ?pq ?pq_ .
      ?wdpq wikibase:qualifier ?pq .
      }
    
      SERVICE wikibase:label { bd:serviceParam wikibase:language "en" }
    } ORDER BY ?wd ?statement ?ps_
    

    Try it!