Ich komme langsam mit dem Schreiben von normalen Abfragen in SPARQL zurecht, aber ich habe immer noch Probleme mit komplizierteren Dingen. Mein neuestes Problem ist der Versuch, alles auszuwählen, außer den Dingen, die der Where-Klausel entsprechen. Nehmen wir an, ich möchte alle Ehemänner finden, die eine Autofarbe mögen, die ihrer Frau nicht gefällt (ich arbeite an einem proprietären Modell, also entschuldigen Sie das Beispiel und vertrauen Sie einfach darauf, dass es im echten Modell Sinn macht).
Das hätte ich vielleicht:
<bob> <spouse> <alice>
<bob> <likes> <red>
<alice> <likes> <red>
<carl> <spouse> <dorothy>
<carl> <likes> <blue>
<dorothy> <likes> <yellow>
<eric> <spouse> <fannie>
<eric> <likes> <black>
Wie lautet die Abfrage, die Carl und Eric auswählt, aber nicht Bob? Bonuspunkte, wenn Sie blau und schwarz in derselben Abfrage auswählen können. Die Auswahl von bob wäre einfach:
select ?husband ?color where {?husband <spouse> ?wife . ?husband <likes> ?color . ?wife <likes> ?color}
Wonach ich suche, ist:
select ?husband ?color where {?husband <spouse> ?wife . ?husband <likes> ?color . NOT (?wife <likes> ?color)}
aber das ist natürlich falsch. Was ist also richtig?