Skip to main content
 首页 » 编程设计

python之Freebase API 获取其他类型的查询

2025年05月04日8cmt

我正在使用 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 .

有什么想法吗?

谢谢!

请您参考如下方法:

您的查询有两个名为“类型”的子句,它不是有效的 JSON,因此不是有效的 MQL 查询。大多数 JSON 解析器只会用第二个“类型”子句覆盖第一个“类型”子句,这意味着您实际上最终会运行以下查询:

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

Try it out

您现在应该会看到与上面发布的结果相同的结果。这不是一个错误,它只是一个不太有趣的查询的结果。

为了绕过任何给定属性只有一个子句的限制,MQL 允许将任意前缀添加到属性,如“foo:type”或“bar:type”。如果您忘记自己添加它们,查询编辑器实际上会自动为您添加它们(但是当您使用 API 时,您必须记住自己添加)。因此,您链接到的查询在查询编辑器中显示如下:

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