2017-01-10 5 views
1

私は、例を再現しようとし、例えば、トリプル量が所定数である場合という名前のグラフに挿入することを防止することを目的とする次のクエリを有する5SPARQLにデータを挿入するときに集合関数を使用することは可能ですか?データの挿入がある

hereを示しました。可能ですが、私は同じ名前のグラフを使用する必要があります。最も重要な集計関数はCOUNTです。集約オペレータが使用する、FILTER句の内部に配置することができない全ての

INSERT 
    { 
    GRAPH <http://example/g2> { ?s ?p ?o } 
    } 
WHERE 
{ 
    GRAPH <http://example/g1> { 
    ?s ?p ?o .   # select all triples 
    { SELECT ?s   # do a check for the selected subject 
     WHERE { GRAPH <http://example/g1> { ?s ?p ?o } } 
     GROUP BY ?s   # count properties per subject 
     HAVING (COUNT(?p) < 5) # only subjects with less than 5 properties 
    } 
    } 
} 

まず:

Aggregate expression not legal at this point 
+2

RDFはトリプルのセットです。任意の順序は、あなた自身が導入したIDの観点から行う必要があり、実際にはSPARQLクエリでは 'ORDER BY'の使用が必要です。それ以外のものは、保証のない実装依存の順序です。 – AKSW

+1

**全質問**を変更しました!どうしてこれをやったの?私のコメントは意味をなさない... – AKSW

+0

あなたのご意見は、問題をよりよく理解する助けとなりました。 – Caleb

答えて

2

はい、これが可能である:

INSERT 
    { 
    GRAPH <http://example/g1> { ?s ?p ?o } 
    } 
WHERE 
    { 
    GRAPH <http://example/g1> 
    { 
    ?s ?p ?o . 
    FILTER (COUNT(?p) < 5) 
    } 
} 

イエナ布石は、次のエラーが発生しますそれらを条件付きでHAVING句に入れる必要があります。

さらに、被験者ごとにプロパティを数えたいので、単純なパターンマッチと組み合わせた副選択(被験者のプロパティの数の制限をチェックする)を使用する必要があります。

EDIT私は少しあなたの元の更新を修正注:それはあなたが照会されているものとは異なるという名前のグラフに挿入です。同じ名前のグラフに挿入することはもちろん可能ですが、そのグラフに既に存在しているのと同じデータを挿入するだけで、結果は観測できません。

+0

この質問は私の地元のJena Fusekiでは働いていません。 INSERT DATAのみが動作していますが、クエリ全体は動作していません。 – Caleb

+0

まず第一に、「うまくいきません」は問題の説明ではありません。あなたは何を見ていますか、何を期待しましたか?私はここで説明を追加したインラインコメントは有効ではないことに注意してください、SPARQLは//の代わりに#を使用するのを忘れていました。私はRDF4Jでの動作をテストしました。もちろん、この操作の_result_は、同じ名前のグラフからデータを取得したり、同じ名前のグラフにデータを挿入するときには何も表示されません。結果を観察したい場合は、目的の名前付きグラフを別のものに変更する必要があります。私はこれを示すために私の答えを更新しました。 –

関連する問題