RDFグラフ機能を使用してSPARQLエンドポイントを設定するには、Webアプリケーション・アーカイブ(WAR)ファイルを作成し、サーバーのJ2EEコンテナにデプロイします。RDFグラフ機能は、Apache Jena Josekiをサポートしています。Apache Jena Josekiは、このWebアプリケーション・アーカイブを作成する際のSPARQLプロトコルとSPARQL問合せをサポートするオープンソースのSPARQLサーバーです。
次の各項では、Apache TomcatまたはOracle WebLogic Serverで、バンドルされているWebアプリケーション・アーカイブを使用してSPARQLサービスを設定する方法について説明します。
RDFグラフ機能でリリースされているパッケージには、Webアプリケーション・アーカイブ(joseki.war)がバンドルされています。旧リリースのOracle NoSQL Database用に、または変更の目的でWebアプリケーション・アーキテクチャ(joseki.war)を作成する方法の詳細は、「新しいSPARQLサービスWARファイルの生成」を参照してください。
バンドルされているjoseki.warをApache TomcatまたはOracle WebLogic Serverにデプロイする手順は次のとおりです。
「システム環境の設定」の説明に従って、Oracle NoSQL DatabaseのRDFグラフ・リリース・パッケージをダウンロードし、展開します。
次のコマンドで、joseki.warに含まれるjoseki-config.ttlファイルを展開します。
cd /tmp/jena_adapter/war jar xf joseki.war joseki-config.ttl
Apache Jena Josekiの構成ファイル(joseki-config.ttl)を変更し、Oracle NoSQLデータベースにアクセスする際のストア名、ホスト名、ホスト・ポートを指定します。この値はSPARQLサービス・エンドポイントで使用され、Oracle NoSQL Databaseへの接続が確立されて更新および問合せの操作が実行されます。この構成の詳細は、「SPARQLサービスにおけるOracle NoSQL Database接続の構成」を参照してください。
joseki-config.ttlを次のように更新して、joseki.warを再作成します。
jar uf joseki.war joseki-config.ttl
joseki.warを、選択したJ2EEコンテナにデプロイします。
この項では、SPARQLサービス・エンドポイントをApache Tomcat 7.0にデプロイする方法について説明します。Apache Tomcatは、Java ServletとJavaServer Pages (JSP)を実装するオープンソースのWebサーバーであり、Webアプリケーションを実行するHTTP Webサーバー環境を構築します。Apache Tomcatの詳細とサポートについては、http://tomcat.apache.org/を参照してください。
Apache Tomcat 7.0をダウンロードしてインストールします。詳細は、http://tomcat.apache.org/tomcat-7.0-doc/index.htmlを参照してください。
次のコマンドで、Apache Tomcat ServerのWebアプリケーション・ディレクトリに移動し、joseki.warファイルをコピーします。この操作で、warファイルが展開されてWebアプリケーションがデプロイされます。(Apache TomcatにおけるWebアプリケーションのデプロイについては、http://tomcat.apache.org/tomcat-7.0-doc/deployer-howto.htmlを参照してください。)
cd $CATALINA_BASE/webapps cp -rf /tmp/jena_adapter/joseki.war $CATALINA_HOME/webapps
Webブラウザで次のURLに接続し、デプロイされたことを確認します(Webアプリケーションはポート8080でデプロイされます)。
http://<hostname>:8080/joseki
「Oracle NoSQL Database SPARQL Service Endpoint using Joseki」というタイトルのページが開き、最初のテキスト・ボックスにサンプルのSPARQL問合せが表示されます。
「Submit Query」をクリックします。
「Oracle NoSQL Database SPARQL Endpoint Query Results」というタイトルのページが表示されます。問合せ実行に対象となった基盤のセマンティック・モデルによって、結果は表示されることも表示されないこともあります。
この項では、SPARQLサービス・エンドポイントをOracle WebLogic Server 12cにデプロイする方法について説明します。Oracle WebLogic Serverの詳細は、http://www.oracle.com/technology/products/weblogic/を参照してください。
Oracle WebLogic Server 12c Release 1 (12.1.1)をダウンロードしてインストールします。詳細は、http://www.oracle.com/technology/products/weblogic/とhttp://www.oracle.com/technetwork/middleware/ias/downloads/wls-main-097127.htmlを参照してください。
次のコマンドで、WebLogic Serverインストール環境のautodeployディレクトリに移動し、ファイルをコピーします。(開発ドメインにおけるアプリケーションの自動デプロイの詳細は、http://docs.oracle.com/cd/E24329_01/web.1211/e24443/autodeploy.htmのドキュメントを参照してください。)
cd <domain_name>/autodeploy cp -rf /tmp/joseki.war <domain_name>/autodeploy
上の例で、<domain_name>はWebLogic Serverのドメイン名です。
これで、WebLogic Serverドメインを開発モードと本番モードのどちらでも実行できるようになります。ただし、自動デプロイの機能を使用できるのは開発モードのみです。
Webブラウザで次のURLに接続し、デプロイされたことを確認します(ポート7001が使用されると想定しています)。
http://<hostname>:7001/joseki
「Oracle NoSQL Database SPARQL Service Endpoint using Joseki」というタイトルのページが開き、最初のテキスト・ボックスにサンプルのSPARQL問合せが表示されます。
「Submit Query」をクリックします。
デフォルトでは、joseki-config.ttlファイルにはOracle NoSQL Databaseに格納されているすべてのグラフを使用するoracle-nosql:Datasetの定義が含まれています。次のスニペットは、この構成を示したものです。
<#oracle> rdf:type oracle-nosql:Dataset;
joseki:poolSize 3; ## Number of concurrent connections allowed
## to this dataset.
oracle-nosql:connection ## NoSQL connection
[
rdf:type oracle-nosql:NoSQLConnection;
oracle-nosql:hostName "localhost";
oracle-nosql:storeName "mystore";
oracle-nosql:hostPort "5000";
];
oracle-nosql:allGraphs [] . ## Graph descriptions
oracle-nosql:allGraphs述語では、SPARQLサービス・エンドポイントがOracle NoSQL Databaseに格納されているすべての名前付きグラフ(デフォルトのグラフも含む)を使用して問合せを実行することを指定しています。問合せを実行するときに使用するルールベースも指定できます。次の例では、SPARQLサービス・エンドポイントがすべての名前付きグラフ(表明および推論されたトリプルも含み、これはルールベースID 1でマークされています)を使用して問合せを実行することが、oracle:ruleBaseID述語によって示されています。
<#oracle> rdf:type oracle-nosql:Dataset;
joseki:poolSize 3; ## Number of concurrent connections allowed
## to this dataset.
oracle-nosql:connection ## NoSQL connection
[
rdf:type oracle-nosql:NoSQLConnection;
oracle-nosql:hostName "localhost";
oracle-nosql:storeName "mystore";
oracle-nosql:hostPort "5000";
];
oracle-nosql:allGraphs [ oracle-nosql:ruleBaseID "1" . ] .
## Graph descriptions
SPARQLサービス・エンドポイントで、指定したセットのグラフ名のみを使用して問合せを実行する必要がある場合には、述語としてoracle-nosql:allGraphsではなくoracle-nosql:namedGraphを使用します。この構成の詳細は、「SPARQLサービスの構成: Oracle NoSQL Database」を参照してください。
次のJavaコード・スニペットを使用すると、サンプルのトリプルおよびクワッドをいくつか追加して名前付きグラフ機能をテストできます。
public static void main(String[] args) throws Exception
{
String szStoreName = args[0];
String szHostName = args[1];
String szHostPort = args[2];
System.out.println("Create Oracle NoSQL connection");
OracleNoSqlConnection conn =
OracleNoSqlConnection.createInstance(szStoreName,
szHostName,
szHostPort);
System.out.println("Create Oracle NoSQL graph and dataset ");
OracleGraphNoSql graph = new OracleGraphNoSql(conn);
DatasetGraphNoSql datasetGraph = DatasetGraphNoSql.createFrom(graph);
// Close graph, as it is no longer needed
graph.close();
// add data to the bob named graph
datasetGraph.add(new Quad(
Node.createURI("http://example.org/bob"), // graph name
Node.createURI("urn:bob"),
Node.createURI("http://xmlns.com/foaf/0.1/name"),
Node.createLiteral("Bob")));
// add data to the alice named graph
datasetGraph.add(new Quad(
Node.createURI("http://example.org/alice"), // graph name
Node.createURI("urn:alice"),
Node.createURI("http://xmlns.com/foaf/0.1/name"),
Node.createLiteral("Alice")));
ds.close();
conn.dispose();
}
クワッドを挿入したら、http://<hostname>:7001/joseki (Oracle WebLogic Serverの場合)またはhttp://<hostname>:8080/joseki (Apache Tomcatの場合)に移動し、次のSPARQL問合せを入力して「Submit Query」をクリックします。
SELECT ?g ?s ?p ?o
WHERE
{ GRAPH ?g
{ ?s ?p ?o}
}
結果は、4つの列と2セットの結果バインディングからなるHTML表になります。
このページには、「JSON Output」オプションもあります。このオプションを選択する(有効にする)と、SPARQL問合せの応答がJSON形式に変換されます。
Oracle NoSQL Databaseへの接続を構成するには、/tmp/joseki.warにあるApache Jena Josekiの構成ファイル(joseki-config.ttl)を変更し、Oracle NoSQL Databaseにアクセスする際のストア名、ホスト名、ホスト・ポートを指定する必要があります。この値がSPARQLサービス・エンドポイントで使用され、Oracle NoSQL Databaseへの接続が確立されて更新および問合せの操作が実行されます。
このデータを定義するには、joseki-config.ttlのoracle-nosql:connection述語を参照してください。この述語では、SPARQLサービス・エンドポイントが<store_name>という名前のOracle NoSQLデータベースに接続することを指定しています。アクセスに使用されるホスト名が<host_name>、ポートが<host_port>です。次のスニペットは、この構成を示したものです。
<#oracle> rdf:type oracle-nosql:Dataset;
joseki:poolSize 1; ## Number of concurrent connections allowed to
## this data set.
oracle-nosql:connection ## NoSQL connection
[
rdf:type oracle-nosql:NoSQLConnection;
oracle-nosql:hostName <host_name>;
oracle-nosql:storeName <store_name>;
oracle-nosql:hostPort <host_port>;
];
...
SPARQLサービス・エンドポイントは、指定されたOracle NoSQLデータベースに格納されているすべての名前付きグラフ(デフォルトのグラフも含む)に対して問合せが実行されるものとデフォルトで想定しています。<domain_name>/autodeploy/joseki.warにある構成ファイルjoseki-config.ttlを編集すれば、この設定を変更してデフォルトのグラフのみ、または名前付きグラフのサブセットのみを使用して問合せを実行できます。
用意されているjoseki-config.ttlファイルには、次のようにOracle NoSQL Databaseのデータセットを示すセクションがあります。
#
## Datasets
#
[] ja:loadClass
"oracle.spatial.rdf.client.jena.assembler.OracleAssemblerVocab" .
oracle-nosql:Dataset rdfs:subClassOf ja:RDFDataset .
<#oracle> rdf:type oracle-nosql:Dataset;
## Number of concurrent connections allowed to this dataset.
joseki:poolSize 1;
oracle-nosql:connection ## connection to an Oracle NoSQL Database
[
rdf:type oracle-nosql:NoSQLConnection;
oracle-nosql:hostName "localhost";
oracle-nosql:storeName "mystore";
oracle-nosql:hostPort "5000";
];
oracle-nosql:allGraphs [] .
ファイルのこのセクションで、次の操作が可能です。
joseki:poolSize値を変更します。この値には、このOracle NoSQLデータ・セット(<#oracle> rdf:type oracle-nosql:Dataset;)に対して許可される同時接続数が示され、そのデータセットはOracle NoSQL Databaseの各種RDFモデルを示しています。
次のように、プロパティoracle-nosql:defaultGraphを使用する問合せに使用されるデフォルトのグラフを指定します。
<#oracle> rdf:type oracle-nosql:Dataset;
joseki:poolSize 1; ## Number of concurrent connections allowed to
## this data set.
oracle-nosql:connection ## NoSQL connection
[
rdf:type oracle-nosql:NoSQLConnection;
oracle-nosql:hostName "localhost";
oracle-nosql:storeName "mystore";
oracle-nosql:hostPort "5000";
];
oracle-nosql:defaultGraph [] .
oracle:defaultGraph述語では、デフォルトのグラフ(グラフ名がない、またはNULLであるトリプルで構成される)がOracle NoSQL Databaseに格納されている場合に、SPARQLサービス・エンドポイントがそのデフォルト・グラフを使用して問合せを実行することを指定しています。
SPARQLサービス・エンドポイントで、デフォルトのグラフから表明および推論されたトリプルを使用して問合せを実行する必要がある場合には、推論されたトリプルのルールベースIDを指定する必要があります。oracle:ruleBaseID述語では、指定されたルールベースIDでマークされているすべてのトリプルをエンドポイントに含むことを指定しています。
たとえば次の例では、デフォルト・グラフのルールベースID 1を指定しています。
oracle-nosql:defaultGraph [ oracle-nosql:ruleBaseID "1" . ] .
SPARQLサービス・エンドポイントが問合せに使用する名前付きグラフのサブセットを指定します。たとえば次のように、<http://G1>と<http://G2>の2つの名前付きグラフを指定できます。
<#oracle>> rdf:type oracle-nosql:Dataset;
joseki:poolSize 1; ## Number of concurrent connections allowed to
## this data set.
oracle-nosql:connection ## NoSQL connection
[
rdf:type oracle-nosql:NoSQLConnection;
oracle-nosql:hostName "localhost";
oracle-nosql:storeName "mystore";
oracle-nosql:hostPort "5000";
];
oracle-nosql:namedGraph [ oracle-nosql:graphName <http://G1> ] .
oracle-nosql:namedGraph [ oracle-nosql:graphName <http://G2> ] .
oracle-nosql:namedGraph述語では、oracle-nosql:graphNameで指定されたグラフ名の名前付きグラフがOracle NoSQL Databaseに格納されている場合に、SPARQLサービス・エンドポイントがその名前付きグラフを使用して問合せを実行することを指定しています。この例では、SPARQLサービス・エンドポイントは<http://G1>と<http://G2>の2つの名前付きグラフのみを使用して問合せを実行します。このように、異なる名前付きグラフに属するトリプルは対象になりません。
SPARQLサービス・エンドポイントで、名前付きグラフで表明および推論されたトリプルを使用して問合せを実行する必要がある場合には、推論されたトリプルのルールベースIDを指定する必要があります。oracle:ruleBaseID述語では、指定されたルールベースIDでマークされているすべてのトリプルをエンドポイントに含むことを指定しています。たとえば次の例では、ルールベースID 1を名前付きグラフ<http://G1>と組み合せて使用するように指定しています。
oracle-nosql:namedGraph [
oracle-nosql:graphName <http://G1> ;
oracle-nosql:ruleBaseID "1" .
] .
この構成を使用する場合でも、SPARQLのUpdateリクエストを使用して新規のグラフを作成する、または名前付きグラフにデータを追加することは可能です。ただし、この構成で指定されていない名前付きグラフに対する問合せは、一致結果を返しません。