3

SesameからのSPARQLクエリの結果を解析しようとしています。以下の関連部分のサンプルコードを見つけました。結果を以下に示します。

(response, content) = httplib2.Http().request(endpoint, 'POST', urllib.urlencode(params), headers=headers)

print "Response %s" % response.status
results = json.loads(content)
print "\n".join([result['type']['value'] for result in results['results']['bindings']])

{

   "head": {

       "vars": [ "costar", "movie" ]

   },

   "results": {

       "bindings": [

           {

               "costar": { "type": "uri", "value": "http:\/\/rdf.freebase.com\/ns\/en.connie_nielsen" },

               "movie": { "type": "uri", "value": "http:\/\/rdf.freebase.com\/ns\/en.basic_2003" }

           },

           {

               "costar": { "type": "uri", "value": "http:\/\/rdf.freebase.com\/ns\/en.timothy_daly" },

               "movie": { "type": "uri", "value": "http:\/\/rdf.freebase.com\/ns\/en.basic_2003" }

           },


      ]

   }

}     

しかし、私はこのエラーを受け取ります:

Traceback (most recent call last):
  File "C:\Software\rdflib\movieSparqlQuery.py", line 45, in <module>
    print "\n".join([result['type']['value'] for result in results['results']['b
indings']])
KeyError: 'type'
Press any key to continue . . .

「print」ステートメントを変更するにはどうすればよいですか?

私が見たいのは、同じ行にある共演者と映画の名前のようなものです。

http://rdf.freebase.com/ns/en.connie_nielsen  http://rdf.freebase.com/ns/en.basic_2003

後で、名前空間を削除します。

ありがとう!

4

2 に答える 2

2

受信したエラーは、result辞書にキーがないことを示しています'type'。注意深くチェックすると、の各要素はresults['results']['bindings']2つのキーを持つ辞書です:'costar''movie'、したがって、result変数はこれら2つのキーを持つ辞書になります。

とのそれぞれはresult['costar']result['movie']2つのキーを持つ辞書でもあります:'type''value'。本当に必要なのは、スペースを含み、スペースresult['costar']['value']result['movie']['value']区切られた文字列を作成することです。シングルが与えられたresult場合、これは次の方法で実現できます。

" ".join(result[var]['value'] for var in results['head']['vars'])

ここで、改行で区切られたすべての共演者と映画を含む文字列を印刷するには、印刷ステートメントを次のように変更する必要があります。

print "\n".join([" ".join(result[var]['value'] for var in results['head']['vars']) for result in results['results']['bindings']])
于 2011-05-09T01:29:39.197 に答える
0

SPARQLWrapperのサンプルコードを見てください。

for result in results["results"]["bindings"]:
    print(result["label"]["value"])
于 2012-05-22T18:22:11.560 に答える