私は Linked-Data にかなりSPARQL
慣れていませんが、SQL の知識があるので、概念とクエリの一部を理解しています。rdfdata.org のサンプル データを使用して、 Elvis impersonator repoを使用して GraphDB インスタンスをセットアップすることができました。
オブジェクト値のフィルタリングなどのいくつかの基本的なクエリを使用して、いくつ
SELECT * WHERE {?s ?p ?o}
かの基本的なデータをテーブルに表示することができました。私は正規表現を使用した経験があるので、これを SPARQL で使用してElvis
、オブジェクト内の出現をカウントすることにしました。しかし、私が何をしても、これを上記のものにすることはできません。
elvis
複数のフォームを含むトリプルがあるため、これは問題です。
s: http://www.gigmasters.com/elvis/bobjames/
p: ep:influences
o: Elvis Elvis Elvis! I also do a Neil Diamond tribute as well, and have
been a DJ, MC, and musician for many years.
ご覧のとおりElvis
、1 としてカウントされる 3 つのオカレンスがあります。
トリプルを選択し、出現回数をカウントするために使用される SPARQL クエリを次に示します。
SELECT ?s ?p ?o (count(regex( ?o ,"[Ee]lvis")) as ?count)
WHERE {
?s ?p ?o.
filter(regex( ?o ,"([Ee]lvis.){3}")) //only return the triple above
}
GROUP BY ?s ?p ?o
これらの発生がカウントされない可能性はありますか? 私は使用してみstr(?o)
ましたが、オブジェクトは文字列リテラルであるため、それは問題ではありません。
期待される結果:
le table with 4 columns: | ?s | ?p | ?o | count |
, ここで count は"3"^^xsd:integer