2014-11-29 22 views
6

Mi piacerebbe sapere, c'è un modo per trovare un'entità Wikidata per proprietà specificata usando la loro API. Ad esempio, ci sono molte entità che hanno la proprietà Freebase ID (Proprietà: P646). È un identificatore univoco e voglio ottenere un'entità con questo identificatore.Come trovare un'entità Wikidata per proprietà?

Qualcuno sa come ottenere questo?

risposta

8

[aggiornato risposta: utilizzando l'endpoint SPARQL]

wdq è stato sostituito da un SPARQL endpoint ufficiale, dove questa query è simile al seguente:

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

è possibile try it at query.wikidata.org

e per ottenere i risultati di questa query in JSON, puoi effettuare una richiesta a "https://query.wikidata.org/sparql?format=json&query=YOURQUERY" dove YOURQUERY è la query SPARQL con codifica 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

[vecchia risposta: usando WDQ]

è possibile recuperare l'API wmflabs (documentation) come questo:

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

Ecco, io interrogare i soggetti Wikidata con la proprietà 646 del valore /m/0gnfq.

La risposta sarà simile a questa:

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

L'entità che cercavo è quindi Q180736.

Qui, la query utilizza il parametro string poiché gli ID di FreeBase sono stringhe in wikidata, ma per le proprietà che implicano le entità wikidata come tipo di valore, sarà necessario utilizzare il parametro claim. Un esempio dalla documentazione:

pretesa [138: 676.555] restituisce tutti gli elementi che prendono il nome (P138) Francesco d'Assisi (Q676555).

+0

Sembra che non ci siano altre opzioni al momento. È strano che un progetto così ambizioso non abbia una funzionalità così semplice. – Inf

+0

questo brano del settembre 2013 sulla [storia di background dello strumento wdq] (http://magnusmanske.de/wordpress/?p=72) è molto perspicace su questo argomento: non è in realtà così semplice. – maxlath

1

v'è ora un endpoint SPARQL a https://query.wikidata.org

Non c'è possibile digitare nella query SPARQL per Wikidata. per esempio, per la proprietà Freebase potrebbe assomigliare a questo:

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

Anch'io preferisco Wikidata Query API, ma se avete bisogno di qualche informazione in più gli elementi che si possono usare Wikidata API. Ad esempio, nel tuo caso, tutti gli elementi che collegano alla proprietà Freebase identifier (P646) sono:

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