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.
Bewährte Methoden in Neptune für die Verwendung von SPARQL
Befolgen Sie diese bewährten Methoden bei der Verwendung der SPARQL-Abfragesprache mit Neptune. Informationen zur Verwendung von SPARQL in Neptune finden Sie unter Zugriff auf den Neptun-Graphen mit SPARQL.
Standardmäßige Abfrage aller benannten Graphen
Amazon Neptune ordnet jedem Triple einen benannten Graphen zu. Der Standard-Graph ist definiert als die Vereinigung aller benannten Graphen definiert.
Wenn Sie eine SPARQL-Anfrage absenden, ohne ausdrücklich einen Graphen über das GRAPH
-Schlüsselwort oder Konstrukte wie FROM NAMED
anzugeben, berücksichtigt Neptune stets alle Triples in Ihrer DB-Instance. Die folgende Abfrage gibt beispielsweise alle Triples von einem Neptune-SPARQL-Endpunkt zurück:
SELECT * WHERE { ?s ?p ?o }
Triples, die in mehr als einem Graphen vorhanden sind, werden nur einmal zurückgegeben.
Weitere Informationen über die Standard-Graph-Spezifikation finden Sie im RDF-Dataset
Angeben eines benannten Graphen für Load
Amazon Neptune ordnet jedem Triple einen benannten Graphen zu. Wenn Sie beim Laden, Einfügen oder Aktualisieren von Triples keinen benannten Graphen angeben, verwendet Neptune den benannten Fallback-Graphen, http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph
, der durch die URI definiert ist.
Wenn Sie den Neptune-Bulk-Loader verwenden, können Sie den benannten Graphen für alle Triples (oder Quads mit leerer vierter Position) angeben. Dazu verwenden Sie den parserConfiguration: namedGraphUri
-Parameter. Weitere Informationen zur Load
-Befehlssyntax des Neptune-Bulk-Loaders finden Sie unter Neptune-Loader-Befehl.
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
VALUES
die 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
VALUES
immer eine genaue Übereinstimmung vornimmt, währendFILTER
in einigen Fällen eine Typenhochstufung anwenden oder eine Fuzzyübereinstimmung vornehmen kann.Wenn Sie beispielsweise ein Literal wie z. B.
"2.0"^^xsd:float
in Ihre Werte-Klausel einschließen, entspricht eineVALUES
-Abfrage genau diesem Literal, einschließlich Literalwert und Datentyp.Im Gegensatz dazu produziert
FILTER
fü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
Das Verhalten von
FILTER
undVALUES
unterscheidet sich bei nicht der Auflistung von Zeichenfolgenliteralen oder von 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.