2

私は小さなRDFモデルを構築しました。これには、ヒトゲノム上のいくつかの項目を説明するいくつかのトリプルのみが含まれています。

別のリレーショナルデータベースに保存されている、一部のゲノムセグメント(「遺伝子」など)と重複するアイテムのみを保持したいと思います。この遺伝子のデータベースは大きすぎて、私の最初のRDFモデルに挿入できません。

ARQを拡張して、クエリ中にモデルにいくつかの新しいステートメント(アイテムと重複する遺伝子のみを記述するRDFステートメント)を挿入する方法はありますか?

入力:

uri:object1  my:hasChromosome "chr1" .
uri:object1  my:hasStartPosition "1235689887" .
uri:object1  my:hasEndPosition "2897979879" .
uri:object1  dc:title "my variation" .

出力:

uri:object1  my:hasChromosome "chr1" .
uri:object1  my:hasStartPosition "1235689887" .
uri:object1  my:hasEndPosition "2897979879" .
uri:object1  dc:title "my variation" .
uri:gene1  dc:title "GeneName" .

http://jena.sourceforge.net/ARQ/arq-query-eval.htmlについて読んだことがありますが、迷っています。どの拡張メカニズムを選択する必要がありますか?財産 ?Web上にこれ以上の完全な例はありますか?

ありがとう、

4

2 に答える 2

2

詳細はここでは少し薄いです。カスタム関数を使用して、簡単に始めます。これにより、で外部ルックアップを実行しFILTERsたり、を使用してBIND値を取得したりできます。

更新については、 SPARQL更新を検討することをお勧めします。

最後に、あなたは言いました

別のリレーショナルデータベースに保存されている、一部のゲノムセグメント(「遺伝子」など)と重複するアイテムのみを保持したいと思います。

したがって、おそらく次のようなものです。

PREFIX my: <...>
PREFIX f:  <java:com.example.DBFunctions.>

DELETE { ?missing ?p ?o } # Purge the non-overlapping objects
WHERE {
    ?missing my:hasChromosome ?chr ; 
             my:hasStartPosition ?start ;
             my:hasEndPosition ?end .
    FILTER (!f:overlaps(?chr, ?start, ?end)) # true if not overlapping
}

わかりました、ここで推測していますが、それが少し役立つことを願っています。

于 2012-09-19T19:23:52.663 に答える
2

2つのデータストアがあります。1つはメモリモデルのイエナにある小さなデータセットで、もう1つはリレーショナルデータベースにある遺伝子関連データの大きなセットです。大量のデータセットが実際にインポートせずにローカルであるかのように、sparqlクエリを記述したいとします。(実際に実行したいデータ変換は少しあいまいです。)

SPARQL 1.1では、sparqlエンドポイント間でSERVICEキーワードを使用してこれを行うことができます。遺伝子データのリレーショナルデータベースをSPARQLエンドポイントとして使用できるようにするには、D2RQなどのSPARQLからSQLへのトランスレーターが必要です。またはデータをRDFに変換して、汎用のSPARQL対応トリプルストアにロードする必要があります。

遺伝子データがSPARQLエンドポイントで利用可能になったら。

PREFIX my: <...>
PREFIX f:  <java:com.example.DBFunctions.>

INSERT { ?missing a my:Gene } # mark a region as a gene
WHERE {
    ?missing my:hasChromosome ?chr ; 
         my:hasStartPosition ?start ;
         my:hasEndPosition ?end .
    SERVICE<http://localhost:????/gene_data/sparql>{
       ?gene a my:Gene .
         my:hasStartPosition ?gStart ;
         my:hasEndPosition ?gEnd .
       #Detect overlap.
       FILTER( !(?start > ?gEnd || ?end < ?gStart) ) .
    }
}

もう1つのオプションは、カスタム関数を使用して@user205512が示すようにフィルターを実行することです。フィルタJavaコードがJDBCを使用してリレーショナルデータベースに接続する場合。

于 2012-09-24T14:31:50.723 に答える