私はRDFを使用して新しいプロジェクトに取り組んでおり、RDFとSPARQLを学んでいます。このクエリは、実際よりも簡単になると思いました。
このストアが与えられた場合 (オントロジーから簡略化)
Person1 -Owns-> Part1
Person2 -Owns-> Part1
Person2 -Owns-> Part2
Part1 -PartOf-> Product1
Part2 -PartOf-> Product1
人が製品を完成させるために必要なすべての部品を返品しようとしています.
Person1 の場合、Product1 の作成を完了するには Part2 が必要です。Person2 が与えられた場合、Product1 を作成するためのすべての部品を持っているので、彼には何も必要ありません。
1 回のクエリですべての人と各製品に必要なすべての部品を返したいと思いますが、特定の人が必要とする部品を見つけようとして、より小さく始めようと考えました。実際のデータには、複数の製品と、複数の製品に含まれる可能性のある部品 (つまり、ネジは多くの製品に含まれる) と、複数の製品の一部である部品を所有する人物が含まれます。サブセット クエリを機能させることができたら、それを拡張できるはずです。
select ?parts
where
{
?parts <PartOf> <Product1> .
minus {<Person1> <Owns> ?parts}
}
私が考えたのは、Product1 の一部であるすべてのパーツを取得してから、Person1 が所有するパーツを削除することでした。しかし、Product1 のすべてのパーツを取得しています。他の多くのクエリを試しましたが、チュートリアルや本を読んだ後、これが最も理にかなっています。誰かが私が間違っているところを指摘できますか?
御時間ありがとうございます。