2011-09-15 3 views
0

私はSPARQLWrapperでpythonを使用しています。これまでのところ動作しました。新しいSPARQLオブジェクトを結果に追加できません。私はより多くの結果を追加しようとしている初心者のpython結果のバインディング質問

else: 

     for result in results["results"]["bindings"]: 
      project = result["project"]["value"].encode('utf-8') 
      filename = result["filename"]["value"].encode('utf-8') 
      keywords = result["keywords"]["value"].encode('utf-8') 
      url = result["url"]["value"].encode('utf-8') 
      url = result["url"]["value"].encode('utf-8') 

      print "<p class=\"results\"><span>Project</span>: %s</p><p class=\"indent\"><span>Filename</span>: %s</p><p class=\"indent\"><span>URL</span>:<a href=\"%s\">%s</a></p><p class=\"indent-bottom\"><span>Keywords</span>: %s</p> " % \ 
       (project,filename,url,url,keywords) 

は、ここに私の作業スニペットです。私はスクリプトに追加されたSPARQLクエリをテストしました。クエリのオブジェクト( "parameter")をRESULTSとBINDINGSのペアとして追加し、%sを追加して結果の名前を印刷の下の括弧に追加しますコマンド(その領域を何に呼び出すべきかわからない)。この結果を追加するために前に行ったことを実行した後、私は死の白い画面が表示されます。ページのヘッダーのみが書き出され、ApacheエラーログにはKeyError、project = result ["project"] ["" value "]。encode( 'utf-8')。

else: 
     print "<h1>ASDC RDF Search Results</h1>" 
     print "<p class=\"newsearch\"><a href=\"/asdc.html\">new search | <a href=\"http://localhost/asdc.html\">About this project</a></p><div style=\"clear:both;\"</div>" 
     for result in results["results"]["bindings"]: 
      project = result["project"]["value"].encode('utf-8') 
      filename = result["filename"]["value"].encode('utf-8') 
      url = result["url"]["value"].encode('utf-8') 
      url = result["url"]["value"].encode('utf-8') 
      keywords = result["keywords"]["value"].encode('utf-8') 
      parameter = result["parameter"]["value"].encode('utf-8') 

      print "<p class=\"results\"><span>Project</span>: %s</p><p class=\"indent\"><span>Filename</span>: %s</p><p class=\"indent\"><span>URL</span>:<a href=\"%s\">%s</a></p><p class=\"indent\"><span>Keywords</span>: %s</p><p class=\"indent-bottom\"><span>Parameter</span>: %s</p> " % \ 
       (project,filename,url,url,keywords,parameter) 

ので、2つの質問:ここで

は、スクリプトを壊し追加された要素の一例である誤りは明白ですか?私は新しい行を追加するときに何らかの形でキーの書式設定をねじっていますか?また、Pythonはログにエラーを書き込むのですか、それとも有効にできますか?おかげで...

編集:ここでは、パラメータを含むクエリです(それが動作、布石UIに直接テスト)

PREFIX e1: <http://data.gov/source/work/dataset/gov/vocab/enhancement/1/> 

    SELECT ?url ?filename ?keywords ?project ?parameter 

    WHERE { 
    ?s <http://data.gov/source/work/dataset/gov/vocab/enhancement/1/url> ?url. 
    ?s <http://data.gov/source/work/dataset/gov/vocab/enhancement/1/filename> ?filename. 
OPTIONAL { 
     ?s <http://data.gov/source/work/dataset/gov/vocab/enhancement/1/keywords> ?keywords. 
     ?s <http://data.gov/source/work/dataset/gov/vocab/enhancement/1/project> ?project. 
     ?s <http://data.gov/source/work/dataset/gov/vocab/enhancement/1/parameter> ?parameter. 
     } 
     FILTER (regex(?keywords, "FILTER-STRING", "i") || regex(?url, "FILTER-STRING", "i") || regex(?filename, "FILTER-STRING", "i")) . 

}

最初のクエリは、同様のマイナスパラメータですか。 FILTER-STRINGは私のCGIフォームから来ます。

+0

あなたがRANをしたSPARQLクエリは、それらの名前すなわちのバインディングを持っていないように私には思えますそれらの名前は 'SELECT'にリストされていません。 'results'とsparqlクエリを生成するコードを表示し、' result'を出力してそれらの名前が疑わしいと思われないかどうかを確認してください。 –

+0

私は質問を...あなたの返答のために追加しました。最初のクエリが機能するので、プロジェクト/値のバインディングは問題にはならないようです。一番下に新しいバインディングを追加すると、 "for result"ブロックの先頭にエラーが報告されます。私は何とかフォーマットを混乱させていると思う。私はどのように結果を印刷するのかわかりません、私はpythonにまったく新しいです - 私のコードはWebページを生成し、壊れている場合は結果を見ることができません。結果を印刷するにはどうすればよいですか(スクリプトのhtml出力を取り除く)? – chuckfinley

答えて

0

result dictにはキーがありません"project"、またはresult["project"] dictにはキーがありません"value"です。

のでimediatly for result in ...

print result.keys() 
print result["project"] 
print result["project"].keys() 
print result["project"]["value"] 

を挿入し、あなたは間違って何が起こっているかを参照してください。

+0

"['url'、 'keywords'、 'project'、 'filename'] {'type': 'literal'、 'value': 'ceres'} ['type'、 'value'] flash" Generatedクエリ: "PREFIX e1:SELECT?url?filename?keywords?project場所(?url。ファイル名)オプション。?キーワード?プロジェクト。} FILTER(regex(?keywords、" flash "、" i ")|| regex(?url、" flash "、" i ")||正規表現(?filename、" flash "、" i "))。} " – chuckfinley

+0

私のキーがあることを知るためにSPARQLについて十分に知っていますが、新しいキーを追加すると互換性のないフォーマットを導入する必要がありますが、BBEditでUNICODEとUNIX LFに設定しています。どのような問題が起こっているのかを知るために、Pythonについて十分に知っています。 – chuckfinley

+0

私の問題は、SPARQLWrapperがOPTIONALで正しく動作しないことです。 – chuckfinley

0

私の問題は、クエリのOPTIONAL句の結果にNULL値が原因であることが判明しました。 SPARQLWrapper開発者は、オプション(それは私のために働いた&)を使用して、クエリの例と以下のように、のif​​-elseを使うことを提案:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> 
    SELECT ?person ?party 
    WHERE { ?person <http://dbpedia.org/ontology/birthPlace> <http://dbpedia.org/resource/Asturias> 
      OPTIONAL { ?person <http://dbpedia.org/property/party> ?party } 

for result in results["results"]["bindings"]: 
    if result.has_key("party"): 
     print "* " + result["person"]["value"] + " ** " + result["party"]["value"] 
    else: 
     print result["person"]["value"]