2012-06-13 5 views
1

Я пытаюсь использовать Freebase, чтобы узнать, к какой команде принадлежит профессиональный спортсмен.Новичок-новичок: получение спорта спортсмена

Так что я пытаюсь сделать что-то вроде этого

[{ 
    "id": null, 
    "name": "Kobe Bryant", 
    "type": "/sports/pro_athlete", 
    "sports_played": [] 
}]​ 

query editor

, а затем извлечь свойство «sport_played», чтобы выяснить, какой вид спорта игрок принадлежит. Мой план состоит в том, чтобы затем сделать более конкретный запрос для «basketball_player» или так до тех пор, пока я не найду название команды. (Есть более простой способ сделать это?)

Однако я уже не в состоянии на первом этапе, так как в результатах, а свойства sport_played и sport_played_professionally содержать одну запись, что запись является пустым:

{ 
    "code":   "/api/status/ok", 
    "result": [{ 
    "id": "/en/kobe_bryant", 
    "name": "Kobe Bryant", 
    "sports_played": [ 
     null 
    ], 
    "type": "/sports/pro_athlete" 
    }], 
    "status":  "200 OK", 
    "transaction_id": "cache;cache03.p01.sjc1:8101;2012-06-13T13:30:20Z;0053" 
} 

Я в замешательстве: я знаю, просматривая базу данных, что для этого игрока должна быть спортивная ценность. И результат ясно показывает, что в результате в списке «sports_played» есть единственное значение.

Но почему это null? Не следует ли скорее ссылаться на объект баскетбола?

ответ

0

Ваш запрос запрашивает список sports_played, но поскольку вы использовали только квадратные скобки, он возвращает только список имен всех соответствующих тем.

Если добавить фигурные скобки в запросе вы увидите, что на самом деле sports_played возвращает одну тему с именем = NULL (который является то, что ваш предыдущий запрос показывал)

[{ 
    "id": null, 
    "name": "Kobe Bryant", 
    "type": "/sports/pro_athlete", 
    "sports_played": [{}] 
}] 

Это происходит потому, что expected value of sports_played является CVT называется Sports played, который связывает спортсменов с спортом в течение определенных периодов времени. Это так, что мы можем следить за спортсменами, которые сыграли несколько видов спорта и знают, какой из них наиболее актуальный.

Если вы хотите, чтобы увидеть значения внутри объекта CVT, вам нужно перейти дальше, как это:

[{ 
    "id": null, 
    "name": "Kobe Bryant", 
    "type": "/sports/pro_athlete", 
    "sports_played": [{ 
    "type": "/sports/pro_sports_played", 
    "sport": { 
     "id": null, 
     "name": null 
    }, 
    "career_start": null, 
    "career_end": null 
    }] 
}] 

Попробуйте в Query Editor

0

The sports_played собственности не очень что вы хотите здесь, поскольку это не обязательно связано со свойствами, которые содержат информацию о команде.

Вместо этого вы хотите использовать что-то вдоль линий:

{ 
    "id": null, 
    "name": "Kobe Bryant", 
    "/basketball/basketball_player/team" : [{"team":null}], 
    }] 
} 

, если вы хотите, чтобы все команды для всех Брайант вы могли бы использовать что-то вроде:

[{ 
    "id": null, 
    "name": "Kobe Bryant", 
    "/soccer/football_player/current_team" : [{"team":null,"optional":true}], 
    "/basketball/basketball_player/team" : [{"team":null,"optional":true}], 
    "/american_football/football_player/current_team" :[{"team":null,"optional":true}] 
    }] 
}]​ 

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