2011-06-15 37 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