2014-11-29 2 views
6

Я хотел бы знать, есть ли способ найти объект Wikidata указанным свойством, используя их API. Например, существует множество объектов, которые имеют свойство Freebase ID (свойство: P646). Это уникальный идентификатор, и я хочу получить объект по этому идентификатору.Как найти объект Wikidata по свойству?

Кто-нибудь знает, как достичь этого?

ответ

8

[обновленный ответ: с помощью конечной точки SPARQL]

wdq заменяется официальным SPARQL конечной точки, где этот запрос выглядит следующим образом:

PREFIX wdt: <http://www.wikidata.org/prop/direct/> 
SELECT ?item ?itemLabel WHERE { 
    ?item wdt:P646 "/m/0gnfq" . 
} 

вы можете try it at query.wikidata.org

и чтобы получить результаты этого запроса в JSON, вы можете сделать запрос на «https://query.wikidata.org/sparql?format=json&query=YOURQUERY», где YOURQUERY - это запрос SPARQL с кодировкой URI:

https://query.wikidata.org/sparql?format=json&query=PREFIX%20wikibase%3A%20%3Chttp%3A%2F%2Fwikiba.se%2Fontology%23%3E%20PREFIX%20wdt%3A%20%3Chttp%3A%2F%2Fwww.wikidata.org%2Fprop%2Fdirect%2F%3E%20SELECT%20%3Fitem%20%3FitemLabel%20WHERE%20%7B%20%3Fitem%20wdt%3AP646%20%22%2Fm%2F0gnfq%22%20.%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22en%22%20.%20%7D%20%7D

[старый ответ: используя WDQ]

вы можете принести wmflabs API (documentation), как это:

http://wdq.wmflabs.org/api?q=string[646:/m/0gnfq] 

Здесь я опрашивать викиданные объекты с имуществом 646 значения /m/0gnfq.

Ответ будет выглядеть следующим образом:

{ 
    "status": { 
    "error": "OK", 
    "items": 1, 
    "querytime": "161ms", 
    "parsed_query": "STRING[646:'/m/0gnfq']" 
    }, 
    "items": [ 
    180736 
    ] 
} 

Субъект я искал, таким образом Q180736.

Здесь запрос использует параметр string, поскольку идентификаторы freebase являются строками в wikidata, но для свойств, подразумевающих объекты wikidata как тип значения, вам нужно будет использовать параметр claim. Пример из документации:

претензии [138: 676555] возвращает все элементы, которые названы после того, как (P138) Франциска Ассизского (Q676555).

+0

Похоже, в настоящее время нет других параметров. Странно, что такой амбициозный проект не имеет такой простой функциональности. – Inf

+0

в этой статье в сентябре [wdq tool story] (http://magnusmanske.de/wordpress/?p=72) очень проницателен в этой проблеме: на самом деле это не так просто. – maxlath

1

Существует теперь конечная точка SPARQL в https://query.wikidata.org

Там вы можете ввести в запросе SPARQL для викиданного. например, для Freebase собственности это может выглядеть следующим образом:

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

SELECT ?subject ?subjectLabel WHERE { 
    ?subject wdt:P646 ?object . 

    SERVICE wikibase:label { 
    bd:serviceParam wikibase:language "en" . 
    } 
} LIMIT 10 
1

Я тоже предпочитаю Wikidata Query API, но если вам нужно больше информации о деталях, то вы можете использовать Wikidata API. Например, в вашем случае все предметы, которые ссылаются на Freebase identifier (P646), являются:

https://www.wikidata.org/w/api.php?action=query&format=xml&generator=backlinks&gblnamespace=0&gbllimit=5000&prop=info&gbltitle=Property:P646