Sparql - Begrenzungskriterien auf Prädikate anwenden
Ich bin ziemlich neu in RDF / Sparql, also entschuldige mich für eine falsche Terminologie und auch für das ziemlich schreckliche Beispiel, das folgt:
Gab den folgenden RDF-Datensatz:
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix e: <http://www.example.com/#> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
e:Freemason a owl:Class .
e:Civilian a owl:Class .
e:Marty a e:Freemason .
e:Eugene a e:Freemason .
e:Mike a e:Freemason .
e:Alan a e:Freemason .
e:Paul a e:Civilian .
e:Marty foaf:knows e:Eugene .
e:Eugene foaf:knows e:Mike .
e:Eugene foaf:knows e:Paul .
e:Paul foaf:knows e:Alan .
Ich versuche Freunde von Freunden zu identifizieren, diee:Marty
kennt durch anderee:Freemason
ur @s.
So
Marty kennt Mike durch Eugene und sie sind alle Freimaurer, also ist es in Ordnung Marty kennt Eugene, der einen zivilen Freund Paul hat. Paul hat einen Freimaurerfreund Alan. Marty hat jedoch keinen "Nur-Freimaurer" -Pfad zu Alan, daher sollte er ausgeschlossen werden.Hier ist die SPARQL-Abfrage, die ich habe:
prefix e: <http://www.example.com/#>
prefix foaf: <http://xmlns.com/foaf/0.1/>
SELECT *
{
<http://www.example.com/#Marty> foaf:knows+ ?target .
?target a e:Freemason .
}
Dies gibt zurück:
http://www.example.com/#Eugene
http://www.example.com/#Mike
http://www.example.com/#Alan
Hier ist Alan dabei, da er mit dem @ übereinstimis-a-freemason
Kriterien.
Wie ändere ich die Abfrage, um Alan auszuschließen?