2015-04-19 10 views
5

Jestem nowym użytkownikiem SPARQL i próbuję uruchomić zapytanie SPARQL, aby zwrócić wyniki dla właściwości i wyświetlić dla niej wartość powiązanej właściwości. KodSPARQL - zapytanie o właściwość i zwrócenie wyników dla powiązanej właściwości

przykładem jest:

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 . 
} 

W rezultacie są wszystkie cele replikowane na każdym klubie:

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 

Cele na klub związany jest prawidłowo w zbiorze danych, a więc to, co chcę do uzyskania są tylko cele dla danego klubu:

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 

Jednak nie mówię jak to zrobić w SPARQL, każda pomoc jest bardzo doceniana.

+0

Patrząc na [dane] (http://dbpedia.org/page/Alan_Shearer), cele nie wydają się być związane z klubami niezależnie od ich kolejności pojawiania się. O ile mogę powiedzieć, nie ma wyraźnych instrukcji RDF wiążących jeden z drugim. Dostęp do wartości według indeksu jest dość trudny w RDF. – toniedzwiedz

+0

Dzięki za odpowiedź, patrząc na inne dane, kolejność pojawiania się nie zawsze koreluje - ale oczywiście dane zawsze pojawiają się poprawnie w Wikipedii. Mój oryginalny pomysł polegał na uzyskaniu konkretnych informacji z infoboxu Wiki, unikając parsowania całego infoboxu. – AndW99

Odpowiedz

2

Uwaga w danych, które istnieją pewne dbpedia-owl: careerStation wartości nieruchomości:

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

Jeśli spojrzeć na wartości tych właściwości, np http://dbpedia.org/page/Alan_Shearer__3, można zobaczyć, że niektóre z nich mieć własność wielu celów. Oznacza to, że można to zrobić:

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

ponieważ nie wszystkie stacje mają informacje cele, możesz użyć opcjonalnego, żeby dostać na stację, a następnie cele , jeśli dostępne jest::

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

Dzięki, rozumiem problem teraz, będę musiał wrócić i pomyśleć o lepszym podejściu i zestawie danych. – AndW99

+1

@ AndW99 Co masz na myśli? Czy to nie rozwiązuje problemu? (Najpierw napisałem odpowiedź, która wyjaśniła problemy omawiane w komentarzach, ale potem uświadomiła sobie, że DBpedia * ma * dane, które chcesz, oraz związek pomiędzy drużynami i celami, ale musisz zapytać trochę inaczej .) –

+0

Przepraszam, twoja poprawiona odpowiedź została dostarczona, ponieważ odpowiadałem na twoją oryginalną odpowiedź! Tak, twoja odpowiedź tutaj jest tym, czego szukałem. Dzięki - głosowałem na twoją odpowiedź – AndW99

Powiązane problemy