TopQuadrant Composer Free Edition (TBC FE) を使用して、RDF として保存されている OWL オントロジーに SPARQL/SPIN ルール (主に SPIN コンストラクター) を埋め込んでいます。このプロセスの一部は、SPARQL ソース コードが、 http://spinrdf.org/spで指定されたスキーマのhttp://spinrdf.org/sp.htmlに従って、RDF 構造でトークン化/エンコードされることです。SPIN ルールを実行するために RDF4J によって実際に解釈されるのは、この構造です。
また、RDF4J をトリプル ストア、推論、SPARQL エンドポイント、および SPIN ルール エンジンとして使用しています。さらに、データとルールを操作するためのカスタム Java コードと GUI を生成しています。
私の質問は、SPARQL/SPIN ソース コードを RDF としてエンコードするために Java で何を使用できるかということです。クエリ結果をエンコードする方法(別のスタックオーバーフローの質問/応答で回答されました)ではなく、クエリ自体をエンコードする方法を尋ねていることに注意してください。その理由は、TBC FE だけに依存するのではなく、独自の Java コードから SPIN ルールを編集できるようにしたいからです。
また、元の SPARQL クエリ テキストを保存するオプションを認識していることにも注意してください。しかし、トークン化/構造化された RDF は正しく解釈されるのに対し、これは正しく解釈されないというのが私の経験です。したがって、構造化された RDF を使用する必要があります。
このエンコードを行うための Java コードの多くが、おそらく Apache Jena の一部として既に作成されていることを願っています。どこを見るべきかについてのポインタが必要です。
ありがとう!
PS: これは、TBC FE によってエンコードされた SPIN コンストラクターの例の始まりです。これには、SPARQL/SPIN ソース コードの元の sp:text と、構造化された RDF の開始 (sp:text ブロックの後) の両方が含まれます。SPARQL ソース コードから Java を使用して生成できるようにする必要があるのは、構造化された RDF です。
<sp:Construct>
<sp:text rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
># [enabled] <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/Pub7#Pub7Proposal_makeRxSCMPointSurface> 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 .
?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] <http://www.disa.mil/dso/a2i/ontologies/PBSM/Interface/Pub7#Pub7Proposal_makeRxSCMPointSurface> 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>