查询、Redland和python绑定存在问题



我正在开发一个提取元数据的语义反向代理。我使用Django、dj-revproxy和RDFLib(对于存储,我使用MySQL),但为了管理语义部分,我正在切换到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)

结果是:

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>

感谢:)

我在升级到所有Redland lib(raptor、rasqal…)的GIT版本后发现了这个问题。问题是当我连接到MySQL数据库时,new=true会破坏所有存储的数据(数据仍然存在,但查询为空)。

换句话说,为了解决这个问题,你必须更新libs,然后在第一次连接(或创建)MySQL模式(db)时将新标志设置为true,然后始终将标志设置为false。我把我制作的一些函数的代码放在这里:MySQL的Gist和Redland的示例

相关内容

  • 没有找到相关文章

最新更新