

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
<a name="best-practices-sparql"></a>

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 das Neptune-Diagramm mit SPARQL](access-graph-sparql.md).

**Topics**
+ [Standardmäßige Abfrage aller benannten Graphen](best-practices-sparql-query.md)
+ [Angeben eines benannten Graphen für Load](best-practices-sparql-graph.md)
+ [Auswählen zwischen FILTER, FILTER... IN und VALUES in Ihren Abfragen](best-practices-sparql-batch.md)

# Standardmäßige Abfrage aller benannten Graphen
<a name="best-practices-sparql-query"></a>

Amazon Neptune ordnet jedem Triple einen benannten Graphen zu. Der Standard-Graph ist 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](https://www.w3.org/TR/sparql11-query/#rdfDataset)-Abschnitt der Query Language SPARQL 1.1-Spezifikation.

# Angeben eines benannten Graphen für Load
<a name="best-practices-sparql-graph"></a>

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](load-api-reference-load.md).

# Auswählen zwischen FILTER, FILTER... IN und VALUES in Ihren Abfragen
<a name="best-practices-sparql-batch"></a>

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 einen `DISTINCT`-Parameter zur `SELECT`-Klausel hinzufügen. Unter bestimmten Umständen kann es jedoch sinnvoll sein, wenn Abfrageergebnisse beim Einschluss redundanter Werte Duplikate enthalten.

  Die `FILTER...IN`- und `FILTER`-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ährend `FILTER` 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 eine `VALUES`-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**  
Es gibt keinen Unterschied zwischen dem `VALUES` Verhalten `FILTER` und 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.