LoginSignup
10
9

More than 5 years have passed since last update.

Neo4jでRDF, オントロジを扱う

Posted at

一般的に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のプラグインフォルダに格納します。加えてコンフィグファイルに以下を追記します。それぞれのファイルの場所はここを参照ください。再起動すると使えるようになっています。

neo4j.conf
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' })

こんな感じで可視化ができます。
graph.png

オントロジのインポートについては、以下のように行います。
CALL semantics.liteOntoImport("http://ifcowl.openbimstandards.org/IFC4_ADD2.ttl", "Turtle")

他にもプレビューだけしてデータベースには書き込まないsemantics.previewRDFというコマンドがあったりします。

 参考

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9