2011-11-02 20 views
2

我使用freebase python來訪問freebase api。我有以下查詢,我想執行: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']} 

然而,當我用同一個查詢中游離鹼查詢編輯器工作正常。請參閱查詢運行here

任何想法?

謝謝!

回答

1

您的查詢有兩個子句叫做「type」,它不是有效的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":  [] 
}]​ 
+0

是的就是這樣。謝謝! –