2025年6月3日火曜日

Oracle REST Data ServicesのRDF Graph APIを呼び出してSPARQLを実行する

Oracle Databaseは以前からRDF Graphをサポートしています。RDF Graphに関するOracle Database 23aiのドキュメントとして、以下が提供されています。

Graph Developer's Guide for RDF Graph, Release 23

このドキュメントのPart IIにRDF Graph Serverが紹介されています。しかし、RDF Graph Serverのダウンロード・ページとして以下が示されていますが、RDF GraphについてはEclipse RDF4Jのアダプタのみがダウンロード可能で、RDF Graph Serverは含まれていません。

RDF Graph Serverはどうなったのか不明だったのですが、ユーザー・インターフェース(Query UI)を除いた機能は、Oracle REST Data Servicesに実装されていました。

Oracle REST Data Services 23.4からOracle REST Data Services APIにRDF Graphが追加されています。
https://docs.oracle.com/en/database/oracle/oracle-rest-data-services/25.1/orrst/api-rdf-graph.html

Oracle APEXを実行するにあたってOracle REST Data Servicesは必須のコンポーネントなので、APEXの環境があればSPARQLも実行できます。SPARQLからSQLへの変換はORDSで実施しているようで、オラクル・データベースでJavaVMを有効にしなくても(Autonomous DatabaseではJavaVMはデフォルトで無効です)、SPARQLを実行できます。ただし、APEXからSPARQLを実行するには、データベースからHTTPリクエストを発行してORDSを呼び出す必要があります。

今回はOracle REST Data ServicesのRDF Graph APIを呼び出すAPEXアプリケーションを作成し、SPARQLクエリを実行します。


このAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/sparql-operations.zip

アプリケーションはページ・アイテムに設定した値を引数として、ボタンのクリックでREST APIを呼び出す簡単な作りになっています。

このAPEXアプリケーションをインポートすると、Web資格証明としてRDF Graph Credリモート・サーバーとしてRDF Graph ORDS Endpointが作成されます。このアプリケーション内でRDF Graph APIを呼び出す際に使用するWeb資格証明およびエンドポイントになります。


アプリケーションのインストール後にワークスペース・ユーティリティリモート・サーバーおよびWeb資格証明を開いて、これらの設定値を更新する必要があります。

リモート・サーバーRDF Graph ORDS Endpointの更新は、ワークスペース・ユーティリティリモート・サーバーから行います。


リモート・サーバーのRDF Graph ORDS Endpointを開きます。


一般エンドポイントURLを更新します。今回はAutonomous Databaseを対象にRDFグラフの保存とSPARQLの実行を行うため、エンドポイントURLは以下のようになります。

https://[Webアクセス(ORDS)パブリックURL]/[ORDS別名]/_/db-api/stable


Webアクセス(ORDS)パブリックURLは、OCIコンソールのAutonomous Databaseのツール構成から確認できます。


続けてワークスペース・ユーティリティWeb資格証明を開きます。


Web資格証明RDF Graph Credを開きます。


REST APIは、RDFグラフを保存しているスキーマ名とそのパスワードを与えることによって認証します。Autonomous DatabaseでAPEXを使用している場合は、一般にワークスペース名をAPEXDEVとした場合、ORDS別名=ワークスペース名でapexdevとなります。そのワークスペースのデフォルト・パーシング・スキーマはWKSP_APEXDEVになります。これがデータベースのユーザー名になり、このユーザー名およびパスワードWeb資格証明に設定します。


以上で、インポートしたAPEXアプリケーションを利用する準備は完了です。

このAPEXアプリケーションを使って、RDFグラフの作成とSPARQLの実行を行います。

最初にRDFネットワークを作成します。呼び出すREST APIは以下です。

Create RDF network

SEM_APIS.CREATE_RDF_NETWORKの呼び出しに対応します。

Network Nameは任意の値です。今回はNET1としています。Network Ownerは接続先のデータベース・ユーザー名(スキーマ名)を指定します。Tablespace Nameは、そのデータベース・ユーザーのデフォルト表領域を指定します。Autonomous Databaseでは表領域DATAを指定します。


ボタンCreate RDF networkをクリックすると、以下のPL/SQLコードが実行されます。REST APIの仕様にそって、API呼び出しを実施しています。レスポンスは特に加工せず、JSONのままページ・アイテムP1_RESPONSEに表示しています。



次に、作成したネットワークにモデルを作成します。Model Namebotchanとします。

ボタンCreate RDF modelをクリックすると以下のコードを実行します。呼び出すREST APIは以下になります。

Create RDF model

SEM_APIS.CREATE_RDF_GRAPHの呼び出しに対応します。



RDFネットワークとモデル(グラフ)が作成できました。SPARQLのINSERT文を実行します。

小説「坊ちゃん」の登場人物の関係データを投入します。以下のコードはClaude Sonnet 4に生成してもらいました。

ボタンExecute SPARQL Updateをクリックすると、以下のコードが実行されます。呼び出すREST APIは以下になります。

Execute a SPARQL query or update

ORDS上でSQLに変換されデータベースではSQLが実行されるため、対応するデータベースのAPIはありません。REST API呼び出し時のContent-Typeとして、application/sparql-updateを指定します。



小説「坊ちゃん」の登場人物に関するSPARQLクエリを実行してみます。以下がSPARQLクエリのサンプルです。これもClaude Sonnet 4に生成してもらいました。


この中の同盟関係の一覧を問い合わせてみます。
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX botchan: <http://example.org/botchan/>
PREFIX vocab: <http://example.org/vocabulary/>

# 同盟関係の一覧
SELECT ?person1 ?name1 ?person2 ?name2
WHERE {
  ?person1 vocab:同盟関係 ?person2 ;
           rdfs:label ?name1 .
  ?person2 rdfs:label ?name2 .
}
ボタンExecute SPARQL Queryをクリックすると、以下のコードが実行されます。REST APIのエンドポイントはUpdateと同じですが、Content-Typeとしてapplication/sparql-queryを指定しています。また、Acceptにapplication/sparql-results+jsonを指定することで、レスポンスをJSON形式で受け取っています。



野だいこと赤シャツが同盟関係にあるとのことです。

以上で、ORDSのRDF Graph APIを呼び出すことにより、RDFグラフの作成および検索ができることを確認できました。

今回の記事は以上になります。

Oracle APEXのアプリケーション作成の参考になれば幸いです。