我正在开发一个提取元数据的语义反向代理。我使用Django,dj-revproxy和RDFLib(以及我使用MySQL的存储),但我正在使用python绑定切换到redland的框架来管理语义部分。
但我有一个重要的问题。存储RDF后(数据在Mysql数据库中,我检查过)我想做一个sparql查询,结果是“none”。也许查询的方法很糟糕。
def sparql_query(query, user, password, db, output, dbSystem='mysql'):
if dbSystem == 'mysql':
st= connect_librdf_mysql(user, password, db)
else:
st= connect_librdf_sqlite(db)
options = 'database=\'' + db + '\''
model=RDF.Model(st, options_string=options)
q1 = RDF.Query(query ,query_language='sparql')
#q1Result = q1.execute(model)
q1Result = model.execute(q1)
print("[ SPARQL QUERY DONE ]")
if q1Result.is_graph():
return q1Result.as_stream()
else:
return str(q1Result)
结果如下:
slok@sLoKAsus:utils$ python ./test_redland.py
[ CONNETED TO redland2 DATABASE ]
[ RDF STORED ]
[ CONNETED TO redland2 DATABASE ]
[ SPARQL QUERY DONE ]
<?xml version="1.0" encoding="utf-8"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="aname"/>
<variable name="bname"/>
</head>
<results>
</results>
</sparql>
谢谢:)
答案 0 :(得分:2)
升级到所有Redland库的GIT版本后我发现了问题(raptor,rasqal ......)。问题是当我连接到MySQL数据库时,new = true会破坏所有存储的数据(数据仍然存在,但查询为空)。
换句话说,要解决问题,您必须更新libs,然后在第一次连接(或创建)MySQL模式(db)时将新标志置为true,然后将标志始终设置为false。 我在这里把代码放到我做的一些函数中:Gist of MySQL and Redland example