1

メタデータを抽出するセマンティックリバースプロキシを開発しています。私は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>

ありがとう :)

4

1 に答える 1

2

すべてのRedlandライブラリ(raptor、rasqal ...)のGITバージョンにアップグレードした後、問題が見つかりました。問題は、MySQLデータベースに接続すると、new = trueが保存されているすべてのデータを台無しにすることです(データはそこに残りますが、クエリはnullです)。

つまり、問題を解決するには、ライブラリを更新してから、MySQLスキーマ(db)を初めて接続(または作成)するときに、新しいフラグをtrueに設定し、常にフラグをfalseに設定する必要があります。ここに、作成したいくつかの関数のコードを配置し ます。MySQLの要点とRedlandの例

于 2011-07-14T14:03:45.300 に答える