2

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 クエリ エディターで同じクエリを使用すると、問題なく動作します。ここで実行されるクエリを参照してください。

何か案は?

ありがとう!

4

1 に答える 1

1

クエリには「type」と呼ばれる2つの句がありますが、これは有効なJSONではないため、有効なMQLクエリではありません。ほとんどのJSONパーサーは、最初の「type」句を2番目の句で上書きするだけです。つまり、実際には次のクエリを実行することになります。

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

やってみよう

上記で投稿したのと同じ結果が表示されます。これはエラーではなく、あまり興味のないクエリの結果にすぎません。

特定のプロパティに対して1つの句しかないという制限を回避するために、MQLでは、「foo:type」や「bar:type」などのプロパティに任意のプレフィックスを追加できます。自分で追加するのを忘れた場合、クエリエディタは実際にこれらを自動的に追加します(ただし、APIを使用する場合は、自分で追加することを忘れないでください)。したがって、リンクしたクエリは、クエリエディタに次のように表示されます。

[{
  "id":            null,
  "name":          [],
  "type":          "/people/person",
  "/common/topic/image": [{}],
  "limit":         10,
  "ns0:type":      []
}]​
于 2011-11-02T17:44:22.290 に答える