PREFIX prefix: <http://example.org/ns#>
SELECT *
WHERE
{
?x rdf:type ?type .
}
のようなSPARQLクエリは、今私はprefix:type1
またはprefix:type2
いずれかとして?type
のタイプを指定したいと持っています。これはどのように行うべきですか?
PREFIX prefix: <http://example.org/ns#>
SELECT *
WHERE
{
?x rdf:type ?type .
}
のようなSPARQLクエリは、今私はprefix:type1
またはprefix:type2
いずれかとして?type
のタイプを指定したいと持っています。これはどのように行うべきですか?
UNION
などを使用できます。
PREFIX prefix: <http://example.org/ns#>
SELECT *
WHERE {
{ ?x a prefix:type1 } UNION { ?x a prefix:type2 }
}
注述語の位置で使用することができるSPARQLキーワードであり、RDF型URI http://www.w3.org/1999/02/22-rdf-syntax-ns#type
に対応a
を用いるようでFILTER
句を使用して、これを行うために他の方法があります様々な表情:?type = prefix:type1
の
||
?type IN (prefix:type1, prefix:type2)
それとも?type
クエリがより複雑であり、あなたが両面にクエリの多くを複製したくない場合は、これらが良いかもしれするためのオプションを指定するVALUES
句を使用することができますUNION
の2つの可能性を考慮する必要があります。
FILTER IN
よりもはるかに速く、BINDINGS
の機能が使用されます。 FILTER(?type IN (wo:Kingdon, wo:Phylum)
ではなく、次のクエリの行に沿って何かを使用することを強くお勧めします。 BINDINGS
を使用
SELECT * WHERE { ?x rdf:type ?type } BINDINGS ?type {(prefix:type1) (prefix:type2)}
は、それが、それらをフィルタリングする前に、すべての結果を返すのではなく、処理されているようにSPARQLエンジンが結果を制限することを可能にします。これにより、結果がずっと速く返されます。
もうバインドされません。それは価値です。このアプローチは、UNIONを使用するよりも優れていますが、FILTER(?IN IN ...)を使用するよりも使いやすくなります。 –
あなたはこのように、フィルタ構文を使用してそれを行うことができます:
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))
}
は、すべての結果が返されます後にフィルタリングが適用される場合、私は知らないと私は、効率性を保証することはできませんのでご注意くださいまたはない。
"the type in"は興味深いようですが、機能していない、私は確かに構文上のエラーをしています、そうですか? SELECT * WHERE { ?x rdf:type?type ?type(wo:Kingdom、wo:Phylum) } – Noor
これらは 'FILTER'節で使用できる式ですので、' FILTER(?タイプIN(wo:Kingdon、wo:Phylum)) ' – RobV