14

このようなSPARQLクエリがあります

PREFIX prefix: <http://example.org/ns#>
SELECT *
WHERE 
{
    ?x rdf:type ?type .
}

?typeの型を or のいずれかprefix:type1として指定したいとしますprefix:type2。これはどのように行うべきですか?

4

4 に答える 4

14

UNIONたとえば、使用できます

PREFIX prefix: <http://example.org/ns#>
SELECT *
WHERE {
    { ?x a prefix:type1 } UNION { ?x a prefix:type2 }
}

awhich の使用は、述語の位置で使用でき、RDF タイプ URI に対応する SPARQL キーワードであることに注意してください。http://www.w3.org/1999/02/22-rdf-syntax-ns#type

FILTERさまざまな式で句を使用するなど、これを行う他の方法があります。

  • ?type = prefix:type1条件付きまたは演算子と組み合わせた一連の||
  • ?type IN (prefix:type1, prefix:type2)

または、VALUES句を使用してオプションを指定できます?type

クエリがより複雑で、クエリの多くを の両側に複製したくない場合UNIONや、考慮すべき可能性が 2 つ以上ある場合は、これらの方が適している場合があります。

于 2013-04-15T22:28:32.110 に答える
3

次のように、FILTER 構文を使用して実行できます。

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX prefix: <http://example.org/ns#>

SELECT ?s ?p ?o ?type
WHERE {
   ?s a ?type .
   ?s ?p ?o .
  FILTER(?type IN (prefix:Type1, prefix:Type2))
}

すべての結果が返された後にフィルタリングが適用されるかどうかがわからないため、効率を保証できないことに注意してください。

于 2015-04-04T09:57:28.000 に答える
3

Joshua が述べたように、受け入れられた回答は SPARQL 1.1 では正確ではなくなりました。

SPARQL 1.1 では、VALUESキーワードを使用できますが、このようなユースケースでは構文がより複雑に見えます。ただし、それをコンパクトな形式で書くこともできます。

SELECT * WHERE {
  VALUES ?type { prefix:Type1 prefix:Type2 }
  ?x rdf:type ?type
}
于 2020-08-25T09:54:14.047 に答える