如何以编程方式从维基数据实体获取所有可用信息?
how to programmatically get all available information from a Wikidata entity?
我真的是维基数据的新手。我只是觉得维基数据使用了很多具体化。
假设我们想要获取奥巴马的所有可用信息。如果我们要从 DBpedia 中获取,我们将只使用一个简单的查询:
select * where {<http://dbpedia.org/resource/Barack_Obama> ?p ?o .}
这将 return 以奥巴马为主题的所有属性和值。结果基本上与此页面相同:http://dbpedia.org/page/Barack_Obama
而查询结果是我需要的格式。
我想知道如何用维基数据做同样的事情。这是奥巴马的维基数据页面:https://www.wikidata.org/wiki/Q76
。假设我想要此页面上的所有语句。但是这个页面上几乎所有的陈述都被具体化为它们有排名和限定词等。例如,对于"educated at"部分,它不仅有学校,还有"start time"和"end time" 并且所有学校都排名正常,因为奥巴马已经不在这些学校了。
我可以通过获取真实的陈述(使用 https://query.wikidata.org)来获取所有学校:
SELECT ?school ?schoolLabel WHERE {
wd:Q76 wdt:P69 ?school .
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
}
}
以上查询将简化return所有学校。
如果我想获取学校的开始时间和结束时间,我需要这样做:
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,即 "start time" 和"end time"?这一切都归结为一个问题,即如何从 https://www.wikidata.org/wiki/Q76
?
获取所有信息(包括具体化)
最终,我希望 table 像这样:
||predicate||object||objectLabel||qualifier1||qualifier1Value||qualifier2||qualifier2Value||...
你应该选择 Wikidata data API (more specifically the wbgetentities 模块)而不是 SPARQL 端点:
你的情况:
https://www.wikidata.org/w/api.php?action=wbgetentities&format=json&ids=Q76
您应该找到您要查找的所有限定词数据:示例 entities.Q76.claims.P69.1
{ mainsnak:
{ snaktype: 'value',
property: 'P69',
datavalue:
{ value: { 'entity-type': 'item', 'numeric-id': 3273124, id: 'Q3273124' },
type: 'wikibase-entityid' },
datatype: 'wikibase-item' },
type: 'statement',
qualifiers:
{ P580:
[ { snaktype: 'value',
property: 'P580',
hash: 'a1db249baf916bb22da7fa5666d426954435256c',
datavalue:
{ value:
{ time: '+1971-01-01T00:00:00Z',
timezone: 0,
before: 0,
after: 0,
precision: 9,
calendarmodel: 'http://www.wikidata.org/entity/Q1985727' },
type: 'time' },
datatype: 'time' } ],
P582:
[ { snaktype: 'value',
property: 'P582',
hash: 'a065bff95f5cb3026ebad306b3df7587c8daa2e9',
datavalue:
{ value:
{ time: '+1979-01-01T00:00:00Z',
timezone: 0,
before: 0,
after: 0,
precision: 9,
calendarmodel: 'http://www.wikidata.org/entity/Q1985727' },
type: 'time' },
datatype: 'time' } ] },
'qualifiers-order': [ 'P580', 'P582' ],
id: 'q764382F6-E090-409E-B7B9-CB913F1C2166',
rank: 'normal' }
那么您可能会对
感兴趣
我真的是维基数据的新手。我只是觉得维基数据使用了很多具体化。
假设我们想要获取奥巴马的所有可用信息。如果我们要从 DBpedia 中获取,我们将只使用一个简单的查询:
select * where {<http://dbpedia.org/resource/Barack_Obama> ?p ?o .}
这将 return 以奥巴马为主题的所有属性和值。结果基本上与此页面相同:http://dbpedia.org/page/Barack_Obama
而查询结果是我需要的格式。
我想知道如何用维基数据做同样的事情。这是奥巴马的维基数据页面:https://www.wikidata.org/wiki/Q76
。假设我想要此页面上的所有语句。但是这个页面上几乎所有的陈述都被具体化为它们有排名和限定词等。例如,对于"educated at"部分,它不仅有学校,还有"start time"和"end time" 并且所有学校都排名正常,因为奥巴马已经不在这些学校了。
我可以通过获取真实的陈述(使用 https://query.wikidata.org)来获取所有学校:
SELECT ?school ?schoolLabel WHERE {
wd:Q76 wdt:P69 ?school .
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en" .
}
}
以上查询将简化return所有学校。
如果我想获取学校的开始时间和结束时间,我需要这样做:
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,即 "start time" 和"end time"?这一切都归结为一个问题,即如何从 https://www.wikidata.org/wiki/Q76
?
最终,我希望 table 像这样:
||predicate||object||objectLabel||qualifier1||qualifier1Value||qualifier2||qualifier2Value||...
你应该选择 Wikidata data API (more specifically the wbgetentities 模块)而不是 SPARQL 端点:
你的情况: https://www.wikidata.org/w/api.php?action=wbgetentities&format=json&ids=Q76
您应该找到您要查找的所有限定词数据:示例 entities.Q76.claims.P69.1
{ mainsnak:
{ snaktype: 'value',
property: 'P69',
datavalue:
{ value: { 'entity-type': 'item', 'numeric-id': 3273124, id: 'Q3273124' },
type: 'wikibase-entityid' },
datatype: 'wikibase-item' },
type: 'statement',
qualifiers:
{ P580:
[ { snaktype: 'value',
property: 'P580',
hash: 'a1db249baf916bb22da7fa5666d426954435256c',
datavalue:
{ value:
{ time: '+1971-01-01T00:00:00Z',
timezone: 0,
before: 0,
after: 0,
precision: 9,
calendarmodel: 'http://www.wikidata.org/entity/Q1985727' },
type: 'time' },
datatype: 'time' } ],
P582:
[ { snaktype: 'value',
property: 'P582',
hash: 'a065bff95f5cb3026ebad306b3df7587c8daa2e9',
datavalue:
{ value:
{ time: '+1979-01-01T00:00:00Z',
timezone: 0,
before: 0,
after: 0,
precision: 9,
calendarmodel: 'http://www.wikidata.org/entity/Q1985727' },
type: 'time' },
datatype: 'time' } ] },
'qualifiers-order': [ 'P580', 'P582' ],
id: 'q764382F6-E090-409E-B7B9-CB913F1C2166',
rank: 'normal' }
那么您可能会对