我正在使用带有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表格。
答案 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"]