Справочник по идентификаторам викиданных sparql

Я использую идентификатор пользователя KMDb для получения информации из базы данных викиданных. Результатом являются три строки с тремя кодами IMDB. Если я посмотрю викиданные актрисы (https://www.wikidata.org/wiki/Q7496795) Я вижу, что только один из них имеет ссылку.

Как я могу выбрать только этот элемент? Можно ли показать ссылку как результат запроса sparql?

Большое спасибо

PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX wd:       <http://www.wikidata.org/entity/> 
PREFIX wdt:      <http://www.wikidata.org/prop/direct/>
PREFIX rdfs:     <http://www.w3.org/2000/01/rdf-schema#>
PREFIX p:        <http://www.wikidata.org/prop/>
PREFIX v:        <http://www.wikidata.org/prop/statement/>
PREFIX pr: <http://www.wikidata.org/prop/reference/>

SELECT ?wikidata ?imdb ?Q ?prop ?value
       WHERE {
   ?wikidata wdt:P345  ?imdb .
   ?wikidata wdt:P31   wd:Q5 .
    ?wikidata wdt:P1649 "00003964" . # KMDb person ID
}
LIMIT 10

person Gionatha    schedule 27.05.2016    source источник


Ответы (1)


Ссылки в Викиданных используют свойство prov:wasDerivedFrom для представления информации о происхождении заявления. В вашем случае одним из способов избавиться от ссылок без значения (узел значения также является оператором) было бы просто добавить для этого тройной шаблон:

SELECT ?wikidata ?imdb ?Q ?prop ?value
WHERE
{
  ?wikidata p:P345 ?statement. 
            ?statement ps:P345 ?imdb; 
                       prov:wasDerivedFrom ?ref .
  ?wikidata wdt:P31 wd:Q5.
  ?wikidata wdt:P1649 "00003964". # KMDb person ID
}
LIMIT 10

Но вам вообще не нужно добавлять переменную для оператора. Как предложено @WikidataFacts, было бы более эффективно, если бы объект p:P345 был непосредственно описанием пустого узла:

SELECT ?wikidata ?imdb ?Q ?prop ?value
WHERE
{
  ?wikidata p:P345 [ ps:P345 ?imdb; prov:wasDerivedFrom ?ref ].
  ?wikidata wdt:P31 wd:Q5.
  ?wikidata wdt:P1649 "00003964". # KMDb person ID
}
LIMIT 10

Есть и другие варианты, такие как использование явного пустого узла или фильтрация только тех узлов, которые имеют хотя бы одно значение.

person Ivo Velitchkov    schedule 28.05.2016
comment
Хотя этот ответ технически правильный, я бы с осторожностью относился к любой ссылке в форме, импортированной из xyz Wikipedia. На самом деле это не имеет большей ценности, чем полное отсутствие ссылок. Из трех возвращенных идентификаторов один явно неправильный, а два других дублируют друг друга на IMDb. Я не уверен, что есть хороший способ отличить эти два случая от одних только данных. - person Tom Morris; 31.05.2016