2025年1月6日月曜日

RDF Graph Support for Apache Jenaを使ってみる

2025年11月11日 - 21.1.8_Oracle19c_Jena-3.12.0(V1052173-01.zip)に更新

今回の記事ではRDF Graph Support for Apache Jenaのセットアップ方法を確認します。参照するドキュメントは以下です。

RDFグラフのグラフ開発者ガイド Release 23
7 RDF Graph Support for Apache Jena
https://docs.oracle.com/cd/G11854_01/rdfrm/rdf-graph-support-apache-jena.html

Oracle Graph Server and Clientのダウンロード・ページにあるOracle Graph - Support Adaptors and Pluginsを開きます。


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

2025年11月11日時点では、V1052173-01.zip - 21.1.8_Oracle19c_Jena-3.12.0に最新のRDF Graph Support for Apache Jenaが含まれています。

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


作業はmacOS上で実施します。あまりホストの環境に変更を加えないように、Eclipse RDF4Jと同様にJDK11をインストールしたコンテナを作成します。

V1052173-01.zipには、3種類のプラグインが含まれます。
  1. Apache Jena 3.12.0のプラグイン
  2. Apache Jena Fuseki 3.12.0のプラグイン(Jettyを含みます)
  3. Protege Desktop 5.5のプラグイン
これらのプラグインを使っている以下の2種類の機能について、動作を確認します。Protege Desktopのプラグインについては、別の記事「Protégé DesktopにOracle Pluginを組み込む」で紹介しています。
  1. Apache Jena Fuseki(バンドルされたJettyをWebサーバーとして使用)
  2. バルクローダーのorardfldr
最初に適当なフォルダを作成し、作業に使用するファイルを配置します。Apache JenaはV1052173-01.zipに含まれているため、Apache Jenaのサイトからダウンロードする必要はありません。

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


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


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


今回はオラクル・データベースにRDFのスキーマプライベート・ネットワークを作成した上で、RDFグラフを作成します。スキーマプライベート・ネットワークはローカルのコンテナ環境で動作しているOracle Database 26ai Freeに作成します。この環境はOracle APEXをローカルのコンテナ環境に作成した際に同時に作成したデータベースで、RDFのデータはAPEXのワークスペース・スキーマに保存します。

Oracle Database 26ai Freeでデフォルトで作成されるPDB、FREEPDB1にワークスペース・スキーマWKSP_APEXDEVで接続し、スキーマプライベート・ネットワークとしてLOCALNETを作成します。Oracle Database 26ai Freeなので、表領域はデフォルトで作成されるUSERSを指定します。
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> 


続けて、RDFグラフとしてMYTHを作成します。
begin
    sem_apis.create_rdf_graph(
        rdf_graph_name => 'MYTH'
        ,table_name    => null
        ,column_name   => null
        ,network_owner => 'WKSP_APEXDEV'
        ,network_name  => 'LOCALNET'
    );
end;
/

SQL> begin

  2      sem_apis.create_rdf_graph(

  3          rdf_graph_name => 'MYTH'

  4          ,table_name    => null

  5          ,column_name   => null

  6          ,network_owner => 'WKSP_APEXDEV'

  7          ,network_name  => 'LOCALNET'

  8      );

  9  end;

 10* /


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


SQL> 


このRDFグラフに保存するデータとして、以下を使用します。ChatGPTにプロンプトとして「ギリシャ神話の神々の関係をRDFのRDF/XML形式で表現してください。」を与えて生成しました。最初はTurtle形式を指定したのですが、それは上手く生成してくれませんでした。XMLやJSONの方が書式を間違えにくいのではと思います。


このデータをApache Jena Fusekiおよびorardfldrを使って、オラクル・データベースのRDFグラフに保存します。

RDF Graph Support for Apache Jenaを実装するコンテナ・イメージを作成します。podman buildを実行するディレクトリには、以下のファイルが配置されている状態です。

RDF % ls

Dockerfile jdk-11.0.29_linux-aarch64_bin.tar.gz

greek.xml V1052173-01.zip

RDF % 


以下のコマンドを実行します。

podman build -t oracle-jena .

RDF % podman build -t oracle-jena .

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

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

--> c51e9b2fa9cf

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

Oracle Linux 8 BaseOS Latest (aarch64)          7.9 MB/s | 148 MB     00:18    

Oracle Linux 8 Application Stream (aarch64)     8.6 MB/s |  66 MB     00:07    

Last metadata expiration check: 0:00:09 ago on Tue Nov 11 08:11:17 2025.

Package tar-2:1.30-11.el8_10.aarch64 is already installed.

Dependencies resolved.

Nothing to do.

Complete!

--> 417f72395b31

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

--> b6e073697caf

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

--> d1c99b253d7d

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

--> ece8e515bdba

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

time="2025-11-11T17:11:30+09:00" level=warning msg="SHELL is not supported for OCI image format, [/bin/bash -o pipefail -c] will be ignored. Must use `docker` format"

--> b4590b8db56a

[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

++ uname -m

+ ARCH=aarch64

+ '[' aarch64 = x86_64 ']'

++ ls /tmp/jdk-11.0.29_linux-aarch64_bin.tar.gz

+ mv /tmp/jdk-11.0.29_linux-aarch64_bin.tar.gz /tmp/jdk.tar.gz

+ mkdir -p /usr/java/jdk-11

+ tar --extract --file /tmp/jdk.tar.gz --directory /usr/java/jdk-11 --strip-components 1

time="2025-11-11T17:11:32+09:00" level=warning msg="SHELL is not supported for OCI image format, [/bin/bash -o pipefail -c] will be ignored. Must use `docker` format"

--> 4ba5f6a6ce4f

[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

--> e8af161518ea


[中略]



Rewriting and linking classes: done

Number of classes 1218

    instance classes   =  1158

    obj array classes  =    52

    type array classes =     8

Updating ConstMethods ... done. 

Removing unshareable information ... done. 

Scanning all metaspace objects ... 

Allocating RW objects ... 

Allocating RO objects ... 

Relocating embedded pointers ... 

Relocating external roots ... 

Dumping symbol table ...

Dumping objects to closed archive heap region ...

Dumping objects to open archive heap region ...

Relocating SystemDictionary::_well_known_klasses[] ... 

Removing java_mirror ... done. 

mc  space:      8192 [  0.1% of total] out of     65536 bytes [ 12.5% used] at 0x0000000800000000

rw  space:   3847072 [ 32.0% of total] out of   3866624 bytes [ 99.5% used] at 0x0000000800010000

ro  space:   7157720 [ 59.5% of total] out of   7208960 bytes [ 99.3% used] at 0x00000008003c0000

md  space:      2560 [  0.0% of total] out of     65536 bytes [  3.9% used] at 0x0000000800aa0000

st0 space:    413696 [  3.4% of total] out of    413696 bytes [100.0% used] at 0x00000007bfe00000

oa0 space:    212992 [  1.8% of total] out of    212992 bytes [100.0% used] at 0x00000007bfc00000

bm  space:    196616 [  1.6% of total] out of    196616 bytes [100.0% used] at 0x0000000000000000

total    :  11642232 [100.0% of total] out of  12029960 bytes [ 96.8% used]

--> 11472471b1d7

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

[2/2] COMMIT oracle-jena

--> 30e25d67d426

Successfully tagged localhost/oracle-jena:latest

30e25d67d42672ce0d5f5e67679e795bd5452f03e93ccf28206d93deb3c51cad

RDF % 


作成したコンテナ・イメージより、RDF Graph Support for Apache Jenaを実行するコンテナを作成します。Apache Jena Fusekiはデフォルトで3030番ポートでHTTPの接続を待ち受けするため、ホスト・ポートの3030にマップします。podman buildを実行したカレント・ディレクトリを/opt/oracleから参照できるようにマップしています。

echo "exit" | podman run --name oracle-jena -i -p 3030:3030 -v `pwd`:/opt/oracle oracle-jena

RDF % echo "exit" | podman run --name oracle-jena -i -p 3030:3030 -v `pwd`:/opt/oracle oracle-jena

RDF % 


作成したコンテナoracle-jenaを起動し、bashで接続します。

podman start oracle-jena
podman exec -it oracle-jena bash

RDF % podman start oracle-jena

oracle-jena

RDF % podman exec -it oracle-jena bash

[root@93caf7bb153a /]# 


/opt/oracleに移動し、V1052173-01.zip/opt/oracle-jena以下に解凍します。

cd /opt/oracle
unzip -d /opt/oracle-jena V1052173-01.zip

[root@93caf7bb153a /]# cd /opt/oracle

[root@93caf7bb153a oracle]# unzip -d /opt/oracle-jena V1052173-01.zip

Archive:  V1052173-01.zip

   creating: /opt/oracle-jena/fuseki/

  inflating: /opt/oracle-jena/fuseki/LICENSE  

  inflating: /opt/oracle-jena/fuseki/NOTICE  

  inflating: /opt/oracle-jena/fuseki/README  

   creating: /opt/oracle-jena/fuseki/bin/

  inflating: /opt/oracle-jena/fuseki/bin/s-delete  

  inflating: /opt/oracle-jena/fuseki/bin/s-get  

  inflating: /opt/oracle-jena/fuseki/bin/s-head  

  inflating: /opt/oracle-jena/fuseki/bin/s-post  

  inflating: /opt/oracle-jena/fuseki/bin/s-put  

  inflating: /opt/oracle-jena/fuseki/bin/s-query  

  inflating: /opt/oracle-jena/fuseki/bin/s-update  


[中略]


  inflating: /opt/oracle-jena/protege_plugin/OWLUpdater.jar  

   creating: /opt/oracle-jena/sparqlgateway-web-app/

  inflating: /opt/oracle-jena/sparqlgateway-web-app/sparqlgateway.war  

   creating: /opt/oracle-jena/fuseki/run/backups/

   creating: /opt/oracle-jena/fuseki/run/configuration/

   creating: /opt/oracle-jena/fuseki/run/databases/

   creating: /opt/oracle-jena/fuseki/run/logs/

   creating: /opt/oracle-jena/fuseki/run/system_files/

[root@93caf7bb153a oracle]# cd /opt/oracle-jena

[root@93caf7bb153a oracle-jena]# ls

bin            examples  fuseki-web-app  javadoc      protege_plugin  release_notes.txt      version.txt

bug_notes.txt  fuseki    jar             license.txt  README          sparqlgateway-web-app

[root@93caf7bb153a oracle-jena]# 


最初にApache Jena Fusekiを構成します。Apache Jena Fusekiが含まれているディレクトリへ移動します。

cd /opt/oracle-jena/fuseki

[root@9b5d51aee412 oracle]# cd /opt/oracle-jena/fuseki

[root@9b5d51aee412 fuseki]# ls

bin                fuseki         fuseki-server      fuseki-server.jar  NOTICE  run  webapp

config-oracle.ttl  fuseki-backup  fuseki-server.bat  LICENSE            README  tmp

[root@9b5d51aee412 fuseki]# 


移動したディレクトリ/opt/oracle-jena/fuseki以下にconfig-oracle.ttlがあります。Apache Jena Fusekiのデータセットの保存先としてオラクル・データベースを使用するための設定ファイルの雛形です。

この中のoracle:Datasetの設定のoracle:jdbcURLoracle:allGraphsを変更します。

今回はローカル環境のコンテナで実行されているOracle Database 26ai Freeに接続するため、oracle:jdbcURLHOSTとしてhost.containers.internalPORTとして1521SERVICE_NAMEとしてfreepdb1を指定します。oracle:UserはRDFグラフを作成したユーザーWKSP_APEXDEVoracle:PasswordはユーザーWKSP_APEXDEVのパスワードを指定します。oracle:Userの指定に限りませんが、オラクル・データベースに大文字として保存されている識別子については、大文字で指定します。

oracle:allGraphsoracle:firstModelMYTHoracle:networkOwnerWKSP_APEXDEVoracle:networkNameLOCALNETを指定します。

oracle:allGraphsの末尾に // で始まるコメントがあります。コメントとして認識されずエラーになるので削除します。

# Custom code.

[] ja:loadClass "oracle.spatial.rdf.client.jena.assembler.OracleAssemblerVocab" .

oracle:Dataset  rdfs:subClassOf  ja:RDFDataset .


<#oracle> rdf:type oracle:Dataset;

    oracle:connection

    [ a oracle:OracleConnection ;

      oracle:jdbcURL "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host.containers.internal)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=freepdb1)))";

      oracle:User "WKSP_APEXDEV" ;

      oracle:Password "******"

    ];

#    oracle:allGraphs [ oracle:firstModel "MODEL_NAME" ] .

    oracle:allGraphs [ oracle:firstModel "MYTH"; oracle:networkOwner "WKSP_APEXDEV"; oracle:networkName "LOCALNET" ] .


#


以上の変更を行ったconfig-oracle.ttlで、run/config.ttlを置き換えます。

cp config-oracle.ttl run/config.ttl

[root@9b5d51aee412 fuseki]# cp config-oracle.ttl run/config.ttl 

cp: overwrite 'run/config.ttl'? yes

[root@9b5d51aee412 fuseki]# 


デフォルトではlocalhostからのアクセスに限定されています。run/shiro.iniを開き、localhost以外からのアクセスを許可します。

/$/** = localhostFilterの行をコメントアウトします。
続いて、/$/** = anonの行からコメントを除き、有効にします。

[urls]

## Control functions open to anyone

/$/status = anon

/$/ping   = anon


## and the rest are restricted to localhost.

##/$/** = localhostFilter


## If you want simple, basic authentication user/password

## on the operations,

##    1 - set a better password in [users] above.

##    2 - comment out the "/$/** = localhost" line and use:

## "/$/** = authcBasic,user[admin]"


## or to allow any access.

/$/** = anon


# Everything else

/**=anon


以上でApache Jena Fusekiのサーバーを実行します。環境変数FUSEKI_HOMEが指定されていない場合は、実行時のカレント・ディレクトリがFUSEKI_HOMEとして認識されます。今回は/opt/oracle-jena/fusekiからfuseki-serverを実行しているため、環境変数FUSEKI_HOMEは指定していません。

sh fuseki-server

Apache Jena Fusekiのサーバーが起動します。

[root@93caf7bb153a fuseki]# sh fuseki-server

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/opt/oracle-jena/fuseki/fuseki-server.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/opt/oracle-jena/jar/slf4j-log4j12-1.7.20.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]

[2025-11-11 08:22:53] Server     INFO  Apache Jena Fuseki 3.12.0

[2025-11-11 08:22:53] Config     INFO  FUSEKI_HOME=/opt/oracle-jena/fuseki

[2025-11-11 08:22:53] Config     INFO  FUSEKI_BASE=/opt/oracle-jena/fuseki/run

[2025-11-11 08:22:53] Config     INFO  Shiro file: file:///opt/oracle-jena/fuseki/run/shiro.ini

[2025-11-11 08:22:53] IniRealm   WARN  Users or Roles are already populated.  Configured Ini instance will be ignored.

[2025-11-11 08:22:53] Config     INFO  Configuration file: /opt/oracle-jena/fuseki/run/config.ttl

[2025-11-11 08:22:53] OracleQueryProgressMonitor INFO  startMonitor: starts

[2025-11-11 08:22:54] Config     INFO  Register: /oracle

[2025-11-11 08:22:54] Server     INFO  Started 2025/11/11 08:22:54 UTC on port 3030


ブラウザよりApache Jena Fusekiのアクセスします。


dataset nameとして/oracleが含まれていることを確認します。


RDFデータをロードします。add dataをクリックします。


デフォルトのグラフにデータをロードするため、Destination graph name空白のままとします。Files to uploadselect files...をクリックし、greek.xmlを選択します。

ファイルを選択後、upload nowをクリックします


48 triplesのロードに成功したことを確認します。

queryをクリックし、ロードした内容をApache Jena Fusekiから確認します。


EXAMPLE QUERYSelection of triplesをクリックし、保存されているトリプルのうち25件を検索するSPARQLの問い合わせを実行します。

subject、predicate、objectの組みが25行検索されることが確認できれば、Apache Jena Fusekiの実装は完了です。


APEXのワークスペースにサインインし、SQLコマンドよりSEM_MATCHファンクションを使ってRDFグラフMYTHにロードされたトリプルを検索します。

以下のSQLを実行します。
select s$rdfterm, p$rdfterm, o$rdfterm
from table(sem_match(
    query => 'SELECT ?s ?p ?o WHERE { ?s ?p ?o }'
    , models => SEM_MODELS('MYTH')
    , rulebases => null
    , aliases => null
    , filter => null
    , index_status => null 
    , options =>' PLUS_RDFT=VC '
    , graphs => null
    , named_graphs => null
    , network_owner => 'WKSP_APEXDEV'
    , network_name => 'LOCALNET'
));
APEX側からもデータベースのロードされたRDFデータが確認できました。


orardfldrの動作を確認するため、RDFグラフMYTHを空にします。SEM_APIS.TRUNCATE_RDF_GRAPHを実行します。
begin
    sem_apis.truncate_rdf_graph(
        rdf_graph_name => 'MYTH'
        ,network_owner => 'WKSP_APEXDEV'
        ,network_name => 'LOCALNET'
    );
end;

先ほどと同じ問い合わせを実行し、RDFグラフMYTHの内容が空であることを確認します。


Apache Jena Fusekiから見ても、デフォルトのグラフの内容が空になっていることを確認します。


orardfldrを使ってgreek.xmlをデータベースにロードします。コンテナoracle-jenaに接続します。

podman exec -it oracle-jena bash

% podman exec -it oracle-jena bash

[root@9b5d51aee412 /]# 


環境変数ORACLE_JENA_HOME/opt/oracle-jenaを設定し、bin以下をPATHに含めます。

export ORACLE_JENA_HOME=/opt/oracle-jena
export PATH=$ORACLE_JENA_HOME/bin:$PATH

[root@9b5d51aee412 /]# export ORACLE_JENA_HOME=/opt/oracle-jena

[root@9b5d51aee412 /]# export PATH=$ORACLE_JENA_HOME/bin:$PATH

[root@9b5d51aee412 /]# 


ディレクトリ/opt/oracleに移動し、orardfldrのオンライン・ヘルプを表示します。

cd /opt/oracle
orardfldr --help

[root@9b5d51aee412 /]# cd /opt/oracle

[root@9b5d51aee412 oracle]# orardfldr --help

Usage: orardfldr --modelName=NAME --fileDir=DIR --lang=FMT --jdbcUrl=URL 

       --user="USER" --password=PASSWORD [--bulkLoadFlags="FLAGS"]

       [--networkName=NAME] [--networkOwner="OWNER"] [--numThreads=INT]

       [--proxyUser="USER"] [--rebuildAppTabIdx=BOOLEAN] [--truncateStgTab=BOOLEAN]

Performs an RDF bulk load of all files in a directory into Oracle Database.


  Mandatory Arguments:

    --modelName=NAME             Target semantic model for the load

    --fileDir=DIR                Data directory for the load

    --lang=FMT                   Data format (N-TRIPLE, RDF/XML, TURTLE,

                                 N-QUADS, TRIG)

    --jdbcUrl=URL                JDBC url for the target database

    --user="USER"                Database user name (case sensitive)

    --password=PASSWORD          Database user password


  Optional Arguments:

    --bulkLoadFlags="FLAGS"      Flags string to use with

                                 SEM_APIS.BULK_LOAD_FROM_STAGING_TABLE

    --networkName=NAME           Name of the semantic network to load into

                                 (Default MDSYS network if omitted)

    --networkOwner="OWNER"       Owner of the semantic network to load into

                                 (case sensitive, MDSYS is used if omitted)

    --numThreads=INT             Number of threads to use when populating

                                 the staging table (default 1)

    --proxyUser="USER"           Database proxy user name (case sensitive)

    --rebuildAppTabIdx=BOOLEAN   TRUE (default) to do bottom-up rebuilding

                                 of application table indexes

    --truncateStgTab=BOOLEAN     TRUE (default) to truncate pre-existing

                                 data in the staging table


[root@9b5d51aee412 oracle]# 


ロード対象のファイルは/opt/oracle/greek.xmlとして配置されていますが、ロード対象の指定はfileDir、つまりディレクトリである必要があります。そのためディレクトリdataを作成し、ロード対象のファイルgreek.xmlを作成したディレクトリdata以下に移動します。

mkdir data
mv greek.xml data

[root@9b5d51aee412 oracle]# mkdir data

[root@9b5d51aee412 oracle]# mv greek.xml data

[root@9b5d51aee412 oracle]#


orardfldrを呼び出します。

modelNameMYTHfileDirgreek.xmlを含む/opt/oracle/datalangはgreek.xmlのフォーマットであるRDF/XMLjdbcUrljdbc:oracle:thin:@host.containers.internal:1521/freepdb1userWKSP_APEXDEVpasswordにはユーザーWKSP_APEXDEVのパスワードを指定します。networkOwnerおよびnetworkNameは必須パラメータではありませんが、RDFグラフMYTHはスキーマプラベート・ネットワークに作成されているため、networkOwnerとしてWKSP_APEXDEVnetworkNameとしてLOCALNETを指定します。

orardfldr --modelName=MYTH --fileDir=/opt/oracle/data --lang=RDF/XML --jdbcUrl="jdbc:oracle:thin:@host.containers.internal:1521/freepdb1" --user=WKSP_APEXDEV --password=<パスワード> --networkOwner=WKSP_APEXDEV --networkName=LOCALNET

[root@9b5d51aee412 oracle]# orardfldr --modelName=MYTH --fileDir=/opt/oracle/data --lang=RDF/XML --jdbcUrl="jdbc:oracle:thin:@host.containers.internal:1521/freepdb1" --user=WKSP_APEXDEV --password=********* --networkOwner=WKSP_APEXDEV --networkName=LOCALNET

log4j:WARN No appenders could be found for logger (oracle.spatial.rdf.client.jena.Parameters).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

loadRDF: enabling parallel DDL/DML/query for session [0]

loadRDF: truncating staging tables

loadRDF in parallel: PrepareWorker [0] running

PrepareWorker: thread [0] done to 0, file = /opt/oracle/data/greek.xml in (ms) 211

loadRDF: preparing for bulk load

loadRDF: starting bulk load

loadRDF: bulk load flags="PARSE"

loadRDF: bulk load completed in (ms) 1313

[root@9b5d51aee412 oracle]# 


ロードが完了したら、先ほどと同じ手順でApache Jena Fusekiよりトリプルを検索します。


APEXのSQLコマンドからも、同様にSEM_MATCHを呼び出して検索します。


以上でRDF Graph Support for Apache Jenaに含まれるApache Jena Fusekiとorardfldrの基本的な動作確認ができました。

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