SPARQL で通常のクエリを快適に記述できるようになってきましたが、より高度なクエリにはまだ問題があります。最近の問題は、where 句に一致するものを除くすべてを選択しようとしていることです。たとえば、妻が好きではない車の色を好むすべての夫を見つけたいとします (私は専有モデルに取り組んでいるので、例を許して、実際のモデルで意味があることを信頼してください)。
私は持っているかもしれません:
<bob> <spouse> <alice>
<bob> <likes> <red>
<alice> <likes> <red>
<carl> <spouse> <dorothy>
<carl> <likes> <blue>
<dorothy> <likes> <yellow>
<eric> <spouse> <fannie>
<eric> <likes> <black>
ボブではなくカールとエリックを選択するクエリは何ですか? 同じクエリで青と黒を選択できればボーナス ポイント。ボブを選択するのは簡単です:
select ?husband ?color where {?husband <spouse> ?wife . ?husband <likes> ?color . ?wife <likes> ?color}
私が探しているのは:
select ?husband ?color where {?husband <spouse> ?wife . ?husband <likes> ?color . NOT (?wife <likes> ?color)}
しかし、明らかにそれは間違っています。それで、何が正しいのですか?