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.htmlOracle 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の更新は、ワークスペース・ユーティリティのリモート・サーバーから行います。
一般のエンドポイント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アプリケーションを使って、RDFグラフの作成とSPARQLの実行を行います。
最初にRDFネットワークを作成します。呼び出すREST APIは以下です。
Create RDF network
SEM_APIS.CREATE_RDF_NETWORKの呼び出しに対応します。
https://docs.oracle.com/en/database/oracle/oracle-database/23/rdfrm/sem_apis-create_rdf_network.html
Network Nameは任意の値です。今回はNET1としています。Network Ownerは接続先のデータベース・ユーザー名(スキーマ名)を指定します。Tablespace Nameは、そのデータベース・ユーザーのデフォルト表領域を指定します。Autonomous Databaseでは表領域DATAを指定します。
ボタンCreate RDF networkをクリックすると、以下のPL/SQLコードが実行されます。REST APIの仕様にそって、API呼び出しを実施しています。レスポンスは特に加工せず、JSONのままページ・アイテムP1_RESPONSEに表示しています。
次に、作成したネットワークにモデルを作成します。Model Nameはbotchanとします。
ボタン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を指定します。
この中の同盟関係の一覧を問い合わせてみます。
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のアプリケーション作成の参考になれば幸いです。
完