Я хотел бы найти прямой способ получения тройки (то есть субъекта, основного предиката и объекта), который неявно присутствует в узле оператора в Викиданных.
Например, в службе запросов Wikidata можно запросить
SELECT ?subject ?statement ?object
WHERE
{
wd:Q2629845 p:P54 ?statement.
?statement ps:P54 wd:Q631.}
}
, то есть получить мне значение для ?statement
, представляющее узел оператора Massimo Marazzina (wd:Q2629845
) играет за «Интер Милан» (wd:Q631
).В этом примере привязка, получаемая для ?statement
, равна wds:q2629845-C6C57DFC-1340-4373-8B24-FB718AA8A949
.
Субъект, основной предикат и объект, неявный в этом операторе (т. Е. Тройной <<code>wd:Q2629845 wdt:P54 wd:Q631>), можно восстановить изсам узел выписки.Восстановление параметров, закодированных в узле оператора , кажется очень подходящей вещью, для которой существует сервис wikibase, поэтому я предполагаю, что есть некоторый предикат, который можно использовать для прямого запроса дляэти параметры.
Можно восстановить тройку <<code>wd:Q2629845 wdt:P54 wd:Q631>, которая закодирована в узле оператора, выполнив запрос
SELECT ?subject ?directPredicate ?object
WHERE
{
?subject ?predicate wds:q2629845-C6C57DFC-1340-4373-8B24-FB718AA8A949.
?predicate (^wikibase:claim)/wikibase:directClaim ?directPredicate.
?predicate (^wikibase:claim)/wikibase:statementProperty ?statementProperty.
wds:q2629845-C6C57DFC-1340-4373-8B24-FB718AA8A949 ?statementProperty ?object.
}
Это, однако, довольно окольным путем и включает в себя запросы с открытымпеременная в позиции предиката (которую я хотел бы избежать).
В идеале, решением должно быть что-то вроде предиката викибазы (назовите его "wikibase:mainPredicate
"), которое, учитывая узел оператора STATEMENT
, позволит запросить
SELECT ?mainPredicate
WHERE
{
STATEMENT wikibase:mainPredicate ?mainPredicate.
}
, где ?mainPredicate
возвращает нам основной предикат, используемый в самом узле оператора.
Спасибо!