我正在使用freebase python访问freebase api。我有以下要执行的查询:
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查询编辑器中使用相同的查询时,它工作正常。请参阅查询运行here。
有什么想法吗?
谢谢!
答案 0 :(得分:1)
您的查询有两个名为“type”的子句,它们不是有效的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": []
}]