投稿

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

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 表現例を図を中心に概観しました。 簡単な来歴の図は手作業で書くこともできますが(前回の記事は手作業で書きました)、データが複雑になると手作業で書くのは無理です。 これは作図作業に時間がかかる、というだけでなく、誤りのもとになります。 そこで本記...

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 プロパティが定義されている云々とありますので、非常に多くの語彙が定義されていることが分かります。 これらを全て見ていくのは大変ですが、これらは無秩序に定義されているわけではなく、体系立...

Schema.org の語彙で RDFS 推論してみる(1):準備

イメージ
本記事ではWebから得られる現実の簡単なデータを例に、ツールを使って SemanticWeb 技術(特に情報統合や推論)を概観します。 【目次】 [1]はじめに [2]Webから取得したJSON-LDをRDFLibで利用する (1)RDFLibへ読み込むコードの準備 (2)実行して結果を可視化してみる (3)SPARQLを使った検索例 [3]ここまでのまとめ:推論に向けて [1]はじめに 以前の記事で、Webページに埋め込まれたJSON-LDファイルをRDFLibに読み込むところまで見ました。 しかし JSON-LD は、「そもそも扱いやすいJSON形式なのだから、JSONとして扱えば十分じゃない?」といわれれば、(特定の構造を扱うだけなら、)それはその通りです。 一方で、多くのWebサイトから情報を収集して、様々な再利用を考えるなら(多様なデータを扱うなら)、その考え方はかなり面倒なことも背負うことになります。 具体的には、Schema.org の語彙を使ってマークアップされた JSON-LD を扱うとしても、本記事の執筆時点で、Schema.org のサイトによると797のクラス、1453のプロパティが定義されているようです。 Wikipediaやブログの記事だけではなく、レストランや観光地の情報、イベントや求人その他、多様な情報が Web にはあふれています。 そして時代に応じて Schema.org の語彙は増えていきますし、それに伴って多様性も増していきます。 しかも、Web コンテンツに含まれる JSON-LD に記載される内容は、Web コンテンツ制作側が決めるものなので、開発側がコントロールできるものではありません。 こうなってくると、与えられた情報構造を直接解釈する方式で対応するのは厳しいと思います。(厳密なスキーマに基づく手法は厳しくなってくると思います。) これに対して、与えられた情報構造をそのまま扱うのではなく、もう少しメタレベルの構造を基礎として多様な情報に対応していくアプローチが考えられます。 そのような技術に SemanticWeb があります。 Wikipedia: セマンティック・ウェブ SemanticWeb 技術も『銀の弾』ではないと思いますが、シナリオによっては非常に有効な技...