【问题标题】:wikidata get all properties with labels and values of an itemwikidata 获取所有带有标签和项目值的属性
【发布时间】:2017-09-23 20:03:16
【问题描述】:

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

以 wikidata 上的 Google 条目为例。对于属性 P414(证券交易所)或 P159,有诸如 P969(位于街道地址)之类的子属性。一旦您将query wbgetentities 作为限定符,它们实际上就会出现。 wbgetentities 的问题是缺少标签。我通过以下 SPARQL 查询获得了所需的输出(例如 wdt:P17 => country => United States of America):

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. 
  }
}

但问题是是否有一种方法可以将所有内容组合到一个查询中?

【问题讨论】:

    标签: database sparql wikidata


    【解决方案1】:

    关于 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!

    只有限定符及其值包含在结果中。既不包括出处参考也不包括价值注释(例如时间精度)。如果您需要添加它们,请写评论。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-31
      • 1970-01-01
      相关资源
      最近更新 更多