2015-04-19 8 views
5

Sono nuovo di SPARQL e sto cercando di eseguire una query SPARQL in modo che io restituisca i risultati per una proprietà ed elenchi il valore per una proprietà correlata. CodiceSPARQL - interrogare una proprietà e restituire risultati per una proprietà correlata

esempio è:

SELECT ?player ?position ?club ?goals WHERE { 
    ?player a <http://dbpedia.org/ontology/SoccerManager> . filter (contains (str(?player), "Alan_Shearer")) . 
    ?player <http://dbpedia.org/ontology/position> ?position . 
    ?player <http://dbpedia.org/property/clubs> ?club . 
    ?player <http://dbpedia.org/property/goals> ?goals . 
} 

con il risultato di tutti gli obiettivi replicato contro ogni club:

player position club goals 
http://dbpedia.org/resource/Alan_Shearer http://dbpedia.org/resource/Forward_(association_football) http://dbpedia.org/resource/Southampton_F.C. 23 
http://dbpedia.org/resource/Alan_Shearer http://dbpedia.org/resource/Forward_(association_football) http://dbpedia.org/resource/Southampton_F.C. 112 
http://dbpedia.org/resource/Alan_Shearer http://dbpedia.org/resource/Forward_(association_football) http://dbpedia.org/resource/Southampton_F.C. 148 
http://dbpedia.org/resource/Alan_Shearer http://dbpedia.org/resource/Forward_(association_football) http://dbpedia.org/resource/Newcastle_United_F.C. 23 
http://dbpedia.org/resource/Alan_Shearer http://dbpedia.org/resource/Forward_(association_football) http://dbpedia.org/resource/Newcastle_United_F.C. 112 
http://dbpedia.org/resource/Alan_Shearer http://dbpedia.org/resource/Forward_(association_football) http://dbpedia.org/resource/Newcastle_United_F.C. 148 
http://dbpedia.org/resource/Alan_Shearer http://dbpedia.org/resource/Forward_(association_football) http://dbpedia.org/resource/Blackburn_Rovers_F.C. 23 
http://dbpedia.org/resource/Alan_Shearer http://dbpedia.org/resource/Forward_(association_football) http://dbpedia.org/resource/Blackburn_Rovers_F.C. 112 
http://dbpedia.org/resource/Alan_Shearer http://dbpedia.org/resource/Forward_(association_football) http://dbpedia.org/resource/Blackburn_Rovers_F.C. 148 

Gli obiettivi per giocatore è associato correttamente nel set di dati, e così quello che voglio per ottenere è solo gli obiettivi per il rispettivo club:

player position club goals 
http://dbpedia.org/resource/Alan_Shearer http://dbpedia.org/resource/Forward_(association_football) http://dbpedia.org/resource/Southampton_F.C. 23 
http://dbpedia.org/resource/Alan_Shearer http://dbpedia.org/resource/Forward_(association_football) http://dbpedia.org/resource/Newcastle_United_F.C. 112 
http://dbpedia.org/resource/Alan_Shearer http://dbpedia.org/resource/Forward_(association_football) http://dbpedia.org/resource/Blackburn_Rovers_F.C. 148 

Tuttavia, io non foll Come farlo in SPARQL, qualsiasi assistenza è molto apprezzata.

+0

Guardando [i dati] (http://dbpedia.org/page/Alan_Shearer), gli obiettivi non sembrano essere legati ai club da qualcosa di diverso dal loro ordine di apparizione. Per quanto posso dire non ci sono dichiarazioni RDF esplicite che si legano l'una all'altra. L'accesso ai valori per indice è un bel problema in RDF. – toniedzwiedz

+0

Grazie per la risposta, guardando gli altri dati, l'ordine di comparsa non è sempre correlato - ma ovviamente i dati appaiono sempre correttamente in Wikipedia. La mia idea originale era di ottenere informazioni specifiche da una casella di informazioni Wiki, evitando di analizzare l'intera infobox. – AndW99

risposta

2

Nota nei dati che ci sono alcuni dbpedia-owl: valori delle proprietà careerStation:

dbpedia-owl:careerStation dbpedia:Alan_Shearer__1, dbpedia:Alan_Shearer__2, ... 

Se si guarda al valore di tali proprietà, ad esempio, http://dbpedia.org/page/Alan_Shearer__3, si può vedere che alcuni di loro avere un numero di obiettivi di proprietà. Ciò significa che si può fare questo:

select ?player ?position ?team ?goals { 
    values ?player { dbpedia:Alan_Shearer } 
    ?player dbpedia-owl:position ?position ; 
      dbpedia-owl:careerStation [ dbpedia-owl:team ?team ; 
             dbpedia-owl:numberOfGoals ?goals ] . 
} 

SPARQL results

results

Dal momento che non tutte le stazioni hanno informazioni obiettivi, si potrebbe desiderare di utilizzare un optional qui per ottenere la stazione e poi il obiettivi se disponibili:

select ?player ?position ?team ?goals { 
    values ?player { dbpedia:Alan_Shearer } 
    ?player dbpedia-owl:position ?position ; 
      dbpedia-owl:careerStation ?station . 
    ?station dbpedia-owl:team ?team . 
    optional { ?station dbpedia-owl:numberOfGoals ?goals } 
} 

SPARQL results

+0

Grazie, ora capisco il problema, dovrò tornare indietro e pensare a un approccio e un set di dati migliori. – AndW99

+1

@ AndW99 Cosa intendi? Questo non risolve il problema? (Scusate, ho inviato prima una risposta che spiegava i problemi che i commenti stavano discutendo, ma poi ci siamo resi conto che DBpedia * ha * i dati che volete e l'associazione tra i team e gli obiettivi, ma dovete interrogare solo un po 'diversamente .) –

+0

scuse, la risposta è stata fornita come stavo rispondendo alla tua risposta originale! Sì, la tua risposta qui è ciò che stavo cercando. Grazie - ho votato la tua risposta – AndW99

Problemi correlati