【发布时间】: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.
}
}
但问题是是否有一种方法可以将所有内容组合到一个查询中?
【问题讨论】: