2011-06-15 68 views
1

我正在开发一个提取元数据的语义反向代理。我使用Django,dj-revproxy和RDFLib(以及用于存储的我使用MySQL),但是我正在使用python绑定切换到redland的框架以管理语义部分。问题与查询,Redland和python绑定

但我有一个重要的问题。在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) 

结果是这样的:

[email protected]: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> 

谢谢:)

回答

2

我发现这个问题升级到所有瑞德兰德库(猛禽,rasqal ...)的GIT版本之后。问题是,当我连接到MySQL数据库时,new = true会删除所有存储的数据(数据仍然存在,但查询为空)。

换句话说,要解决这个问题,您必须更新库,然后在您第一次连接(或创建)MySQL模式(db)时,将新标志设置为true,然后将标志设置为false。 我把这里的代码放到我所做的一些功能中:Gist of MySQL and Redland example