7.2 SPARQLサービスの設定

この項では、fuseki.warファイルをWebLogic Serverにデプロイすることにより、SPARQL Webサービス・エンドポイントを設定する方法について説明します。

WebLogic Serverにアプリケーションをデプロイするにはいくつかの方法がありますが、このトピックではautodeployオプションを取り上げます。

ノート:

WebLogic ServerのかわりにApache TomcatにFusekiをデプロイする場合は、「Apache TomcatにおけるFusekiのデプロイ」を参照してください。
  1. Oracle WebLogic Server 12c以上をダウンロードしてインストールします。

  2. Java 8以上がインストールされていることを確認します。

  3. Fusekiの構成ファイルの場所を定義するFUSEKI_BASEパラメータを設定します。デフォルトでは、このパラメータは/etc/fusekiに設定されています。

    このパラメータを、ダウンロードしたOTNキットのfusekiフォルダに設定できます。このフォルダにはfusekiの構成ファイルがすでに格納されています。詳細は、Jena Fusekiのドキュメント( https://jena.apache.org/documentation/fuseki2/fuseki-layout.html)を参照してください。

  4. fusekiの構成ファイル(config.ttl)でOracleデータセットを構成します。

    1. Fusekiの構成ファイルを編集する前に、RDFスキーマプライベート・ネットワークを作成します(「スキーマプライベートRDFネットワーク」を参照)。たとえば、ネットワーク名をSAMPLE_NET、ユーザー・スキーマをRDFUSER、表領域をRDFTBSとした場合、次のコマンドを使用してRDFネットワークを作成します。

      EXECUTE SEM_APIS.CREATE_RDF_NETWORK('RDFTBS', options=>'MODEL_PARTITIONING=BY_HASH_P MODEL_PARTITIONS=16', network_owner=>'RDFUSER', network_name=>'SAMPLE_NET' );
    2. config.ttlファイルを編集し、M_NAMED_GRAPHSという名前のモデルを使用してoracle:Dataset定義を追加します。次のスニペットは、構成を示しています。oracle:allGraphsの述語は、SPARQLサービス・エンドポイントがM_NAMED_GRAPHSモデルに格納されているすべてのグラフを使用して問合せを提供することを意味します。

      <#oracle> rdf:type oracle:Dataset;
      oracle:connection
      [ a oracle:OracleConnection ;
      oracle:jdbcURL "jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<host>)(PORT=<port>))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=<service_name>)))";
      oracle:User "RDFUSER"
      oracle:Password "<password>"
      ];
      oracle:allGraphs [ oracle:firstModel "M_NAMED_GRAPHS";    
                         oracle:networkOwner "RDFUSER"; 
                         oracle:networkName "SAMPLE_NET"] .
      
    3. Fuseki構成ファイルのserviceセクションで、Oracleデータセットをリンクします。

      <#service> rdf:type fuseki:Service ;
          # URI of the dataset -- http://host:port/ds
          fuseki:name                     "oracle" ;
      
          # SPARQL query services e.g. http://host:port/ds/sparql?query=...
          fuseki:serviceQuery             "sparql" ;
          fuseki:serviceQuery             "query" ;
          # SPARQL Update service -- http://host:port/ds/update?request=...
          fuseki:serviceUpdate            "update" ;   # SPARQL query service -- /ds/update
      
          # Upload service -- http://host:port/ds/upload?graph=default or ?graph=URI or ?default
          # followed by a multipart body, each part being RDF syntax.
          # Syntax determined by the file name extension.
          fuseki:serviceUpload            "upload" ;   # Non-SPARQL upload service
      
          # SPARQL Graph store protocol (read and write)
          # GET, PUT, POST DELETE to http://host:port/ds/data?graph= or ?default=
          fuseki:serviceReadWriteGraphStore      "data" ;
      
          # A separate read-only graph store endpoint:
          fuseki:serviceReadGraphStore       "get" ;   # Graph store protocol (read only) -- /ds/get
      
          fuseki:dataset           <#oracle> ;
          .
      

    M_NAMED_GRAPHSモデルがまだ存在しない場合は、初回のSPARQL問合せリクエスト時に自動的に作成されます。トリプルおよびクワッドの例をいくつか追加して、名前付きグラフ機能をテストできます。たとえば、リリース19.3より前のデータベースの場合は次のようにします。

    SQL> CONNECT username/password
    SQL> INSERT INTO m_named_graphs_tpl VALUES(sdo_rdf_triple_s('m_named_graphs','<urn:s>','<urn:p>','<urn:o>'));
    SQL> INSERT INTO m_named_graphs_tpl VALUES(sdo_rdf_triple_s('m_named_graphs:<urn:G1>','<urn:g1_s>','<urn:g1_p>','<urn:g1_o>'));
    SQL> INSERT INTO m_named_graphs_tpl VALUES(sdo_rdf_triple_s('m_named_graphs:<urn:G2>','<urn:g2_s>','<urn:g2_p>','<urn:g2_o>'));
    SQL> COMMIT;
    
  5. 次のとおり、WebLogic Serverのautodeployディレクトリに移動し、ファイルをコピーします。(開発ドメインでのアプリケーションの自動デプロイに関する詳細は、http://docs.oracle.com/cd/E24329_01/web.1211/e24443/autodeploy.htmを参照してください。)

    cd <domain_name>/autodeploy
    cp -rf  /tmp/jena_adapter/fuseki_web_app/fuseki.war  <domain_name>/autodeploy
    

    前述の例で、<domain_name>はWebLogic Serverドメインの名前です。

    WebLogic Serverドメインを2つの異なるモード(開発とプロダクション)で実行することはできますが、autodeploy機能を使用できるのは開発モードのみであることに注意してください。

  6. Webブラウザを使用し、URLに書式http://< hostname>:7001/fusekiで接続して(Webアプリケーションはポート7001でデプロイされているとします)、デプロイメントを確認します。

    「Apache Jena Fuseki」というタイトルのページと、サーバー上のデータセットのリストが表示されます。この例では、/oracleデータセットが表示されます。

  7. 次の問合せを入力して/oracleデータセットの「問合せ」ボタンをクリックし、問合せを実行します。
    SELECT ?g ?s ?p ?o
    WHERE 
    { GRAPH ?g { ?s ?p ?o} }
    

    結果は、4つの列と2つの結果バインディング・セットがあるHTML表になります。

7.2.1 クライアント識別子

support for Apache Jenaによって作成または使用されたデータベース接続ごとに、クライアント識別子が関連付けられます。クライアント識別子は、特に、Real Application Cluster (Oracle RAC)環境で、パフォーマンス分析とチューニングを実行しているときに、他のデータベース・アクティビティからRDF Graph support for Apache Jena関連のアクティビティを特定するために有用です。

デフォルトで割り当てられるクライアント識別子は、JenaAdapterです。ただし、次の形式を使用してJava VM clientIdentifierプロパティを設定することによって、異なる値を指定できます。

-Doracle.spatial.rdf.client.jena.clientIdentifier=<identificationString>

データベース側でRDF Graph support for Apache Jena関連のアクティビティのみのトレースを開始するには、DBMS_MONITOR.CLIENT_ID_TRACE_ENABLEプロシージャを使用します。たとえば、次のようにします。

SQL> EXECUTE DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE('JenaAdapter', true, true);

7.2.2 アプリケーション表およびステージング表に対するOLTP圧縮の使用

デフォルトでは、support for Apache Jenaは、次の構文に従った基本的な表圧縮を使用して、アプリケーション表と任意のステージング表(後者は「RDF Graph Support for Apache Jenaを使用したバルク・ロード」で説明されているようにバルク・ロードに使用される)を作成します。

CREATE TABLE .... (... column definitions ...) ... compress;

ただし、データベースにOracle Advanced Compressionオプションの使用がライセンスされている場合は、次のJVMプロパティを設定してOLTP圧縮をオンにできますので、これによって基礎となるアプリケーション表とステージング表に対するすべてのDML操作時にデータが圧縮されます。

-Doracle.spatial.rdf.client.jena.advancedCompression="compress for oltp"

7.2.3 非ASCII文字のN-Tripleエンコーディング

RDFリソースの字句表現において、文字がOracle Databaseに挿入される際に、非ASCII文字に対して\uHHHH N-Tripleエンコーディングが使用されます。(N-Tripleエンコーディングの詳細は、http://www.w3.org/TR/rdf-testcases/#ntrip_grammarを参照してください。)SPARQL問合せの通常リソースのエンコーディングは、同じように処理されます。

\uHHHH N-Tripleエンコーディングを使用することによって、サポートされるUnicode文字セットがOracle Databaseで使用されていない場合でも、国際的な文字(ノルウェー語とスウェーデンの文字の混在など)のサポートが可能になります。