Freebase API получает запросы других типов - PullRequest
2 голосов
/ 02 ноября 2011

Я использую freebase python для доступа к API freebase. У меня есть следующий запрос, который я хотел бы выполнить:

query = [{
        "id":   None,
        "name" : [],
        "type" : "/people/person",
        "/common/topic/image":[{}],
        "limit" : 10,
        "type" : []
        }]

results = freebase.mqlread(query)

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

{u'id': u'/user/root', u'type': [u'/type/user'], u'/common/topic/image': [{u'type': [u'/type/content', u'/common/image'], u'id': u'/m/05kdqcb', u'name': None}], u'name': [u'Freebase Staff']}
{u'id': u'/', u'type': [u'/type/namespace'], u'/common/topic/image': [], u'name': []}
{u'id': u'/type/namespace/keys', u'type': [u'/type/property'], u'/common/topic/image': [], u'name': [u'keys']}
{u'id': u'/boot', u'type': [u'/type/namespace'], u'/common/topic/image': [], u'name': []}
{u'id': u'/boot/root_permission', u'type': [u'/type/permission'], u'/common/topic/image': [], u'name': [u'Root Permission']}
{u'id': u'/type/object/permission', u'type': [u'/type/property'], u'/common/topic/image': [], u'name': [u'permission']}
{u'id': u'/type/object/type', u'type': [u'/type/property'], u'/common/topic/image': [], u'name': [u'type']}
{u'id': u'/type', u'type': [u'/type/namespace', u'/type/domain'], u'/common/topic/image': [], u'name': [u'Metaweb System Types']}
{u'id': u'/type/type', u'type': [u'/type/type'], u'/common/topic/image': [], u'name': [u'Type']}
{u'id': u'/type/namespace', u'type': [u'/type/type'], u'/common/topic/image': [], u'name': [u'Namespace']}

Однако он работает нормально, когда я использую тот же запрос в редакторе запросов Freebase. Смотрите запрос здесь .

Есть идеи?

Спасибо!

1 Ответ

1 голос
/ 02 ноября 2011

В вашем запросе есть два предложения, которые называются «тип», что является недопустимым JSON и, следовательно, недопустимым MQL-запросом.Большинство анализаторов JSON просто перезаписывают первое предложение типа type вторым, что означает, что вы фактически выполняете следующий запрос:

[{
  "id":            null,
  "name":          [],
  "/common/topic/image": [{}],
  "limit":         10,
  "type":      []
}]​

Попробуйте его

Теперь вы должны увидеть те же результаты, что и выше.Это не ошибка, это просто результаты менее интересного запроса.

Чтобы обойти ограничение наличия только одного предложения для любого заданного свойства, MQL позволяет добавлять произвольные префиксы к свойству типа "foo: type "или" bar: type ".Редактор запросов на самом деле автоматически добавит их вам, если вы забудете добавить их самостоятельно (но когда вы используете API, вы должны помнить, чтобы сделать это самостоятельно).Таким образом, запрос, на который вы ссылались, отображается в редакторе запросов следующим образом:

[{
  "id":            null,
  "name":          [],
  "type":          "/people/person",
  "/common/topic/image": [{}],
  "limit":         10,
  "ns0:type":      []
}]​
...