我对wikidata真的很陌生。我只是认为 wikidata 使用了很多具体化。
假设我们想获得奥巴马可用的所有信息。如果我们要从 DBpedia 执行此操作,我们只需使用一个简单的查询:
select * where {<http://dbpedia.org/resource/Barack_Obama> ?p ?o .}
这将返回以 Obama 为主题的所有属性和值。本质上,结果与此页面相同:http://dbpedia.org/page/Barack_Obama
查询结果采用我需要的格式。
我想知道如何对 Wikidata 做同样的事情。这是奥巴马的维基数据页面:https://www.wikidata.org/wiki/Q76
。假设我想要此页面上的所有语句。但是这个页面上几乎所有的陈述都被具体化为他们有排名和限定词等。例如,对于“受教育程度”部分,它不仅有学校,还有“开始时间”和“结束时间”由于奥巴马不再在这些学校中,所有学校都被列为正常。
我可以通过获得真实的陈述(使用https://query.wikidata.org)获得所有学校:
SELECT ?school ?schoolLabel WHERE {
wd:Q76 wdt:P69 ?school .
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
}
}
上面的查询将简单地返回所有学校。
如果我想获得学校的开始时间和结束时间,我需要这样做:
SELECT ?school ?schoolLabel ?start ?end WHERE {
wd:Q76 p:P69 ?school_statement .
?school_statement ps:P69 ?school .
?school_statement pq:P580 ?start .
?school_statement pq:P582 ?end .
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
}
}
但问题是,不看实际页面,我怎么知道 ?school_statement 有 pq:P580 和 pq:P582,即“开始时间”和“结束时间”?这一切都归结为一个问题,即我如何从中获取所有信息(包括具体化)https://www.wikidata.org/wiki/Q76
?
最终,我希望有这样一张桌子:
||predicate||object||objectLabel||qualifier1||qualifier1Value||qualifier2||qualifier2Value||...