4

次のようなデータセットがあります。

<item1> <isLocated> <someAddress>
<item2> <isLocated> <someAddress>
<item3> <isLocated> <someOtherAddress>

SPARQLを使用して質問に答えられるようにしたいと思います。

「someAddressまたはsomeOtherAddressでどのアイテムを見つけますか?」

私はこのようなUNIONを使うことができます:

SELECT ?item
{
    { ?item <isLocated> <someAddress> }
    UNION { ?item <isLocated> <someOtherAddress }
} 

しかし、私が数百または数千のアドレスについて話し始めると、これはかなり厄介になると思います。

VALUESインラインデータは、UNIONクエリのヒープよりも適していると思います。次のクエリを書いてみましたが、RDFストア/エンジン(ビッグデータ)がそれを詰まらせているようです:

SELECT ?item
{
    ?item <isLocated> ?loc .
}
VALUES (?loc) { (<someAddress>) (<someOtherAddress>) }

( http://www.w3.org/TR/sparql11-query/#inline-dataに基づく)

ビッグデータから得られるエラーは次のとおりです。5行7列目の字句エラー。発生: ""(32)、後: "VALUES"

このクエリを正しく作成していますか?UNIONまたはVALUESを使用する方が適切ですか?

このクエリをどのようにフォーマットしても(上記のリンクのw3の例に基づいて)、同様の字句エラーが発生するようです。

何か案は?

乾杯。

4

2 に答える 2

5

VALUES推測では、ビッグデータはまだこの条項をサポートしていないと思います。これは、最新のSPARQLワーキングドラフト(ほんの数週間前に公開された)で導入されたまったく新しい機能であるため、当然のことながら、いくつかのツールはまだそれをサポートしていません。

代わりに使用してみることができますBINDINGS(これは、置き換えられた以前の作業ドラフトとほぼ同じ機能です)。

于 2012-09-20T07:52:29.677 に答える
3

構文を少し混乱させました。次のいずれかを使用します。

VALUES ?loc { <someAddress> <someOtherAddress> }

これは単一変数の特殊な形式です。または:

VALUES (?loc) { ( <someAddress> ) ( <someOtherAddress> ) }

一般的な形式。

あなたも試すことができますIN

FILTER (?loc IN ( val1, val2, ...))
于 2012-09-20T07:51:14.787 に答える