DBpedia SPARQL карьера игроков, сыгравших за конкретную команду - PullRequest
0 голосов
/ 28 марта 2019

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

select ?playerName ?year ?teamName ?matches ?goals where {
  ?player a dbo:SoccerPlayer ;
            rdfs:label ?playerName ;
            dbo:birthDate ?birthDate ;
            dbo:careerStation ?station .
  ?station dbo:years ?year ;
           dbo:team ?team ;
           dbo:team/rdfs:label ?teamName ;
           dbo:numberOfMatches ?matches ;
           dbo:numberOfGoals ?goals .
  filter (langMatches(lang(?teamName), "EN"))
  filter (xsd:date(?birthDate) > "1980-01-01"^^xsd:date)
  filter (
     ?team = <http://dbpedia.org/resource/Olympique_Lyonnais>
  || ?team = <http://dbpedia.org/resource/AS_Monaco_FC>
  )
}
order by ?playerName ?year

Мои проблемы:

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

    "Gaëtan Perrin"@en | 2014... | "Olympique Lyonnais Reserves and Academy"@en | 3 | 1
    

Спасибо за помощь!

1 Ответ

1 голос
/ 28 марта 2019

Как указано в комментариях, вы должны использовать подзапрос, чтобы все игроки играли за эти команды и родились после 1980 года.Во внешнем запросе вы можете получить все данные о своей карьере:

select ?playerName ?year ?teamName ?matches ?goals where {

# get all players for given teams born after 1980  
{
select distinct ?player {
?player a dbo:SoccerPlayer ;           
        dbo:birthDate ?birthDate ;
        dbo:careerStation/dbo:team ?team 
filter (?team in (dbr:Olympique_Lyonnais, dbr:AS_Monaco_FC))
filter (xsd:date(?birthDate) > "1980-01-01"^^xsd:date)
}
}

# get all their career station data
  ?player a dbo:SoccerPlayer ;
            rdfs:label ?playerName ;
            dbo:birthDate ?birthDate ;
            dbo:careerStation ?station .
  ?station dbo:years ?year ;
           dbo:team ?team ;
           dbo:team/rdfs:label ?teamName ;
           dbo:numberOfMatches ?matches ;
           dbo:numberOfGoals ?goals .
  filter (langMatches(lang(?teamName), "EN"))

}
order by ?playerName ?year
...