数学 機械学習技術 人工知能技術 プログラミング技術 アルゴリズム データベース技術. デジタルトランスフォーメーション ICT技術 セマンティックウェブ技術
前回、LODを実現するRDFデータのデータモデルと具体的なデータ構造について述べた。今回はそれらをハンドリングするデータベースであるRDFストアと、RDFストアからデータを抽出するクエリ体系であるSPARQLについて述べる。
RDFデータは別名トリプルストア(triplestore)とも呼ばれる以前DBの概要で紹介したNoSQLデータベースと呼ばれる非RDBMSのグラフ型のデータとなる。グラフ型DBとしてはNoo4JやDAtomic等のRDFによらない「ノード」「エッジ」「プロパティ」により構成されるデータベースがあり、それぞれ固有のクエリエンジン(Cypher、Datalog拡張クエリ)を持っている。RDFデータベースは、RDFデータ構造に準拠したクエリであるSPARQLに対応している物を言う。
RDFデータストアとしては、OcarleやIBM等の既存のDBフレームワークを持っているところからも提供されている他、オープンソースとしてはApacheプロジェクトからJena(及びクエリモジュールArq)が提供されていたり、個別のベンダーとしてはBlazeGraphやAllegroGraph等がある。またクラウドサービス対応としてはAWSのNeptuneもSAPRQLをサーポートしている。
SPARQLは、RDFストアに対する問い合わせ言語で、RDBMSにおけるSQLに当たるものとなる。SPARQLの例を以下に示す。
PREFIX abc: <http://mynamespace.com/exampleOntologie#> SELECT ?capital ?country WHERE { ?x abc:cityname ?capital. ?y abc:countryname ?country. ?x abc:isCapitalOf ?y. ?y abc:isInContinent abc:africa. }
冒頭のPREFIXは名前空間(name space)の定義領域で、すべてのRDFデータは名前空間を持ち、それらを毎回書くことの非効率性を防ぐため、最初に略語として定義し(上記例ではabc:)、その後はその略語を利用するものとなる。
二番目のSELECTは、クエリ形式と呼ばれるもので「SELECT」の他に「CONSTRUCT」「ASK」「DESCRIBE」がある。「SELECT」は最も多く使われるクエリで、後述するクエリパターンにマッチした変数(SELECTの後ろに定義されている?から始まる文字列)を返すものとなる。SELECTの後ろに「*」を技術すると全ての変数に対する結果が返される。
「CONSTRUCT」は、単なる変数ではなくトリプルデータを返すクエリ、「ASK」はクエリパターンがマッチしているかどうかを示すプール値(true/false)を返すものとなり、DESCRIBEは発見した資源に対して記述したRDFグラフを返すものとなる。
三番目以降はマッチさせたいパターンを記述する領域となる。「WHERE」で始まり、マッチさせたいトリプルパターンを{}の中に記述する。これらの記述の中には論理和や論理積、文字列操作やフィルターなど多彩な記述が可能で、それらがSPARQLの柔軟性を担保している。
SPARQLの参考図書としては「Learning SPARQL second edition」が最適かと思う。
以下、実際のRDFストアの立ち上げと利用について、Blazegraphを例に述べる。BalzeGraphはWikiのデータエンドポイントとしても利用されているRDFストアでAWSのNeptuneのベースにもなっており、Javaで動作するデータベースとなる。
利用方法としてはまず、推奨されるJava環境(Java9以降)を立ち上げた後、BlazegraphのWebページに行きダウンロードページよりJarファイル(blazegraph.jar)をダウンロードする。
ダウンロードしたjarファイルをいずれかのフォルダに格納したのち、そのフォルダーでターミナルを動作させて以下のコマンドを打ち込む。続いて以下ののようなメッセージが表示されれば立ち上げは完了する。
>java -server -Xmx4g -jar blazegraph.jar
...
serviceURL: http://127.0.0.1:9999
Welcome to Blazegraph(tm) by SYSTAP.
Go to http://localhost:9999/blazegraph/ to get started.
次にブラウザを立ち上げて「http://localhost:9999」にアクセスすると以下のような画面が表示される。
次に(サンプル)データをデータベースに格納する。(公式HPページでのサンプルデータ) Blazegraphの「UPDATE」タグを以下のように開き、格納するデータを指定して「UPDATE」をクリック。
最後に「QUERY」タグを以下のように開いて、SPARQLクエリを記述して検索してみる。検索が無事にできれば下図のように結果が表示される。
このRDFストアとClojureの連携に関しては別途記載する。
コメント
[…] Semantic Web技術の要素であるRDFやRDFデータベース、オントロジーに関しては別途述べるが、今回はこれらの論文の中で発表された内容について紹介する。 […]
[…] RDF storeとSPARQL NoSQL DBの一つであるグラフ型DBについて […]