一般的にRDFなんかでLinked Open Data(LOD)なんていうときはSPARQL Endpointなんかに格納するのだと思いますが、色々とあってNeo4jのようなグラフDBに格納したいと考えました。調べてみると、RDFとNeo4jのLGPというのは基本的な構造が同じだから変換が可能とある。Githubにneosemanticsというプラグインも上がっています。ということでやってみます。
neo4jのグラフモデルとRDFS/OWLのデータモデルの違い
Web Ontology Language(OWL)などのオントロジを変換する場合、OWLのクラスはneo4jではノードのLabelとして表現されます。また、DetatypePropertyはAttribute、ObjectProperyはRelationといった形で表現されます。グラフモデルの制約があって、厳密には変換が難しいそうですが利用にあたっては問題もないと思われます。
この辺りは、ライブラリの制作者の方が、入念に解説されています。
neosemanticsのインストール
Neo4jのサーバは立っている前提で進めます。まずはGitで対象のソースコードを取ってきて、Mavenでコンパイルします。
git clone https://github.com/jbarrasa/neosemantics.git
cd neosemantics
mvn clean package
ここで./target
以下にFatjarができるので(original-neosemanticsではないほう)、それをNeo4jのプラグインフォルダに格納します。加えてコンフィグファイルに以下を追記します。それぞれのファイルの場所はここを参照ください。再起動すると使えるようになっています。
dbms.unmanaged_extension_classes=semantics.extension=/rdf
RDF、TTL、OWLのインポート
Neo4jのサーバにアクセスして、まずは専用のインデックスを作ります。
CREATE INDEX ON :Resource(uri)
まずは適当なTrplesファイルを読み込んでみます。ここではTurtleでシリアライズされたファイルをウェブから読み込んでいます。最初の引数が対象のファイル、二番目がファイルのフォーマット、最後がそのほかのパラメータです。可能なフォーマットはTurtle, N-Triples, JSON-LD, TrG, RDF/XMLとあります。詳細は公式サイトを参照ください。
file:///~
のように記載することでNeo4jサーバ内のローカルファイルを参照することもできます。
CALL semantics.importRDF("https://www.w3.org/ns/org.ttl","Turtle",{ languageFilter: 'en' })
オントロジのインポートについては、以下のように行います。
CALL semantics.liteOntoImport("http://ifcowl.openbimstandards.org/IFC4_ADD2.ttl", "Turtle")
他にもプレビューだけしてデータベースには書き込まないsemantics.previewRDF
というコマンドがあったりします。
# 参考