FILTER、FILTER... から選択IN、および VALUES クエリ - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

FILTER、FILTER... から選択IN、および VALUES クエリ

SPARQL クエリに値を挿入するにはFILTER、、FILTER...IN、 の 3 つの基本的な方法がありますVALUES

たとえば、単一のクエリで複数の人から友人を検索するとします。FILTER を使用して、クエリを次のように構築します。

PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. FILTER (?s = ex:person1 || ?s = ex:person2)}

これにより、ex:person1 または ex:person2 への ?s バウンドがあり、foaf:knows というラベル付きの出ていく辺があるグラフにあるすべてのトリプルを返します。

また、同等の結果を返す FILTER...IN を使用してクエリを作成することができます。

PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. FILTER (?s IN (ex:person1, ex:person2))}

この場合は同等の結果を返す VALUES を使用してクエリを作成することもできます。

PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. VALUES ?s {ex:person1 ex:person2}}

多くの場合、これらのクエリは意味的に同等ですが、2 つの FILTER バリアントが VALUES バリエーションと異なる場合があります。

  • 最初のケースは、同じ個人を 2 回挿入するなど、重複した値を挿入する場合です。この場合、VALUES クエリには、結果の重複内容が含まれています。このような重複は、SELECT 句に DISTINCT を追加して、明示的に排除することができます。しかし、重複した値の挿入に対して、クエリ結果での重複が必要になるような状況が発生する可能性があります。

    ただし、FILTER バージョンと FILTER...IN バージョンでは、同じ値が繰り返し現れるとき、1 回だけ値を抽出します。

  • 2 番目のケースは VALUES が常に完全一致を実行する一方で、FILTER ではタイププロモーションが適用され、あいまい一致を実行する場合があることに関係しています。

    たとえば、"2.0"^^xsd:float などのリテラルを値に含める場合、VALUES クエリは、リテラル値とデータ型を含め、このリテラルに正確に一致します。

    対照的に、FILTER では、これらの数値リテラルに対してあいまい一致が出されます。一致には、同じ値で、xsd:double など、数値データ型が異なるリテラルを含めることができます。

    注記

    文字列リテラルまたは を列挙する場合、 FILTERVALUESの動作に違いはありませんURIs。

FILTERVALUES の違いは、最適化と生成されるクエリ評価戦略に影響を与える可能性があります。ユースケースであいまい一致を必要としない限り、VALUES を使用することをお勧めします。これにより、型キャストに関連する特殊なケースを確認するのを避けることができます。その結果、VALUES では、高速で動作し、低コストの効率的なクエリを作成できることがよくあります。