新手python结果绑定问题

时间:2011-09-15 20:32:27

标签: python

我正在使用带有SPARQLWrapper的python并且它一直工作到现在 - 我无法在我的结果中添加新的SPARQL对象。

这是我的工作片段:

 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查询,我将查询对象(“参数”)添加为结果和BINDINGS对,我添加%s进行打印并将结果名称添加到打印下方的parens中命令(不知道该叫什么区域)。所以在完成我之前做的事情之后添加这些结果,我得到死亡的白屏 - 只写出页面的标题,而apache错误日志给我一个KeyError,project = result [“project”] [“值“]。编码( '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)

所以有两个问题:错误是否明显?当我添加新行时,我是否在某种程度上搞砸了键中的格式?此外,python是否将错误写入日志或我可以启用它吗?感谢...

编辑:这是查询包括参数(它可以工作,直接在Fuseki 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表格。

2 个答案:

答案 0 :(得分:0)

您的result词典没有键"project",或者result["project"]词典没有键"value"

所以插入

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

for result in ...之后的imediatly,你会发现出了什么问题。

答案 1 :(得分:0)

我的问题结果是由我的查询中的OPTIONAL子句的结果中的NULL值引起的。 SPARQLWrapper开发人员建议使用if-else,如下面的示例查询使用OPTIONAL(&amp; it working for me):

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"]