Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Auswählen zwischen FILTER, FILTER... IN und VALUES in Ihren Abfragen
Es gibt drei grundlegende Möglichkeiten zum Einfügen von Werten in SPARQL-Abfragen: FILTER, FILTER...IN und VALUES.
Angenommen, Sie möchten die Freunde mehrerer Personen in einer Abfrage nachschlagen. Bei Wahl von FILTER könnten Sie Ihre Abfrage wie folgt strukturieren:
PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. FILTER (?s = ex:person1 || ?s = ex:person2)}
Dadurch werden alle Triples in dem Graphen zurückgegeben, bei denen ?s an ex:person1 oder ex:person2 gebunden ist oder bei denen ein ausgehendes Edge mit der Bezeichnung foaf:knows vorhanden ist.
Sie können auch eine Abfrage mit FILTER...IN erstellen, bei der gleichwertige Ergebnisse zurückgegeben werden:
PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. FILTER (?s IN (ex:person1, ex:person2))}
Sie können auch eine Abfrage mit VALUES erstellen, die in diesem Fall auch gleichwertige Ergebnisse zurückgibt:
PREFIX ex: <https://www.example.com/> PREFIX foaf : <http://xmlns.com/foaf/0.1/> SELECT ?s ?o WHERE {?s foaf:knows ?o. VALUES ?s {ex:person1 ex:person2}}
Obwohl diese Abfragen in vielen Fällen semantisch gleichwertig sind, gibt es einige Fälle, in denen sich die beiden FILTER-Varianten von der VALUES-Variante unterscheiden:
-
Der erste Fall tritt ein, wenn Sie doppelte Werte einfügen, wie z. B., wenn Sie dieselbe Person zweimal einfügen. In diesem Fall schließt die Abfrage
VALUESdie Duplikate in Ihr Ergebnis ein. Sie können solche Duplikate explizit eliminieren, indem Sie einenDISTINCT-Parameter zurSELECT-Klausel hinzufügen. Unter bestimmten Umständen kann es jedoch sinnvoll sein, wenn Abfrageergebnisse beim Einschluss redundanter Werte Duplikate enthalten.Die
FILTER...IN- undFILTER-Versionen extrahieren den Wert jedoch nur einmal, wenn derselbe Wert mehrmals vorkommt. -
Der zweite Fall bezieht sich auf die Tatsache, dass
VALUESimmer eine genaue Übereinstimmung vornimmt, währendFILTERin einigen Fällen eine Typenhochstufung anwenden oder eine Fuzzyübereinstimmung vornehmen kann.Wenn Sie beispielsweise ein Literal wie z. B.
"2.0"^^xsd:floatin Ihre Werte-Klausel einschließen, entspricht eineVALUES-Abfrage genau diesem Literal, einschließlich Literalwert und Datentyp.Im Gegensatz dazu produziert
FILTERfür diese numerischen Literale eine Fuzzyübereinstimmung. Die Übereinstimmungen könnten Literale mit dem gleichen Wert, aber mit unterschiedlichen numerischen Datentypen, wie z. B.xsd:double, enthalten.Anmerkung
Es gibt keinen Unterschied zwischen dem
VALUESVerhaltenFILTERund bei der Aufzählung von Zeichenfolgenliteralen oder. URIs
Die Unterschiede zwischen FILTER und VALUES können sich auf die Optimierung und die resultierende Abfrageauswertungsstrategie auswirken. Außer wenn Ihr Anwendungsfall eine Fuzzyübereinstimmung erfordert, raten wir zur Verwendung von VALUES, da damit eine Suche nach besonderen Fällen im Zusammenhang mit der Umwandlung von Datentypen vermieden wird. Dies hat zur Folge, dass VALUES häufig eine effizientere Abfrage produziert, die schneller und kostengünstiger ausgeführt wird.