我将python与SPARQLWrapper一起使用,到目前为止它一直有效--我不能将新的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查询,添加了查询的对象(“参数”)作为结果和绑定对,添加了要打印的%s,并将结果名称添加到print命令下面的括号中(不确定如何命名该区域)。因此,在我之前添加这些结果之后,我得到了死亡的白屏--只写出了页面的标题,apache错误日志给我一个项目,KeyError =“.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)那么有两个问题:错误是显而易见的吗?当我添加新行的时候,我是不是搞乱了键的格式?另外,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表单。
发布于 2011-09-16 04:41:15
您的result dict没有key "project",或者result["project"] dict没有key "value"。
所以插入
print result.keys()
print result["project"]
print result["project"].keys()
print result["project"]["value"]立即在for result in ...之后,您就会看到哪里出了问题。
发布于 2011-10-03 23:13:00
我的问题原来是由查询中可选子句的结果中的空值引起的。SPARQLWrapper开发人员建议使用if-else,如下所示,示例查询使用OPTIONAL (& it 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"]https://stackoverflow.com/questions/7437104
复制相似问题