投稿

ラベル(Semantic Web)が付いた投稿を表示しています

Oxigraph を利用して RDFLib の SPARQL クエリを高速化してみる

本記事は Python から RDFLib 経由で Oxigraph を利用する方法のメモです。 【目次】 [1]はじめに [2]Oxigraph、Pyoxigraph、Oxrdflib について [3]利用方法など (1)ライブラリのインストール (2)RDFLib から SPARQL を実行するコード例 [4]感想など [1]はじめに Python で RDF データを処理しようとするとき最初の選択肢は RDFLib だと思います。 rdflib https://rdflib.readthedocs.io/en/stable/# RDFLib はネットに沢山情報があるし、実績もあります。個人的には Google Colaboratory で手軽に使えることが気に入っています。 しかし、トリプル数が少なく、単純な SPARQL クエリを実行するだけなら気になりませんが、それなりに多いデータに対して複雑な SPARQL クエリを実行しようとすると、パフォーマンスが気になることが多いです。 このようなケースは、Apache Jena とか Fuseki を利用すれば素晴らしいパフォーマンスを発揮するので速度面は解決することができます。 Apache Jena https://jena.apache.org/ しかし、対話環境で利用したいとか、SPARQL クエリの実行結果を Pandas に挿入して云々のような、Python ならではの利点を生かそうとすると、環境構築やプラグラミング環境を含めて考えると、あまりお手軽とは言えません。(少なくとも Google Colaboratory 上でお手軽に使うという感覚ではありません。) そこで、Colaboratory 上で動作する Python のライブラリで、RDF ファイルを読み書きでき、 SPARQL クエリが高速に動作するライブラリは無いものかと探してみたところ、Oxigraph を見つけました。 ありがたいことに、Oxigraph は RDFLib のプラグインが提供されており、RDFLib を利用したコードを殆ど変更することなく、内部では OxiGraph を動作させることが可能です。(つまり、RDFLib の API で Oxigraph を使える。) そこで、本...

Python で W3C PROV オントロジーを可視化する(Python PROV)

イメージ
本記事では Python の prov パッケージを利用して、PROV 情報を可視化する方法を見ていきます。 【目次】 [1]はじめに [2]Prov Python package の利用 (1)Prov Python package のインストール (2)PROV-N の概要 (3)Python で PROV 情報を作成する [3]可視化してみる (1)Graphviz、pydot のインストール (2)図(画像)をPNG ファイルとして出力する (3)属性の追加と日本語表示 [4]RDFファイルを読み込んで可視化する (1)PROV 情報を RDF ファイルとして保存する (2)RDFファイルから読み込んで可視化する [1]はじめに W3C PROV オントロジーを利用すると、物事の来歴情報を記述することができます。 PROV 仕様は来歴表現に関するデータモデルやシリアライズフォーマットが定義されていますので、機械可読な来歴情報を表現できます。 PROV-Overview An Overview of the PROV Family of Documents https://www.w3.org/TR/prov-overview/ ただし、一般に、形式的な表現のままでは人間が理解しやすいとは限りません。 これは PROV の仕様が複雑という意味ではなく、人間は、情報量が多くなると全体像を把握しづらくなるということかと思います。 これに対して PROV の表現を可視化(図示)するための推奨事項が公開されています。 PROV Graph Layout Conventions https://www.w3.org/2011/prov/wiki/Diagrams このような PROV 情報の可視化を行えば、全体像を把握しやすくなると思います。 前回の記事『 Git2PROV を例に W3C PROV オントロジー表現の基本を知る 』では、Git のコミット履歴に関する PROV 表現例を図を中心に概観しました。 簡単な来歴の図は手作業で書くこともできますが(前回の記事は手作業で書きました)、データが複雑になると手作業で書くのは無理です。 これは作図作業に時間がかかる、というだけでなく、誤りのもとになります。 そこで本記...

Git2PROV を例に W3C PROV オントロジー表現の基本を知る

イメージ
本記事では、W3Cが勧告している PROV オントロジーの表現方法を Git2PROV ツールを例にみていきます。 【目次】 [1]はじめに [2]PROV とは (1)PROVの基本概念 (2)簡単な補足 (3)PROV のシリアライズ形式 (4)PROV グラフの可視化について (5)拡張仕様について [3]Git のコミット履歴を PROV で表現する (1)Git2PROV (2)ファイルのバージョン1をコミットしたとき (3)ファイルのバージョン2をコミットしたとき (4)より詳細な Git のモデルや応用など [4]Git2PROVを実際に動かしてみる (1)インストール (2)ローカルサーバで実行 (3)コマンドラインから実行 [1]はじめに ネットで様々な情報が簡単かつ大量に得られるようになりました。 それはそれで良いのですが、同時に得られた情報が信用できる情報かどうかの判断も難しくなってきました。 昨今の生成系 AI などの事情を考えると、この傾向はますます進むような気がしますが、そもそも今まで何を根拠に「信頼」とか「信用」していたのか?と考えていくと、意外に根拠が薄そうな気がして、少々不安になります(笑)。 それはともかく、信用できる情報かどうかの判断基準として、データの来歴あるいは起源をみることは多いと思います。 W3C は、このような来歴あるいは起源を記述するための仕様である PROV を2013年に勧告しています。 PROV-Overview An Overview of the PROV Family of Documents https://www.w3.org/TR/prov-overview/ 崇高な概念をここで語ることはできませんが、来歴や起源をたどれるデータの表現方法は、一般のアプリ作成においても役立つことが多いと思いますので、本記事では、この PROV による情報の来歴あるいは起源に関する表現をみてみます。 ところで PROV 仕様をざっと概観するには、(英語ですが)以下のドキュメントが最適だと思います。 PROV Model Primer https://www.w3.org/TR/prov-primer/ 一方、本記事では開発者にとって身近な Git のコミット情報を PRO...

Schema.org の語彙で RDFS 推論してみる(3):OWL-RL で推論

イメージ
本記事では、OWL-RL、SPARQL/RDFLib、Schema.org 語彙定義を利用して検索や推論を行います。 【目次】 [1]はじめに [2]語彙定義の一部で試してみる (1)Schema.org 語彙定義の一部を抜き出す (2)語彙定義を追加して可視化してみる (3)SPARQL で検索してみる [3]OWL-RL で推論 (1)ここで扱う推論とは:RDF(S) entailment (2)OWL-RL をインストール (3)推論を実行して可視化してみる (4)SPARQL で検索してみる [4]Schema.org 語彙定義を利用した推論や検索 [1]はじめに 本記事は、記事『 Schema.org の語彙で RDFS 推論してみる(2):機械可読な語彙定義ファイル 』の続き(第3回)です。 前回の記事では、Schema.org が提供する RDFS ベースの語彙定義を概観して、Python ライブラリ RDFLib に読み込む方法を見ました。 本記事では、Schema.org の語彙定義を利用した検索や推論を簡単に見ていきます。 なお、本記事では Google Colaboratory + RDFLib で動作を見てきましたので、RDFS 推論には、同じ環境で利用できる OWL-RL を利用します。 第1回 準備 第2回 機械可読な語彙定義ファイル 第3回 OWL-RL で推論 [2]語彙定義の一部で試してみる (1)Schema.org 語彙定義の一部を抜き出す 前回の記事で Schema.org の概念階層を中心に概観し、RDFS ベースの機械可読な定義ファイルもダウンロードできることを見ました。 以降では、これを用いた推論などを見ていきますが、Schema.org の語彙定義には多くの内容が含まれていますので、推論などによって情報がどのように変化するかを具体的に確認したいときは大変です。 そこで動きを確認しやすいように、Schema.org の語彙定義から抜粋した小さな語彙定義を作って見ていく事にします。 ここでは、第1回の記事で取得したデータに現れる概念(タイプ、クラス)について、階層関係(サブクラス関係)に絞って見てみます。 具体的には、以下の概念が出現していました。 Article Orga...

Schema.org の語彙で RDFS 推論してみる(2):機械可読な語彙定義ファイル

イメージ
本記事では Schema.org が提供する RDFS ベースの語彙定義を概観します。 【目次】 [1]はじめに [2]Schema.org の RDFS 語彙定義を概観してみる [3]機械可読な語彙定義ファイルのダウンロード [4]「http」と「https」の混在 (1)JSON-LD のコンテキストを表すURL (2)語彙の IRI (3)雑感 [5]RDFS定義ファイルをRDFLibに読み込んでみる [6]参考:JSON-LDをhttps語彙でRDFLibに読み込む例 [1]はじめに 本記事は、記事『 Schema.org の語彙で RDFS 推論してみる(1):準備 』の続き(第2回)です。 前回の記事で、Schema.org の語彙を使って記述されている Web コンテンツに埋め込まれた JSON-LD を、RDF を扱える Python ライブラリ RDFLib に読み込んで、RDFの可視化や情報抽出の例を見ました。 ところで、Schema.org は RDFS ベースの語彙定義ファイルを提供しており、これを利用すると、さらに進んだ情報利用が可能になります。 そこで本記事では、Schema.org が提供する語彙定義を概観しておきます。 第1回 準備 第2回 機械可読な語彙定義ファイル 第3回 OWL-RL で推論 [2]Schema.org の RDFS 語彙定義を概観してみる Schema.org では、多くの語彙を定義しています。ここでいう語彙とは主に、概念(タイプ、クラス)とそれらの関係です。 (注意)本記事で用いている語彙や概念、タイプ、クラス、関係、プロパティなどの用語は、RDFやOWLの定義に従って厳密に使い分けているわけではありません。 まずはブラウザを利用して、Schema.org がどのような語彙を定義しているのか概観してみます。 Organization of Schemas https://schema.org/docs/schemas.html これによると、現在 797タイプ、1453 プロパティが定義されている云々とありますので、非常に多くの語彙が定義されていることが分かります。 これらを全て見ていくのは大変ですが、これらは無秩序に定義されているわけではなく、体系立...