2017-08-23 13 views
0

私はTopQuadrant Composer Free Edition(TBC FE)を使用して、RDFとして保存されたOWLオントロジにSPARQL/SPINルール(主にSPINコンストラクタ)を埋め込んでいます。このプロセスの一部は、http://spinrdf.org/spで指定されたスキーマを持つhttp://spinrdf.org/sp.htmlに従って、SPARQLソースコードがRDF構造でトークン化/エンコードされていることです。 RDF4Jが実際に解釈してSPINルールを実行するのはこの構造体です。SPARQL/SPINクエリ/ルールをJavaからRDF構造に変換する方法は?

私はまた、私のトリプルストア、リスナー、SPARQLエンドポイント、およびSPINルールエンジンとしてRDF4Jを使用しています。また、データとルールを操作するカスタムJavaコードとGUIを生成しています。

私の質問はJavaでSPARQL/SPINソースコードをRDFとしてエンコードするにはどうすればよいですか?私はではなく、ではクエリ結果をエンコードする方法(別のstackoverflowの質問/応答で答えられました)ではなく、クエリ自体をエンコードする方法を尋ねています。その理由は、TBC FEのみに依存するのではなく、自分のJavaコードからSPINルールを編集できるようにするためです。

また、元のSPARQLクエリテキストを保存するオプションがあることにも注意してください。しかし、トークン化/構造化RDFが正しく解釈されているのに対し、これは正しく解釈されていないという経験があります。したがって、構造化RDFを使用する必要があります。

私は、このコード化を行うJavaコードの多くはおそらくApache Jenaの一部として書かれていることを期待しています。私はちょうどどこを見るかについてのポインタが必要です。

ありがとうございます!

PS:ここに、TBC FEでエンコードされたSPINコンストラクタの例があります。これには、SPARQL/SPINソースコードの元のsp:テキストと(sp:テキストブロックの後の)構造化RDFの開始が含まれます。それは、SPARQLソースコードからJavaを使用して生成できるようにするために必要な、構造化されたRDFです。

 <sp:Construct> 
     <sp:text rdf:datatype="http://www.w3.org/2001/XMLSchema#string" 
     ># [enabled] &lt;http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/Pub7#Pub7Proposal_makeRxSCMPointSurface&gt; construct an SCM Point Surface (zero radius) from supporting rx data items under an SCM receiver model 
CONSTRUCT { 
    ?this soo:hasSCMReceiverModel ?receiverModelURI . 
    ?receiverModelURI soo:hasSCMPointSurfaceLocation ?pointSurfaceURI . 
    ?pointSurfaceURI soo:SCMPointSurfaceHasPoint ?pointURI .&#xD; 
    ?pointSurfaceURI a soo:SCMPointSurfaceLocation . 
} 
WHERE { 
    ?this pub7:pub7ProposalHasDataItem ?rxRadiusDataItem . 
    ?rxRadiusDataItem a pub7:Pub7DataItem406 . 
    ?rxRadiusDataItem soo:hasSCMRadius ?radiusURI . 
    ?radiusURI Nuvio:hasDataValue ?radiusValue . 
    FILTER (?radiusValue = 0.0000) . 
    ?this pub7:pub7ProposalHasDataItem ?rxPointDataItem . 
    ?rxPointDataItem a pub7:Pub7DataItem403 . 
    ?rxPointDataItem soo:hasSCMPointLocation ?pointURI . 
    BIND (URI(CONCAT(str(?this), "_rxModel")) AS ?newReceiverModelURI) . 
    BIND (IF(bound(?existingReceiverModelURI), ?existingReceiverModelURI, ?newReceiverModelURI) AS ?receiverModelURI) . 
    BIND (URI(CONCAT(str(?receiverModelURI), "_pointSurface")) AS ?pointSurfaceURI) . 
}</sp:text> 
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string" 
     >[enabled] &lt;http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/Pub7#Pub7Proposal_makeRxSCMPointSurface&gt; construct an SCM Point Surface (zero radius) from supporting rx data items under an SCM receiver model</rdfs:comment> 
     <sp:templates rdf:parseType="Collection"> 
      <rdf:Description> 
      <sp:object rdf:parseType="Resource"> 
       <sp:varName rdf:datatype="http://www.w3.org/2001/XMLSchema#string" 
       >receiverModelURI</sp:varName> 
      </sp:object> 
      <sp:predicate rdf:resource="http://www.disa.mil/dso/a2i/ontologies/PBSM/Sharing/SpectrumOperationsOntology#hasSCMReceiverModel"/> 
      <sp:subject rdf:resource="http://spinrdf.org/spin#_this"/> 
      </rdf:Description> 
      <rdf:Description> 
      <sp:object rdf:parseType="Resource"> 
       <sp:varName rdf:datatype="http://www.w3.org/2001/XMLSchema#string" 
       >pointSurfaceURI</sp:varName> 
      </sp:object> 
      <sp:predicate rdf:resource="http://www.disa.mil/dso/a2i/ontologies/PBSM/Sharing/SpectrumOperationsOntology#hasSCMPointSurfaceLocation"/> 
      <sp:subject rdf:parseType="Resource"> 
       <sp:varName rdf:datatype="http://www.w3.org/2001/XMLSchema#string" 
       >receiverModelURI</sp:varName> 
      </sp:subject> 
      </rdf:Description> 
      <rdf:Description> 
      <sp:object rdf:parseType="Resource"> 
       <sp:varName rdf:datatype="http://www.w3.org/2001/XMLSchema#string" 
       >pointURI</sp:varName> 
      </sp:object> 
      <sp:predicate rdf:resource="http://www.disa.mil/dso/a2i/ontologies/PBSM/Sharing/SpectrumOperationsOntology#SCMPointSurfaceHasPoint"/> 
      <sp:subject rdf:parseType="Resource"> 
       <sp:varName rdf:datatype="http://www.w3.org/2001/XMLSchema#string" 
       >pointSurfaceURI</sp:varName> 
      </sp:subject> 
      </rdf:Description> 
      <rdf:Description> 
      <sp:object rdf:resource="http://www.disa.mil/dso/a2i/ontologies/PBSM/Sharing/SpectrumOperationsOntology#SCMPointSurfaceLocation"/> 
      <sp:predicate rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#type"/> 
      <sp:subject rdf:parseType="Resource"> 
       <sp:varName rdf:datatype="http://www.w3.org/2001/XMLSchema#string" 
       >pointSurfaceURI</sp:varName> 
      </sp:subject> 
      </rdf:Description> 
     </sp:templates> 
+1

たぶん私はあなたのテキストで何かを逃したが、なぜあなたは、単に[API](http://topbraid.org/spin/api/)を使用することはできませんか?その特徴の1つは、「テキストSPARQL構文とSPIN RDF語彙との変換」* – AKSW

+0

[例](https://github.com/spinrdf/spinrdf/blob/master/src-examples/org/topbraid/spin /examples/SPINParsingExample.java)は、クエリ文字列からSPIN RDFへの変換を返します。 – AKSW

+0

実際は@AKSW、これは私が探していた答えです。私の質問があまりにも単純ではないことを願っています私はxercesimpl-2.7.1.jar、libthrift-0.9.1.jar、spin-2.0.0.jar、jena 3.4.0 jarファイルを私のプロジェクトに組み込み、パスを構築しました。走るありがとう!私は自分の質問に対する答えとしてこれを掲示することができますが、それは本当にあなたの答えです。あなたが望むなら、答えを投稿することができます。あなたの選択。ありがとう! –

答えて

1

@AKSWが指摘しているように、SPIN APIとJenaライブラリを組み合わせることで、私が何をしているのかを達成することができます。 TopBraidのSPINParsingExample.javaは私がしたいことに非常に近いです。

Eclipseプロジェクトとビルドパスに1つのSPINライブラリといくつかのJenaライブラリファイル(.jarファイル)を追加する必要がありました。私はこれらの依存関係を処理する自動化された方法があることを知っていますが、今は手動で行っています。また、手動でそれをやって人のために、これらのファイルは以下の通りです...

SPINライブラリ:

Apacheのイエナライブラリ(3.0を使用することをお勧め。コメントで示唆されるように1):

+0

答えを「受け入れる」ことを忘れないでください:D(ところで、将来的にはMaven/Gradleについて、それは絶対に便利です、信じてください) – AKSW

+0

注意:SPIN-2.0.0はjena-3.0.1、jena 3.4 + spin-2.0.0を一緒に使うことはできません!少なくともスピン推論の場合(ただし、上記の例と突然衝突していないことをテストしました)。 – Sigrem

+0

jenaモデルのapiに3.0.1から3.4.0の間で変更はなく、rdf解析ではこの機能( 'jena-resource polymorphism')のみを使用しているため、根拠がありません。しかし、推論の間に 'java.lang.AbstractMethodError:メソッドorg/topbraid/spin/util/DatasetWrappingDatasetGraph.supportsTransactions()Z is abstract'のようなものが得られます。 – Sigrem

関連する問題