I reviewed and accept the Oracle License Agreement.にチェックを入れ、V1052173-01.zipをダウンロードします。
- Apache Jena 3.12.0のプラグイン
- Apache Jena Fuseki 3.12.0のプラグイン(Jettyを含みます)
- Protege Desktop 5.5のプラグイン
- Apache Jena Fuseki(バンドルされたJettyをWebサーバーとして使用)
- バルクローダーのorardfldr
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>
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 % 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 %
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 %
RDF % podman start oracle-jena
oracle-jena
RDF % podman exec -it oracle-jena bash
[root@93caf7bb153a /]#
[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]#
[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のデータセットの保存先としてオラクル・データベースを使用するための設定ファイルの雛形です。
# 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を置き換えます。
[root@9b5d51aee412 fuseki]# cp config-oracle.ttl run/config.ttl
cp: overwrite 'run/config.ttl'? yes
[root@9b5d51aee412 fuseki]#
[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は指定していません。
[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
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'
));
begin
sem_apis.truncate_rdf_graph(
rdf_graph_name => 'MYTH'
,network_owner => 'WKSP_APEXDEV'
,network_name => 'LOCALNET'
);
end;
% podman exec -it oracle-jena bash
[root@9b5d51aee412 /]#
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 /]#
[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以下に移動します。
[root@9b5d51aee412 oracle]# mkdir data
[root@9b5d51aee412 oracle]# mv greek.xml data
[root@9b5d51aee412 oracle]#
[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よりトリプルを検索します。













