我想从维基数据实体(例如海伦·凯勒)收集三元组(主题、预测、对象)。目前,我有一个疑问如下:
SELECT ?wd ?wdLabel ?ps_Label ?ps_Description WHERE {
VALUES (?item) {(wd:Q38203)}
?item ?p ?statement .
?statement ?ps ?ps_ .
?wd wikibase:claim ?p.
?wd wikibase:statementProperty ?ps.
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en".
}
}
我对此有两个问题:
看来很多无意义的三元组也会被列出来,比如属性(“CONOR.BG ID”,“爱尔兰国家图书馆ID”)。但我想要的只是关键的三元组。我可以直接过滤它们吗?或者有一个分数可以排名吗?
上面检索三元组的查询似乎实体充当主体,而不是客体。换句话说,可以检索格式 (Helen Keller, ?, ?),而不是 (?, ?, Helen Keller)。但我打算收集所有三元组,即使它是一个对象实体。
FILTER NOT EXISTS {
?wd wdt:P31/wdt:P279* wd:Q6545185 .
}
这不包括作为唯一标识符(Q6545185)(Q6545185)
(的子类)实例的所有属性?item
和 ?ps_
。如果您想通过单个查询来实现此目的,您可以替换 ?item ?p ?statement .
?statement ?ps ?ps_ .
与
{ ?item ?p ?statement .
?statement ?ps ?ps_ . }
UNION
{ ?subj ?p ?statement .
?statement ?ps ?item . }
并选择
?subj
以标记引用“反转”关系的元组。
结果查询如下:
SELECT ?subj ?subjLabel ?subjDescription ?wd ?wdLabel ?ps_Label ?ps_Description WHERE {
VALUES (?item) {(wd:Q38203)}
{ ?item ?p ?statement .
?statement ?ps ?ps_ . }
UNION
{ ?subj ?p ?statement .
?statement ?ps ?item . }
?wd wikibase:claim ?p.
?wd wikibase:statementProperty ?ps.
SERVICE wikibase:label {
bd:serviceParam wikibase:language "en".
}
FILTER NOT EXISTS {
?wd wdt:P31/wdt:P279* wd:Q6545185 .
}
}
ORDER BY ?subj ?wd