9

リモートエンドポイントにクエリを実行してowl:sameAsマッピングを取得しようとしていますが、RDFLibとRedlandの両方を試しましたが、どちらも機能しませんでした。おそらく、名前空間を正しく処理していません。

これがRDFLibでの私の試みです:

    import rdflib

    rdflib.plugin.register('sparql', rdflib.query.Processor, 'rdfextras.sparql.processor', 'Processor')
    rdflib.plugin.register('sparql', rdflib.query.Result, 'rdfextras.sparql.query', 'SPARQLQueryResult')

    g = rdflib.Graph()

    query = """
        SELECT *
        FROM <http://api.talis.com/stores/bbc-backstage/services/sparql>
        WHERE {
             ?s a http://purl.org/ontology/mo/MusicArtist;
                http://www.w3.org/2002/07/owl#sameAs ?o .
        }Limit 50
    """

    for row in g.query(query):
        print row

そしてここにレッドランドがあります:

import RDF
model = RDF.Model()

query = """
    SELECT *
    FROM <http://api.talis.com/stores/bbc-backstage/services/sparql>
    WHERE {
         ?s a http://purl.org/ontology/mo/MusicArtist;
            http://www.w3.org/2002/07/owl#sameAs ?o .
    }Limit 50
"""

for statement in RDF.Query(query ,query_language="sparql").execute(model):
    print statement

それらのいずれかで何が悪いのか、ヒントを教えてください。私が抱えているさらに別の問題:オブジェクトのデータセット名を取得することは可能ですか?例:ある場合:

?s = http://www.bbc.co.uk/music/artists/eb5c8564-927d-414d-b152-c7b48a2c9d8b#artist
predicate = http://www.w3.org/2002/07/owl#sameAs
?0 = http://dbpedia.org/resource/The_Boy_Least_Likely_To

この例で「Dbpedia」の名前を取得できますか?または、sameAsリンクを使用している他のデータセットはありますか?(または、オブジェクト文字列で関心のあるデータセット名を検索することもできます)よろしくお願いします。

4

4 に答える 4

13

色々なこと:

その通りです。任意の URI を で囲む必要があります< >。正しいクエリは次のとおりです。

SELECT ?s ?o WHERE {
         ?s a <http://purl.org/ontology/mo/MusicArtist>;
            <http://www.w3.org/2002/07/owl#sameAs> ?o .
    } limit 50

...ここで結果を参照してください。

FROMあなたが思っているように、rdflibやredlandには実装されていません。リモート SPARQL エンドポイントはフェッチしません。リモート グラフまたはローカル ストアにあるその名前のグラフをフェッチします。あなたの場合、ここで Jena でどのように機能するかSERVICEを確認したいと思います。残念ながら、rdflib も redland もSPARQL の句を実装していませんが、これを解決するための回避策があります。SERVICE

考えられる解決策の 1 つは、 SPARQLWrapper for pythonを使用することです。それは簡単です。ここに、そのライブラリを使用したコードがあります。

from SPARQLWrapper import SPARQLWrapper, JSON

sparql = SPARQLWrapper("http://api.talis.com/stores/bbc-backstage/services/sparql")
sparql.setQuery("""
    SELECT ?s ?o
    WHERE {
         ?s a <http://purl.org/ontology/mo/MusicArtist>;
            <http://www.w3.org/2002/07/owl#sameAs> ?o .
    } limit 50
""")
sparql.setReturnFormat(JSON)
results = sparql.query().convert()

for result in results["results"]["bindings"]:
    print result["s"]['value'], result["o"]['value']

ご覧のとおり、リモート SPARQL エンドポイントはクエリの外部のパラメーターになります。

于 2011-05-05T08:12:33.740 に答える
3

Redland は現在、FROM での SPARQL エンドポイントの使用をサポートしていません。ここで使用しているのは、RDF データセットにロードするグラフ名です。トリプル(s、p、o)+ cを次のようにロードすると、レッドランドコンテキストとも呼ばれますmodel.context_add_statement(statement, context)

Rasqal GIT は解析をサポートしSERVICEていますが、クエリでの実行はまだサポートしていません。

于 2011-05-05T20:48:15.800 に答える
2

これらのオンライン例で示されているように、リモート クエリ実行用に SPARQL-FED "Service" パラメータを実装するため、Virtuoso を RedLand と共に使用することも検討できます。

于 2011-05-05T13:29:57.903 に答える
2

http://terse-words.blogspot.com/2012/01/get-real-data-from-semantic-web.htmlのブログ エントリには、コードをかなりきれいに保つ別の簡単な解決策があります。SPARQLWrapper も使用します。

于 2012-01-19T22:54:01.883 に答える