2024年12月23日月曜日

Oracle RDF Graph Adaptor for Eclipse RDF4Jを構成してみる

2025年11月12日 - Oracle Adapter for Eclipse RDf4J 22.4.1(V1048830-01.zip)に更新

Oracle Databaseでは以前からRDFをサポートしています。また、Oracle Graph Server and Clientのダウンロード・ページより、Eclipse RDF4J、Apane JenaとFuseki(Protégé Desktopのプラグイン含む)のプラグインを提供しています。

TL;DR

次の記事でOracle Graph Adapterを組み込んだEclipse RDF4Jを作成するDockerfileを紹介してます。
Eclipse RDF4JにOracle Graph Adapterを組み込んだコンテナを作成する


本記事ではEclipse RDF4JにOracleのプラグインを組み込んでみます。

画面の下の方にプラグインへのリンクがあります。Oracle RDF Graph Adaptor for Eclipse RDF4Jのリンクを開きます。


Oracle RDF Graph Adaptor for Eclipse RDF4Jのリンクを開くと、Oracle Software Delivery Cloud(Oracle E-Delivery)の該当ページが開きます。Oracle Software Delivery Cloudから製品のアーカイブをダウンロードするには、Oracleプロファイルによるサインインが必要です。

2025年11月12日時点では、V1048830-01.zipに最新のOracle Adapter for Eclipse RDf4Jが含まれています。このバージョン22.4.1では、Oracle RDF Graphのスキーマ・プライベート・ネットワークを扱えます

I reviewed and accept the Oracle License Agreement.にチェックを入れ、V1048830-01.zipをダウンロードします。


Eclipse RDF4Jの実装とプラグインの組み込みは、以下のドキュメントに沿って実施します。

Graph Developer's Guide for RDF Graph8 RDF Graph, Release 26
8 RDF Graph Support for Eclipse RDF4J

Eclipse RDF4JはmacOS上のpodmanを使ってコンテナに実装します。

最初にフォルダを作成し、Eclipse RDF4Jの環境を作るのに使うファイルを配置します。

ベースの環境としてOracle Linux 8およびJava11を使います。コンテナ・イメージの作成には、以下のDockerfileを使用します。Oracleが公開しているOracleJava11のOL8向けDockerfileは要件が少し変わったため、以前に公開されていたDockerfileを元にしています。

JDK11をダウンロードします。


アーキテクチャに合わせて、ARM64かx64のどちらかのCompressed Archiveをダウンロードします。


Apache Tomcatの9をダウンロードします。


Oracle RDF Graph Adaptor for Eclipse RDF4Jのドキュメントは、作業の対象をTomcat 9.0.97にしています。また、Eclipse RDF4JではApache Tomcat (version 9.0) or Jetty (version 9.4)が推奨となっています。

RDF4J Server and Workbench
オラクルの手順にJettyはないので、Tomcatを採用します。

Tomcat 9.0.x系の最新版をダウンロードします。2025年11月12日時点では9.0.112が最新でした。ダウンロードされるファイル名はapache-tomcat-9.0.112.zipになります。


Eclipse RDF4Jをダウンロードします。

オラクルのドキュメントにはPrerequisitesとしてRDF4J 4.3.14が挙げられていますが、それはダウンロードできないので、代わりに2025年11月12日時点でのRDF4J 4.3の最終バージョンのRDF4J 4.3.16 SDK (zip)をダウンロードします。ダウンロードされるファイルはeclipse-rdf4j-4.3.16-sdk.zipです。



Oracle DatabaseのJDBCドライバとUCP(Universal Connection Pool)のドライバをダウンロードします。


接続先はOracle Database 26ai Freeを考えているので、JDK11でもサーティファイされているojdbc8-full.tar.gzをダウンロードします。


これまでにダウンロードしたV1048830-01.zipojdbc8-full.tar.gzeclipse-rdf4j-4.3.16-sdk.zipをそれぞれ解凍します。(JDK11とTomcatは解凍不要です)

unzip V1048830-01.zip
tar xvzf ojdbc8-full.tar.gz
unzip eclipse-rdf4j-4.3.16-sdk.zip

結果として、フォルダには以下のファイルが作成されます。

RDF4J % ls

apache-tomcat-9.0.112.zip ons.jar

bin oraclepki.jar

Dockerfile orai18n.jar

eclipse-rdf4j-4.3.16 Readme.txt

eclipse-rdf4j-4.3.16-sdk.zip rsi.jar

jar simplefan.jar

javadoc ucp.jar

Javadoc-Readmes V1048830-01.zip

jdk-11.0.29_linux-aarch64_bin.tar.gz xdb.jar

LICENSE.txt xmlparserv2_sans_jaxp_services.jar

ojdbc8-full.tar.gz xmlparserv2.jar

ojdbc8.jar

RDF4J % 


必要なファイルの準備ができたので、Oracle Linux 8とJDK 11を含んだコンテナ・イメージを作成します。

podman build -t eclipse-rdf4j .

RDF4J % podman build -t eclipse-rdf4j .                       

[1/2] STEP 1/8: FROM oraclelinux:8 AS builder

[1/2] STEP 2/8: LABEL maintainer="Aurelio Garcia-Ribeyro <aurelio.garciaribeyro@oracle.com>"

--> Using cache 20c1fd73b1c521e8fc84d6b19eaf6a74d88aad280d31128586d033615103a2e9

--> 20c1fd73b1c5

[1/2] STEP 3/8: RUN dnf install -y tar

--> Using cache 591cf245249392e4abee5afe40f9cc94cfb49fc300e7b95575f34ee8e44fd859

--> 591cf2452493

[1/2] STEP 4/8: ENV LANG en_US.UTF-8

--> Using cache 4b987187b0aa50d678fee49bc6427f31493f88a3653a2cb73894c02bb6fb8002

--> 4b987187b0aa

[1/2] STEP 5/8: ENV JAVA_HOME=/usr/java/jdk-11

--> Using cache 7c106ce1b78d37eacc96dbaccef2a1852ab9a417e49b33112599427477faf491

--> 7c106ce1b78d

[1/2] STEP 6/8: COPY *.tar.gz /tmp/

--> Using cache ecf0d77276bb428cff63e9a9483888a01bf0b5b6f515336a9bdacf0d9b530fc1

--> ecf0d77276bb

[1/2] STEP 7/8: SHELL ["/bin/bash", "-o", "pipefail", "-c"]

--> Using cache c139524f091c84958fe357697ac8147af08486413d0e272a7a414d2678b7661b

--> c139524f091c

[1/2] STEP 8/8: RUN set -eux;     ARCH="$(uname -m)" &&     if [ "$ARCH" = "x86_64" ];     then     mv "$(ls /tmp/jdk-11*_linux-x64_bin.tar.gz)" /tmp/jdk.tar.gz ;     else     mv "$(ls /tmp/jdk-11*_linux-aarch64_bin.tar.gz)" /tmp/jdk.tar.gz ;     fi &&     mkdir -p "$JAVA_HOME";     tar --extract --file /tmp/jdk.tar.gz --directory "$JAVA_HOME" --strip-components 1

--> Using cache 705129c2b392aaab8890e6b7b64307985824227f44ff0618815a8b3c7c5be171

--> 705129c2b392

[2/2] STEP 1/7: FROM oraclelinux:8

[2/2] STEP 2/7: ENV LANG en_US.UTF-8

--> Using cache 3c9aed82232a0d4fea8b8643a42bf61575a15f8eb9dab83a53a3558801de4e32

--> 3c9aed82232a

[2/2] STEP 3/7: ENV JAVA_HOME=/usr/java/jdk-11

--> Using cache 8bcf0430ed2ca6f4506b22e3798a0e2b9049910e935c8bc2651c2eda9ace98c7

--> 8bcf0430ed2c

[2/2] STEP 4/7: ENV PATH $JAVA_HOME/bin:$PATH

--> Using cache 4d4e7817dda41cbc783074f4a683f149df0115367671eba491d63e9db23cdac5

--> 4d4e7817dda4

[2/2] STEP 5/7: COPY --from=builder $JAVA_HOME $JAVA_HOME

--> Using cache 9e980fb35565702fa1a5cca1a37b1bc918d1d399a1ba4e8d22ac860791af52b4

--> 9e980fb35565

[2/2] STEP 6/7: RUN set -eux;     dnf -y update;     dnf install -y         freetype fontconfig         unzip     ;     rm -rf /var/cache/dnf;     ln -sfT "$JAVA_HOME" /usr/java/default;     ln -sfT "$JAVA_HOME" /usr/java/latest;     for bin in "$JAVA_HOME/bin/"*; do         base="$(basename "$bin")";         [ ! -e "/usr/bin/$base" ];         alternatives --install "/usr/bin/$base" "$base" "$bin" 20000;     done;     java -Xshare:dump;

--> Using cache 58984da55c332b36b6aedc13cd2f18e7811a7f52767b2f2282e48f71fcbd7c49

--> 58984da55c33

[2/2] STEP 7/7: CMD ["sh"]

--> Using cache f7c8eae69b9403b94a470a5a7e2d38642699a18415486b5cc17c25838a7777be

[2/2] COMMIT eclipse-rdf4j

--> f7c8eae69b94

Successfully tagged localhost/eclipse-rdf4j:latest

Successfully tagged localhost/oracle-jena:latest

f7c8eae69b9403b94a470a5a7e2d38642699a18415486b5cc17c25838a7777be

RDF4J % 


コンテナを作成し実行します。コンテナ内からソフトウェアのインストールに使用するアーカイブが参照できるように、カレント・ディレクトリを/opt/oracleにマップします。また、Tomcatはデフォルトの8080番ポートで接続の待ち受けをするので、8080をホスト・ポートにマップします。

echo "exit" | podman run --name oracle-rdf4j -i -p 8080:8080 -v `pwd`:/opt/oracle eclipse-rdf4j
podman start oracle-rdf4j


RDF4J % echo "exit" | podman run --name oracle-rdf4j -i -p 8080:8080 -v `pwd`:/opt/oracle eclipse-rdf4j

RDF4J % podman start oracle-rdf4j

oracle-rdf4j

RDF4J % 


コンテナに接続しTomcatをインストールします。

podman exec -it oracle-rdf4j bash

% podman exec -it oracle-rdf4j bash

[root@7b1616c7fb95 /]# 


Tomcatを/opt以下に展開し、/opt/tomcatからアクセスできるようにシンボリックリンクを作成します。

unzip -d /opt /opt/oracle/apache-tomcat-9.0.112.zip
ln -s /opt/apache-tomcat-9.0.112 /opt/tomcat

[root@8664e23f7c9a /]# unzip -d /opt /opt/oracle/apache-tomcat-9.0.112.zip

Archive:  /opt/oracle/apache-tomcat-9.0.112.zip

   creating: /opt/apache-tomcat-9.0.112/

   creating: /opt/apache-tomcat-9.0.112/bin/

   creating: /opt/apache-tomcat-9.0.112/conf/

   creating: /opt/apache-tomcat-9.0.112/lib/

   creating: /opt/apache-tomcat-9.0.112/logs/

   creating: /opt/apache-tomcat-9.0.112/temp/

   creating: /opt/apache-tomcat-9.0.112/webapps/

   creating: /opt/apache-tomcat-9.0.112/webapps/ROOT/

   creating: /opt/apache-tomcat-9.0.112/webapps/ROOT/WEB-INF/

   creating: /opt/apache-tomcat-9.0.112/webapps/docs/

   creating: /opt/apache-tomcat-9.0.112/webapps/docs/META-INF/

   creating: /opt/apache-tomcat-9.0.112/webapps/docs/WEB-INF/


[中略]


  inflating: /opt/apache-tomcat-9.0.112/webapps/manager/WEB-INF/web.xml  

  inflating: /opt/apache-tomcat-9.0.112/webapps/manager/css/manager.css  

  inflating: /opt/apache-tomcat-9.0.112/webapps/manager/images/asf-logo.svg  

  inflating: /opt/apache-tomcat-9.0.112/webapps/manager/images/favicon.ico  

  inflating: /opt/apache-tomcat-9.0.112/webapps/manager/images/tomcat.svg  

  inflating: /opt/apache-tomcat-9.0.112/webapps/manager/index.jsp  

  inflating: /opt/apache-tomcat-9.0.112/webapps/manager/status.xsd  

  inflating: /opt/apache-tomcat-9.0.112/webapps/manager/xform.xsl  

[root@8664e23f7c9a /]# ln -s /opt/apache-tomcat-9.0.112 /opt/tomcat

[root@8664e23f7c9a /]# 


bin/catalina.sh
に実行フラグを立てます。

cd /opt/tomcat
chmod a+x bin/catalina.sh

[root@7b1616c7fb95 tomcat]# cd /opt/tomcat

[root@7b1616c7fb95 tomcat]# chmod a+x bin/catalina.sh

[root@7b1616c7fb95 tomcat]# 


マネージャ・アプリケーションにアクセスするユーザーadminを有効にします。conf/tomcat-users.xmlを修正します。

コメントアウトされた以下の部分を変更します。

<!--

  <user username="admin" password="<must-be-changed>" roles="manager-gui"/>

  <user username="robot" password="<must-be-changed>" roles="manager-script"/>

-->


以下のようにコメントアウトを解除し、<must-be-changed>の部分にパスワードを記載します。

  <user username="admin" password="********" roles="manager-gui"/>

  <user username="robot" password="********" roles="manager-script"/>


webapps以下にマネージャ・アプリケーションなどが含まれています。デフォルトでは同じホストからのアクセスに制限されています。Tomcatはコンテナで実行され、ホストマシンで実行されたブラウザは、同じマシンとは認識されません。そのため、アクセス制限を解除します。

webapps/manager/META-INF/context.xmlの以下のValveの部分を削除します。

<Context antiResourceLocking="false" privileged="true" >

  <CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"

                   sameSiteCookies="strict" />

  <Valve className="org.apache.catalina.valves.RemoteAddrValve"

         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />

  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>

</Context>


修正後は以下のようになります。

<Context antiResourceLocking="false" privileged="true" >

  <CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"

                   sameSiteCookies="strict" />

  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>

</Context>


その他のアプリケーション、docsexampleshost-managerからも、同様にcontext.xmlよりアクセス制限の部分を削除します。

RDF4J-ServerおよびRDF4J-Workbenchは、Tomcatのマネージャ画面よりwarファイルをアップロードしてデプロイします。これらのRDF4Jのwarファイルのサイズが大きく、デフォルトのアップロード制限を超えています。そのため、Tomcatのマネージャが受け付けるwarファイルのファイル制限を変更します。


マネージャ設定ファイルwebapps/manager/WEB-INF/web.xmlを開き、max-file-sizemax-request-size104857600に変更します。

以下の記述を変更します。

    <multipart-config>

      <!-- 50 MiB max -->

      <max-file-size>52428800</max-file-size>

      <max-request-size>52428800</max-request-size>

      <file-size-threshold>0</file-size-threshold>

    </multipart-config>


変更後の記述です。

    <multipart-config>

      <!-- 100 MiB max -->

      <max-file-size>104857600</max-file-size>

      <max-request-size>104857600</max-request-size>

      <file-size-threshold>0</file-size-threshold>

    </multipart-config>


以上でTomcatの準備は完了です。Tomcatを起動します。

sh bin/startup.sh

[root@7b1616c7fb95 tomcat]# sh bin/startup.sh

Using CATALINA_BASE:   /opt/tomcat

Using CATALINA_HOME:   /opt/tomcat

Using CATALINA_TMPDIR: /opt/tomcat/temp

Using JRE_HOME:        /usr/java/jdk-11

Using CLASSPATH:       /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar

Using CATALINA_OPTS:   

Tomcat started.

[root@7b1616c7fb95 tomcat]# 


ホストのブラウザよりTomcatにアクセスします。


ホーム画面が開いたら、Manager Appにアクセスします。


マネージャ・アプリからWARファイルの配備を行います。

配備するRDF4Jのwarファイルは、eclipse-rdf4j-4.3.16-sdk.zipを解凍して作成されたeclipse-rdf4j-4.3.16のディレクトリ以下のwar以下にあるrdf4j-server.warおよびrdf4j-workbench.warです。

最初にrdf4j-server.warを選択し、配備をクリックします。


続いてrdf4j-workbench.warを選択し、配備をクリックします。


以上でrdf4j-serverとrdf4j-workbenchのデプロイは完了です。RDF4J-Workbenchにアクセスしてみます。



Eclipse RDF4Jのインストールは以上で完了です。

続けて、Oracle RDF Graph Adapter for Eclipse RDF4Jの構成します。

コンテナoracle-rdf4jでの作業に戻ります。

/opt/tomcat/conf/context.xmlにデータソースを追加します。JDBC DriverかUCPのどちらかを選ぶことができるようですが、個人で使うレベルなのでJDBC Driverを選びました。

以下を追加しました。

接続ユーザーはAPEXのワークスペース・スキーマを想定しWKSP_APEXDEV、接続するデータベースはホストの1521ポートに接続することを想定しているため、host.containers.internalを接続先にしています。

<Context>


    <!-- Default set of monitored resources. If one of these changes, the    -->

    <!-- web application will be reloaded.                                   -->

    <WatchedResource>WEB-INF/web.xml</WatchedResource>

    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>

    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>


    <!-- Uncomment this to disable session persistence across Tomcat restarts -->

    <!--

    <Manager pathname="" />

    -->

    <Resource name="jdbc/OracleSemDS" auth="Container"

       driverClassName="oracle.jdbc.OracleDriver"

       factory="oracle.jdbc.pool.OracleDataSourceFactory"

       scope="Shareable"

       type="oracle.jdbc.pool.OracleDataSource"

       user="wksp_apexdev" 

       password="*******" 

       url="jdbc:oracle:thin:@host.containers.internal:1521/freepdb1"

       maxActive="100"

       minIdle="15"

       maxIdel="15"

       initialSize="15"

       removeAbandonedTimeout="30"

       validationQuery="select 1 from dual"

    />

</Context>


/opt/tomcat/lib以下にojdbc8.jarucp.jarをコピーします。

cp /opt/oracle/ojdbc8.jar /opt/tomcat/lib/
cp /opt/oracle/ucp.jar /opt/tomcat/lib/


[root@9f6375d64858 tomcat]# cp /opt/oracle/ojdbc8.jar /opt/tomcat/lib/

[root@9f6375d64858 tomcat]# cp /opt/oracle/ucp.jar /opt/tomcat/lib/

[root@9f6375d64858 tomcat]# 


ドキュメントの8.3.1 Setting up Oracle RDF Graph Adapter for Eclipse RDF4J for Use with Javaのステップ6では、JSON-LDを使用する場合はhttpclient-4.5.14.jarなどのライブラリの追加が必要と記載されています。これらのライブラリは/opt/oracle/eclipse-rdf4j-4.3.16/lib/に含まれていますが、今回はこの手順はスキップします。JSON-LDを使用する場合は、ライブラリの追加が必要と思われます。また、ステップ5ではlog4jなどのライブラリが必要と記載されていますが、IDEでの利用に限定されているようなので、ステップ5についてもスキップします。

/opt/oracle/jar以下にあるoracle-rdf4j-adapter-4.3.14-20250106.jarsdordf-client-23.6.0-20241122.jarsdordf-23.6.0-20241122.jarsdoutl-23.6.0-20241122.jarを、rdf4j-serverおよびrdf4j-workbenchWEB-INF/lib以下にコピーします。

cp /opt/oracle/jar/* /opt/tomcat/webapps/rdf4j-server/WEB-INF/lib/
cp /opt/oracle/jar/* /opt/tomcat/webapps/rdf4j-workbench/WEB-INF/lib/

[root@8664e23f7c9a jar]# cp /opt/oracle/jar/* /opt/tomcat/webapps/rdf4j-server/WEB-INF/lib/

[root@8664e23f7c9a jar]# cp /opt/oracle/jar/* /opt/tomcat/webapps/rdf4j-workbench/WEB-INF/lib/

[root@8664e23f7c9a jar]# 


ステップ5にあるcreate-oracle.xslをコピーし、/opt/tomcat/webapps/rdf4j-workbench/transformations/create-oracle.xslとして作成します。

次にステップ6にあるcreate.xslをコピーし/opt/tomcat/webapps/rdf4j-workbench/transformations/create.xslを更新します。

以上でRDF4J-WorkbenchへのOracle RDF Graph Adapter for Eclipse RDF4Jの組み込みは完了です。

Tomcatを再起動し、動作を確認します。

sh bin/shutdown.sh
sh bin/startup.sh

[root@9f6375d64858 tomcat]# sh bin/shutdown.sh

Using CATALINA_BASE:   /opt/tomcat

Using CATALINA_HOME:   /opt/tomcat

Using CATALINA_TMPDIR: /opt/tomcat/temp

Using JRE_HOME:        /usr/java/jdk-11

Using CLASSPATH:       /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar

Using CATALINA_OPTS:   

NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED

[root@9f6375d64858 tomcat]# sh bin/startup.sh

Using CATALINA_BASE:   /opt/tomcat

Using CATALINA_HOME:   /opt/tomcat

Using CATALINA_TMPDIR: /opt/tomcat/temp

Using JRE_HOME:        /usr/java/jdk-11

Using CLASSPATH:       /opt/tomcat/bin/bootstrap.jar:/opt/tomcat/bin/tomcat-juli.jar

Using CATALINA_OPTS:   

Tomcat started.

[root@9f6375d64858 tomcat]# 


RDF4Jの接続先であるデータベースで、RDFネットワークとしてLOCALNETを作成します。
begin
    sem_apis.create_rdf_network(
        tablespace_name => 'USERS'
        ,network_owner  => 'WKSP_APEXDEV'
        ,network_name   => 'LOCALNET'
    );
end;
/

SQL> begin

  2      sem_apis.create_rdf_network(

  3          tablespace_name => 'USERS'

  4          ,network_owner  => 'WKSP_APEXDEV'

  5          ,network_name   => 'LOCALNET'

  6      );

  7  end;

  8* /


PL/SQLプロシージャが正常に完了しました。


SQL> 


RDF4J Workbechにアクセスします。


New repositoryを開き、Typeの選択にOracleが含まれていることを確認します。

Oracleを選択します。


TypeOracleを選択し、IDtestTitletestを入力しNextをクリックします。


Oracleのリポジトリの設定画面が開きます。

Model NameARTICLENetwork OwnerWKSP_APEXDEVNetwork Nameに先ほど作成したLOCALNETを指定します。

以上でCreateをクリックします。


Oracle Repositoryとしてtestが作成されます。これは、Oracle DatabaseのRDFネットワークLOCALNETに作成されたモデルARTICLEが、リポジトリの実体になります。


Oracle Repositoryの構成に問題がある場合、今までの手順で環境を作成しているとRDF4J-Serverのログは以下に出力されます。エラーなどが発生したときの解析の役に立ちます。

/root/.RDF4J/server/logs/main.log

簡単な動作確認を行います。

ChatGPTのGPT-5に以下のプロンプトでRDFのTTLファイルを作成してもらいました。

「日本の民話のカチカチ山の登場人物とその関係を表すRDFをTTLで作成して。」

以下のファイルが生成されました。


このファイルをリポジトリにアップロードします。

ModifyAddを開き、Select the file containing the RDF data you wish to uploadチェックを入れます。

ファイル選択でダウンロードしたTTLファイルカチカチ山.ttlを選択し、Uploadをクリックします。


145行のステートメントと1つのコンテキストが読み込まれます。

たぬきの仇を検索します。このSPARQL問合せもGPT-5に生成してもらいました。
PREFIX :      <https://example.org/kachikachi#>
PREFIX rdfs:  <http://www.w3.org/2000/01/rdf-schema#>

SELECT DISTINCT ?avenger ?label_ja ?label_en
WHERE {
  # 「仇」= 老婆の仇討ちをし、かつ狸に報復を与えた主体
  ?avenger :avenges :OldWoman .
  ?avenger (:burns|:drowns|:tricks) :Tanuki .

  OPTIONAL { ?avenger rdfs:label ?label_ja FILTER (lang(?label_ja) = "ja") }
  OPTIONAL { ?avenger rdfs:label ?label_en FILTER (lang(?label_en) = "en") }
}
ExploreのQueryを開き、上記のSPARQLを記述して実行します。


兎と兎が狸に与えた報復が検索されました。


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